├── .gitignore ├── README.md ├── example.env ├── index.html ├── package.json ├── postcss.config.cjs ├── public └── vite.svg ├── src ├── App.tsx ├── assets │ ├── github.svg │ ├── google.svg │ └── react.svg ├── components │ ├── Header.tsx │ ├── Layout.tsx │ └── Spinner.tsx ├── index.css ├── main.tsx ├── pages │ ├── home.page.tsx │ ├── login.page.tsx │ ├── profile.page.tsx │ └── register.page.tsx ├── router │ └── index.tsx ├── store │ ├── index.ts │ └── types.ts ├── utils │ ├── getGithubUrl.ts │ └── getGoogleUrl.ts └── vite-env.d.ts ├── tailwind.config.cjs ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock /.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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # How to Implement Google and GitHub OAuth in React.js 2 | 3 | These articles will teach you how to set up GitHub and Google OAuth flow in React.js applications. 4 | 5 | ## How to Implement Google OAuth2 in React.js 6 | 7 | In this article, you'll learn how to implement Google OAuth2 in a React.js application, including creating a project in the Google API Console, configuring the application's client ID and redirect URI, and implementing the necessary code in the React application. 8 | 9 | ![How to Implement Google OAuth2 in React.js](https://codevoweb.com/wp-content/uploads/2023/01/How-to-Implement-Google-OAuth2-in-React.js.webp) 10 | 11 | ### Topics Covered 12 | 13 | - Run the React Google OAuth2 Project 14 | - Run the React app with a Node.js API 15 | - Run the React app with a Golang API 16 | - Setup the React Project 17 | - Get the Google OAuth2 Client ID and Secret 18 | - Build the OAuth2 Consent Screen Link 19 | - Create a Zustand Store 20 | - Create Reusable React Components 21 | - Create a Spinner Component 22 | - Create a Header Component 23 | - Create a Layout Component 24 | - Implement the Authentication 25 | - Account Registration Page 26 | - Login Page 27 | - Create the Remaining Pages 28 | - Home Page 29 | - Profile Page 30 | - Create Routes for the Pages 31 | - Test the Google OAuth2 Flow 32 | - Create an Account 33 | - Login with OAuth2 34 | - Access the Protected Page 35 | 36 | Read the entire article here: [https://codevoweb.com/how-to-implement-google-oauth2-in-reactjs/](https://codevoweb.com/how-to-implement-google-oauth2-in-reactjs/) 37 | 38 | ## How to Implement GitHub OAuth in React.js 39 | 40 | In this article, you'll learn how to implement GitHub OAuth in a React.js application, including creating an OAuth app in the GitHub developer settings page, configuring the application's client ID, client secrets, and redirect URI, and implementing the necessary code in the React application. 41 | 42 | ![How to Implement GitHub OAuth in React.js](https://codevoweb.com/wp-content/uploads/2023/01/How-to-Implement-GitHub-OAuth-in-React.js.webp) 43 | 44 | ### Topics Covered 45 | 46 | - Run the React GitHub OAuth Project 47 | - Run the React App with Node.js API 48 | - Run the React App with Golang API 49 | - Setup the React Project 50 | - Get the GitHub OAuth Credentials 51 | - Generate the GitHub Consent Screen Link 52 | - Setup a React Store with Zustand 53 | - Create Reusable Components 54 | - Spinner Component 55 | - Header Component 56 | - Layout Component 57 | - Implement the GitHub OAuth 58 | - Account Registration Component 59 | - Login Component 60 | - Create the Other Pages 61 | - Home Page Component 62 | - Profile Page Component 63 | - Create Routes for the Pages 64 | 65 | Read the entire article here: [https://codevoweb.com/how-to-implement-github-oauth-in-reactjs/](https://codevoweb.com/how-to-implement-github-oauth-in-reactjs/) 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /example.env: -------------------------------------------------------------------------------- 1 | VITE_SERVER_ENDPOINT=http://localhost:8000 2 | 3 | VITE_GOOGLE_OAUTH_CLIENT_ID= 4 | VITE_GOOGLE_OAUTH_CLIENT_SECRET= 5 | VITE_GOOGLE_OAUTH_REDIRECT=http://localhost:8000/api/sessions/oauth/google 6 | 7 | VITE_GITHUB_OAUTH_CLIENT_ID= 8 | VITE_GITHUB_OAUTH_CLIENT_SECRET= 9 | VITE_GITHUB_OAUTH_REDIRECT_URL=http://localhost:8000/api/sessions/oauth/github -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "google-github-oath2-reactjs", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite --port 3000", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@hookform/resolvers": "^2.9.10", 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0", 15 | "react-hook-form": "^7.42.1", 16 | "react-router-dom": "^6.6.2", 17 | "react-toastify": "^9.1.1", 18 | "tailwind-merge": "^1.8.1", 19 | "zod": "^3.20.2", 20 | "zustand": "^4.3.2" 21 | }, 22 | "devDependencies": { 23 | "@types/react": "^18.0.26", 24 | "@types/react-dom": "^18.0.9", 25 | "@vitejs/plugin-react": "^3.0.0", 26 | "autoprefixer": "^10.4.13", 27 | "postcss": "^8.4.21", 28 | "tailwindcss": "^3.2.4", 29 | "typescript": "^4.9.3", 30 | "vite": "^4.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useRoutes } from "react-router-dom"; 2 | import routes from "./router"; 3 | 4 | function App() { 5 | const content = useRoutes(routes); 6 | return content; 7 | } 8 | 9 | export default App; 10 | -------------------------------------------------------------------------------- /src/assets/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/google.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import { Link, useNavigate } from "react-router-dom"; 2 | import { toast } from "react-toastify"; 3 | import useStore from "../store"; 4 | import Spinner from "./Spinner"; 5 | 6 | const Header = () => { 7 | const store = useStore(); 8 | const user = store.authUser; 9 | const navigate = useNavigate(); 10 | 11 | const handleLogout = async () => { 12 | try { 13 | store.setRequestLoading(true); 14 | const VITE_SERVER_ENDPOINT = import.meta.env.VITE_SERVER_ENDPOINT; 15 | const response = await fetch(`${VITE_SERVER_ENDPOINT}/api/auth/logout`, { 16 | credentials: "include", 17 | }); 18 | if (!response.ok) { 19 | throw await response.json(); 20 | } 21 | 22 | store.setRequestLoading(false); 23 | store.setAuthUser(null); 24 | navigate("/login"); 25 | } catch (error: any) { 26 | store.setRequestLoading(false); 27 | const resMessage = 28 | (error.response && 29 | error.response.data && 30 | error.response.data.message) || 31 | error.message || 32 | error.toString(); 33 | 34 | if (error?.message === "You are not logged in") { 35 | navigate("/login"); 36 | } 37 | 38 | toast.error(resMessage, { 39 | position: "top-right", 40 | }); 41 | } 42 | }; 43 | 44 | return ( 45 | <> 46 |
47 | 87 |
88 |
89 | {store.requestLoading && } 90 |
91 | 92 | ); 93 | }; 94 | 95 | export default Header; 96 | -------------------------------------------------------------------------------- /src/components/Layout.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from "react-router-dom"; 2 | import Header from "./Header"; 3 | 4 | const Layout = () => { 5 | return ( 6 | <> 7 |
8 | 9 | 10 | ); 11 | }; 12 | 13 | export default Layout; 14 | -------------------------------------------------------------------------------- /src/components/Spinner.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { twMerge } from 'tailwind-merge'; 3 | type SpinnerProps = { 4 | width?: number; 5 | height?: number; 6 | color?: string; 7 | bgColor?: string; 8 | }; 9 | const Spinner: React.FC = ({ 10 | width = 5, 11 | height = 5, 12 | color, 13 | bgColor, 14 | }) => { 15 | return ( 16 | 26 | 30 | 34 | 35 | ); 36 | }; 37 | 38 | export default Spinner; 39 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap'); 2 | 3 | @tailwind base; 4 | @tailwind components; 5 | @tailwind utilities; 6 | 7 | html{ 8 | font-family: 'Poppins', sans-serif; 9 | } -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import "./index.css"; 2 | import { ToastContainer } from "react-toastify"; 3 | import "react-toastify/dist/ReactToastify.css"; 4 | import React from "react"; 5 | import ReactDOM from "react-dom/client"; 6 | import App from "./App"; 7 | import { BrowserRouter } from "react-router-dom"; 8 | 9 | ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( 10 | 11 | 12 | 13 | 14 | 15 | 16 | ); 17 | -------------------------------------------------------------------------------- /src/pages/home.page.tsx: -------------------------------------------------------------------------------- 1 | const HomePage = () => { 2 | return ( 3 | <> 4 |
5 |
6 |

7 | Welcome to Google OAuth2 with React.js 8 |

9 |
10 |
11 | 12 | ); 13 | }; 14 | 15 | export default HomePage; 16 | -------------------------------------------------------------------------------- /src/pages/login.page.tsx: -------------------------------------------------------------------------------- 1 | import { useLocation, useNavigate } from "react-router-dom"; 2 | import GitHubLogo from "../assets/github.svg"; 3 | import GoogleLogo from "../assets/google.svg"; 4 | import { getGitHubUrl } from "../utils/getGithubUrl"; 5 | import { getGoogleUrl } from "../utils/getGoogleUrl"; 6 | import { object, string, TypeOf } from "zod"; 7 | import { useForm, SubmitHandler } from "react-hook-form"; 8 | import { zodResolver } from "@hookform/resolvers/zod"; 9 | import useStore from "../store"; 10 | import { toast } from "react-toastify"; 11 | import { useEffect } from "react"; 12 | 13 | const loginSchema = object({ 14 | email: string() 15 | .min(1, "Email address is required") 16 | .email("Email Address is invalid"), 17 | password: string() 18 | .min(1, "Password is required") 19 | .min(8, "Password must be more than 8 characters") 20 | .max(32, "Password must be less than 32 characters"), 21 | }); 22 | 23 | export type LoginInput = TypeOf; 24 | 25 | const LoginPage = () => { 26 | const location = useLocation(); 27 | const navigate = useNavigate(); 28 | const store = useStore(); 29 | const from = ((location.state as any)?.from.pathname as string) || "/profile"; 30 | 31 | const loginUser = async (data: LoginInput) => { 32 | try { 33 | store.setRequestLoading(true); 34 | const VITE_SERVER_ENDPOINT = import.meta.env.VITE_SERVER_ENDPOINT; 35 | const response = await fetch(`${VITE_SERVER_ENDPOINT}/api/auth/login`, { 36 | method: "POST", 37 | credentials: "include", 38 | body: JSON.stringify(data), 39 | headers: { 40 | "Content-Type": "application/json", 41 | }, 42 | }); 43 | if (!response.ok) { 44 | throw await response.json(); 45 | } 46 | 47 | store.setRequestLoading(false); 48 | navigate("/profile"); 49 | } catch (error: any) { 50 | store.setRequestLoading(false); 51 | if (error.error) { 52 | error.error.forEach((err: any) => { 53 | toast.error(err.message, { 54 | position: "top-right", 55 | }); 56 | }); 57 | return; 58 | } 59 | const resMessage = 60 | (error.response && 61 | error.response.data && 62 | error.response.data.message) || 63 | error.message || 64 | error.toString(); 65 | 66 | toast.error(resMessage, { 67 | position: "top-right", 68 | }); 69 | } 70 | }; 71 | 72 | const methods = useForm({ 73 | resolver: zodResolver(loginSchema), 74 | }); 75 | 76 | const { 77 | reset, 78 | handleSubmit, 79 | register, 80 | formState: { isSubmitSuccessful, errors }, 81 | } = methods; 82 | 83 | useEffect(() => { 84 | if (isSubmitSuccessful) { 85 | reset(); 86 | } 87 | // eslint-disable-next-line react-hooks/exhaustive-deps 88 | }, [isSubmitSuccessful]); 89 | 90 | const onSubmitHandler: SubmitHandler = (values) => { 91 | loginUser(values); 92 | }; 93 | 94 | return ( 95 |
96 |
97 |
98 |
99 |
100 | 106 | {errors.email && ( 107 |

108 | {errors.email?.message} 109 |

110 | )} 111 |
112 | 113 |
114 | 120 | 121 | {errors.password && ( 122 |

123 | {errors.password?.message} 124 |

125 | )} 126 |
127 | 128 |
129 |
130 | 135 | 141 |
142 | 146 | Forgot password? 147 | 148 |
149 | 150 | 158 | 159 |
160 |

OR

161 |
162 | 163 | 171 | 177 | Continue with Google 178 | 179 | 187 | 193 | Continue with GitHub 194 | 195 |
196 |
197 |
198 |
199 | ); 200 | }; 201 | 202 | export default LoginPage; 203 | -------------------------------------------------------------------------------- /src/pages/profile.page.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { useNavigate } from "react-router-dom"; 3 | import { toast } from "react-toastify"; 4 | import useStore from "../store"; 5 | import { IUser } from "../store/types"; 6 | 7 | const ProfilePage = () => { 8 | const navigate = useNavigate(); 9 | const store = useStore(); 10 | 11 | const fetchUser = async () => { 12 | try { 13 | store.setRequestLoading(true); 14 | const VITE_SERVER_ENDPOINT = import.meta.env.VITE_SERVER_ENDPOINT; 15 | const response = await fetch(`${VITE_SERVER_ENDPOINT}/api/users/me`, { 16 | credentials: "include", 17 | }); 18 | if (!response.ok) { 19 | throw await response.json(); 20 | } 21 | 22 | const data = await response.json(); 23 | const user = data.data.user as IUser; 24 | store.setRequestLoading(false); 25 | console.log(user); 26 | 27 | store.setAuthUser(user); 28 | } catch (error: any) { 29 | store.setRequestLoading(false); 30 | if (error.error) { 31 | error.error.forEach((err: any) => { 32 | toast.error(err.message, { 33 | position: "top-right", 34 | }); 35 | }); 36 | return; 37 | } 38 | const resMessage = 39 | (error.response && 40 | error.response.data && 41 | error.response.data.message) || 42 | error.message || 43 | error.toString(); 44 | 45 | if (error?.message === "You are not logged in") { 46 | navigate("/login"); 47 | } 48 | 49 | toast.error(resMessage, { 50 | position: "top-right", 51 | }); 52 | } 53 | }; 54 | 55 | useEffect(() => { 56 | fetchUser(); 57 | }, []); 58 | 59 | const user = store.authUser; 60 | 61 | return ( 62 |
63 |
64 |
65 |

Profile Page

66 | {!user ? ( 67 |

Loading...

68 | ) : ( 69 |
70 |
71 | {`profile 80 |
81 |
82 |

ID: {user.id}

83 |

Name: {user.name}

84 |

Email: {user.email}

85 |

Role: {user.role}

86 |

Provider: {user.provider}

87 |
88 |
89 | )} 90 |
91 |
92 |
93 | ); 94 | }; 95 | 96 | export default ProfilePage; 97 | -------------------------------------------------------------------------------- /src/pages/register.page.tsx: -------------------------------------------------------------------------------- 1 | import { useNavigate } from "react-router-dom"; 2 | import { toast } from "react-toastify"; 3 | import useStore from "../store"; 4 | import { object, string, TypeOf } from "zod"; 5 | import { useEffect } from "react"; 6 | import { useForm, SubmitHandler } from "react-hook-form"; 7 | import { zodResolver } from "@hookform/resolvers/zod"; 8 | 9 | const registerSchema = object({ 10 | name: string().min(1, "Full name is required").max(100), 11 | email: string() 12 | .min(1, "Email address is required") 13 | .email("Email Address is invalid"), 14 | password: string() 15 | .min(1, "Password is required") 16 | .min(8, "Password must be more than 8 characters") 17 | .max(32, "Password must be less than 32 characters"), 18 | passwordConfirm: string().min(1, "Please confirm your password"), 19 | }).refine((data) => data.password === data.passwordConfirm, { 20 | path: ["passwordConfirm"], 21 | message: "Passwords do not match", 22 | }); 23 | 24 | export type RegisterInput = TypeOf; 25 | 26 | const RegisterPage = () => { 27 | const navigate = useNavigate(); 28 | const store = useStore(); 29 | 30 | const registerUser = async (data: RegisterInput) => { 31 | try { 32 | store.setRequestLoading(true); 33 | const VITE_SERVER_ENDPOINT = import.meta.env.VITE_SERVER_ENDPOINT; 34 | const response = await fetch( 35 | `${VITE_SERVER_ENDPOINT}/api/auth/register`, 36 | { 37 | method: "POST", 38 | credentials: "include", 39 | body: JSON.stringify(data), 40 | headers: { 41 | "Content-Type": "application/json", 42 | }, 43 | } 44 | ); 45 | if (!response.ok) { 46 | throw await response.json(); 47 | } 48 | 49 | toast.success("Account created successfully", { 50 | position: "top-right", 51 | }); 52 | store.setRequestLoading(false); 53 | navigate("/login"); 54 | } catch (error: any) { 55 | store.setRequestLoading(false); 56 | if (error.error) { 57 | error.error.forEach((err: any) => { 58 | toast.error(err.message, { 59 | position: "top-right", 60 | }); 61 | }); 62 | return; 63 | } 64 | const resMessage = 65 | (error.response && 66 | error.response.data && 67 | error.response.data.message) || 68 | error.message || 69 | error.toString(); 70 | 71 | toast.error(resMessage, { 72 | position: "top-right", 73 | }); 74 | } 75 | }; 76 | 77 | const methods = useForm({ 78 | resolver: zodResolver(registerSchema), 79 | }); 80 | 81 | const { 82 | reset, 83 | handleSubmit, 84 | register, 85 | formState: { isSubmitSuccessful, errors }, 86 | } = methods; 87 | 88 | useEffect(() => { 89 | if (isSubmitSuccessful) { 90 | reset(); 91 | } 92 | // eslint-disable-next-line react-hooks/exhaustive-deps 93 | }, [isSubmitSuccessful]); 94 | 95 | const onSubmitHandler: SubmitHandler = (values) => { 96 | registerUser(values); 97 | }; 98 | 99 | return ( 100 |
101 |
102 |
103 |
104 |
105 | 111 | {errors.name && ( 112 |

113 | {errors.name?.message} 114 |

115 | )} 116 |
117 |
118 | 124 | {errors.email && ( 125 |

126 | {errors.email?.message} 127 |

128 | )} 129 |
130 | 131 |
132 | 138 | {errors.password && ( 139 |

140 | {errors.password?.message} 141 |

142 | )} 143 |
144 | 145 |
146 | 152 | {errors.passwordConfirm && ( 153 |

154 | {errors.passwordConfirm?.message} 155 |

156 | )} 157 |
158 | 159 | 167 |
168 |
169 |
170 |
171 | ); 172 | }; 173 | 174 | export default RegisterPage; 175 | -------------------------------------------------------------------------------- /src/router/index.tsx: -------------------------------------------------------------------------------- 1 | import type { RouteObject } from "react-router-dom"; 2 | import Layout from "../components/Layout"; 3 | import HomePage from "../pages/home.page"; 4 | import LoginPage from "../pages/login.page"; 5 | import ProfilePage from "../pages/profile.page"; 6 | import RegisterPage from "../pages/register.page"; 7 | 8 | const normalRoutes: RouteObject = { 9 | path: "*", 10 | element: , 11 | children: [ 12 | { 13 | index: true, 14 | element: , 15 | }, 16 | { 17 | path: "profile", 18 | element: , 19 | }, 20 | { 21 | path: "login", 22 | element: , 23 | }, 24 | { 25 | path: "register", 26 | element: , 27 | }, 28 | ], 29 | }; 30 | 31 | const routes: RouteObject[] = [normalRoutes]; 32 | 33 | export default routes; 34 | -------------------------------------------------------------------------------- /src/store/index.ts: -------------------------------------------------------------------------------- 1 | import { create } from "zustand"; 2 | import { IUser } from "./types"; 3 | 4 | type Store = { 5 | authUser: IUser | null; 6 | requestLoading: boolean; 7 | setAuthUser: (user: IUser | null) => void; 8 | setRequestLoading: (isLoading: boolean) => void; 9 | }; 10 | 11 | const useStore = create((set) => ({ 12 | authUser: null, 13 | requestLoading: false, 14 | setAuthUser: (user) => set((state) => ({ ...state, authUser: user })), 15 | setRequestLoading: (isLoading) => 16 | set((state) => ({ ...state, requestLoading: isLoading })), 17 | })); 18 | 19 | export default useStore; 20 | -------------------------------------------------------------------------------- /src/store/types.ts: -------------------------------------------------------------------------------- 1 | export interface IUser { 2 | id: string; 3 | name: string; 4 | email: string; 5 | role: string; 6 | photo: string; 7 | provider: string; 8 | verified: string; 9 | } 10 | -------------------------------------------------------------------------------- /src/utils/getGithubUrl.ts: -------------------------------------------------------------------------------- 1 | export function getGitHubUrl(from: string) { 2 | const rootURl = "https://github.com/login/oauth/authorize"; 3 | 4 | const options = { 5 | client_id: import.meta.env.VITE_GITHUB_OAUTH_CLIENT_ID as string, 6 | redirect_uri: import.meta.env.VITE_GITHUB_OAUTH_REDIRECT_URL as string, 7 | scope: "user:email", 8 | state: from, 9 | }; 10 | 11 | const qs = new URLSearchParams(options); 12 | 13 | return `${rootURl}?${qs.toString()}`; 14 | } 15 | -------------------------------------------------------------------------------- /src/utils/getGoogleUrl.ts: -------------------------------------------------------------------------------- 1 | export const getGoogleUrl = (from: string) => { 2 | const rootUrl = `https://accounts.google.com/o/oauth2/v2/auth`; 3 | 4 | const options = { 5 | redirect_uri: import.meta.env.VITE_GOOGLE_OAUTH_REDIRECT as string, 6 | client_id: import.meta.env.VITE_GOOGLE_OAUTH_CLIENT_ID as string, 7 | access_type: "offline", 8 | response_type: "code", 9 | prompt: "consent", 10 | scope: [ 11 | "https://www.googleapis.com/auth/userinfo.profile", 12 | "https://www.googleapis.com/auth/userinfo.email", 13 | ].join(" "), 14 | state: from, 15 | }; 16 | 17 | const qs = new URLSearchParams(options); 18 | 19 | return `${rootUrl}?${qs.toString()}`; 20 | }; 21 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | "./index.html", 5 | "./src/**/*.{vue,js,ts,jsx,tsx}", 6 | ], 7 | theme: { 8 | extend: { 9 | colors: { 10 | 'ct-dark-600': '#222', 11 | 'ct-dark-200': '#e5e7eb', 12 | 'ct-dark-100': '#f5f6f7', 13 | 'ct-blue-600': '#2363eb', 14 | 'ct-yellow-600': '#f9d13e', 15 | }, 16 | fontFamily: { 17 | Poppins: ['Poppins, sans-serif'], 18 | }, 19 | container: { 20 | center: true, 21 | padding: '1rem', 22 | screens: { 23 | lg: '1125px', 24 | xl: '1125px', 25 | '2xl': '1125px', 26 | }, 27 | }, 28 | }, 29 | }, 30 | plugins: [], 31 | }; 32 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.20.5": 21 | version "7.20.10" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" 23 | integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== 24 | 25 | "@babel/core@^7.20.7": 26 | version "7.20.12" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" 28 | integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.20.7" 33 | "@babel/helper-compilation-targets" "^7.20.7" 34 | "@babel/helper-module-transforms" "^7.20.11" 35 | "@babel/helpers" "^7.20.7" 36 | "@babel/parser" "^7.20.7" 37 | "@babel/template" "^7.20.7" 38 | "@babel/traverse" "^7.20.12" 39 | "@babel/types" "^7.20.7" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.2" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.20.7": 47 | version "7.20.7" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" 49 | integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== 50 | dependencies: 51 | "@babel/types" "^7.20.7" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-compilation-targets@^7.20.7": 56 | version "7.20.7" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" 58 | integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== 59 | dependencies: 60 | "@babel/compat-data" "^7.20.5" 61 | "@babel/helper-validator-option" "^7.18.6" 62 | browserslist "^4.21.3" 63 | lru-cache "^5.1.1" 64 | semver "^6.3.0" 65 | 66 | "@babel/helper-environment-visitor@^7.18.9": 67 | version "7.18.9" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 69 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 70 | 71 | "@babel/helper-function-name@^7.19.0": 72 | version "7.19.0" 73 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" 74 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== 75 | dependencies: 76 | "@babel/template" "^7.18.10" 77 | "@babel/types" "^7.19.0" 78 | 79 | "@babel/helper-hoist-variables@^7.18.6": 80 | version "7.18.6" 81 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 82 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 83 | dependencies: 84 | "@babel/types" "^7.18.6" 85 | 86 | "@babel/helper-module-imports@^7.18.6": 87 | version "7.18.6" 88 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 89 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 90 | dependencies: 91 | "@babel/types" "^7.18.6" 92 | 93 | "@babel/helper-module-transforms@^7.20.11": 94 | version "7.20.11" 95 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" 96 | integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== 97 | dependencies: 98 | "@babel/helper-environment-visitor" "^7.18.9" 99 | "@babel/helper-module-imports" "^7.18.6" 100 | "@babel/helper-simple-access" "^7.20.2" 101 | "@babel/helper-split-export-declaration" "^7.18.6" 102 | "@babel/helper-validator-identifier" "^7.19.1" 103 | "@babel/template" "^7.20.7" 104 | "@babel/traverse" "^7.20.10" 105 | "@babel/types" "^7.20.7" 106 | 107 | "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.19.0": 108 | version "7.20.2" 109 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 110 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 111 | 112 | "@babel/helper-simple-access@^7.20.2": 113 | version "7.20.2" 114 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 115 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 116 | dependencies: 117 | "@babel/types" "^7.20.2" 118 | 119 | "@babel/helper-split-export-declaration@^7.18.6": 120 | version "7.18.6" 121 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 122 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 123 | dependencies: 124 | "@babel/types" "^7.18.6" 125 | 126 | "@babel/helper-string-parser@^7.19.4": 127 | version "7.19.4" 128 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 129 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 130 | 131 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 132 | version "7.19.1" 133 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 134 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 135 | 136 | "@babel/helper-validator-option@^7.18.6": 137 | version "7.18.6" 138 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 139 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 140 | 141 | "@babel/helpers@^7.20.7": 142 | version "7.20.7" 143 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" 144 | integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== 145 | dependencies: 146 | "@babel/template" "^7.20.7" 147 | "@babel/traverse" "^7.20.7" 148 | "@babel/types" "^7.20.7" 149 | 150 | "@babel/highlight@^7.18.6": 151 | version "7.18.6" 152 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 153 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 154 | dependencies: 155 | "@babel/helper-validator-identifier" "^7.18.6" 156 | chalk "^2.0.0" 157 | js-tokens "^4.0.0" 158 | 159 | "@babel/parser@^7.20.7": 160 | version "7.20.7" 161 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" 162 | integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== 163 | 164 | "@babel/plugin-transform-react-jsx-self@^7.18.6": 165 | version "7.18.6" 166 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz#3849401bab7ae8ffa1e3e5687c94a753fc75bda7" 167 | integrity sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig== 168 | dependencies: 169 | "@babel/helper-plugin-utils" "^7.18.6" 170 | 171 | "@babel/plugin-transform-react-jsx-source@^7.19.6": 172 | version "7.19.6" 173 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" 174 | integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== 175 | dependencies: 176 | "@babel/helper-plugin-utils" "^7.19.0" 177 | 178 | "@babel/template@^7.18.10", "@babel/template@^7.20.7": 179 | version "7.20.7" 180 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" 181 | integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== 182 | dependencies: 183 | "@babel/code-frame" "^7.18.6" 184 | "@babel/parser" "^7.20.7" 185 | "@babel/types" "^7.20.7" 186 | 187 | "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.7": 188 | version "7.20.12" 189 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" 190 | integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== 191 | dependencies: 192 | "@babel/code-frame" "^7.18.6" 193 | "@babel/generator" "^7.20.7" 194 | "@babel/helper-environment-visitor" "^7.18.9" 195 | "@babel/helper-function-name" "^7.19.0" 196 | "@babel/helper-hoist-variables" "^7.18.6" 197 | "@babel/helper-split-export-declaration" "^7.18.6" 198 | "@babel/parser" "^7.20.7" 199 | "@babel/types" "^7.20.7" 200 | debug "^4.1.0" 201 | globals "^11.1.0" 202 | 203 | "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.20.2", "@babel/types@^7.20.7": 204 | version "7.20.7" 205 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" 206 | integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== 207 | dependencies: 208 | "@babel/helper-string-parser" "^7.19.4" 209 | "@babel/helper-validator-identifier" "^7.19.1" 210 | to-fast-properties "^2.0.0" 211 | 212 | "@esbuild/android-arm64@0.16.16": 213 | version "0.16.16" 214 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.16.tgz#833184b8a0a96f9c85105c53d0a67e6d3c5c3f07" 215 | integrity sha512-hFHVAzUKp9Tf8psGq+bDVv+6hTy1bAOoV/jJMUWwhUnIHsh6WbFMhw0ZTkqDuh7TdpffFoHOiIOIxmHc7oYRBQ== 216 | 217 | "@esbuild/android-arm@0.16.16": 218 | version "0.16.16" 219 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.16.tgz#23761b2fd1dfa4806161dbfc9e0824f04061cb95" 220 | integrity sha512-BUuWMlt4WSXod1HSl7aGK8fJOsi+Tab/M0IDK1V1/GstzoOpqc/v3DqmN8MkuapPKQ9Br1WtLAN4uEgWR8x64A== 221 | 222 | "@esbuild/android-x64@0.16.16": 223 | version "0.16.16" 224 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.16.tgz#ffa09f04c0ffea5b594ab7655fc9ca1220365e9b" 225 | integrity sha512-9WhxJpeb6XumlfivldxqmkJepEcELekmSw3NkGrs+Edq6sS5KRxtUBQuKYDD7KqP59dDkxVbaoPIQFKWQG0KLg== 226 | 227 | "@esbuild/darwin-arm64@0.16.16": 228 | version "0.16.16" 229 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.16.tgz#62ed2b4bfab594b9e5e708580361f1d059b53b26" 230 | integrity sha512-8Z+wld+vr/prHPi2O0X7o1zQOfMbXWGAw9hT0jEyU/l/Yrg+0Z3FO9pjPho72dVkZs4ewZk0bDOFLdZHm8jEfw== 231 | 232 | "@esbuild/darwin-x64@0.16.16": 233 | version "0.16.16" 234 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.16.tgz#e9756d34cd9b3737a5354e89ca0fdca32d8df64c" 235 | integrity sha512-CYkxVvkZzGCqFrt7EgjFxQKhlUPyDkuR9P0Y5wEcmJqVI8ncerOIY5Kej52MhZyzOBXkYrJgZeVZC9xXXoEg9A== 236 | 237 | "@esbuild/freebsd-arm64@0.16.16": 238 | version "0.16.16" 239 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.16.tgz#db7bce444d372e5a213a3f359c42aee3acc0dd45" 240 | integrity sha512-fxrw4BYqQ39z/3Ja9xj/a1gMsVq0xEjhSyI4a9MjfvDDD8fUV8IYliac96i7tzZc3+VytyXX+XNsnpEk5sw5Wg== 241 | 242 | "@esbuild/freebsd-x64@0.16.16": 243 | version "0.16.16" 244 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.16.tgz#02e8a81b7e56040b5eb883896de445a6cd3501f0" 245 | integrity sha512-8p3v1D+du2jiDvSoNVimHhj7leSfST9YlKsAEO7etBfuqjaBMndo0fmjNLp0JCMld+XIx9L80tooOkyUv1a1PQ== 246 | 247 | "@esbuild/linux-arm64@0.16.16": 248 | version "0.16.16" 249 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.16.tgz#ea8c3df172644fa6437f0083c2a38b50f89e5b98" 250 | integrity sha512-N3u6BBbCVY3xeP2D8Db7QY8I+nZ+2AgOopUIqk+5yCoLnsWkcVxD2ay5E9iIdvApFi1Vg1lZiiwaVp8bOpAc4A== 251 | 252 | "@esbuild/linux-arm@0.16.16": 253 | version "0.16.16" 254 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.16.tgz#c1c2e97e67bb7247e6f60e2644de057bfedb8cbb" 255 | integrity sha512-bYaocE1/PTMRmkgSckZ0D0Xn2nox8v2qlk+MVVqm+VECNKDdZvghVZtH41dNtBbwADSvA6qkCHGYeWm9LrNCBw== 256 | 257 | "@esbuild/linux-ia32@0.16.16": 258 | version "0.16.16" 259 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.16.tgz#9a0b0e926926f891a3e7f7c50bb38e3db49c2c9a" 260 | integrity sha512-dxjqLKUW8GqGemoRT9v8IgHk+T4tRm1rn1gUcArsp26W9EkK/27VSjBVUXhEG5NInHZ92JaQ3SSMdTwv/r9a2A== 261 | 262 | "@esbuild/linux-loong64@0.16.16": 263 | version "0.16.16" 264 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.16.tgz#c5a50ff5981d457ed45f42c3f06a60086759c79b" 265 | integrity sha512-MdUFggHjRiCCwNE9+1AibewoNq6wf94GLB9Q9aXwl+a75UlRmbRK3h6WJyrSGA6ZstDJgaD2wiTSP7tQNUYxwA== 266 | 267 | "@esbuild/linux-mips64el@0.16.16": 268 | version "0.16.16" 269 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.16.tgz#e85b7e3c25000be2ae373e5208e55e282a9763e0" 270 | integrity sha512-CO3YmO7jYMlGqGoeFeKzdwx/bx8Vtq/SZaMAi+ZLDUnDUdfC7GmGwXzIwDJ70Sg+P9pAemjJyJ1icKJ9R3q/Fg== 271 | 272 | "@esbuild/linux-ppc64@0.16.16": 273 | version "0.16.16" 274 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.16.tgz#24a0013bf727830df44fece571172ebe31b5c5e6" 275 | integrity sha512-DSl5Czh5hCy/7azX0Wl9IdzPHX2H8clC6G87tBnZnzUpNgRxPFhfmArbaHoAysu4JfqCqbB/33u/GL9dUgCBAw== 276 | 277 | "@esbuild/linux-riscv64@0.16.16": 278 | version "0.16.16" 279 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.16.tgz#b080998d8d0480e8235f1384c585ae505e98a19d" 280 | integrity sha512-sSVVMEXsqf1fQu0j7kkhXMViroixU5XoaJXl1u/u+jbXvvhhCt9YvA/B6VM3aM/77HuRQ94neS5bcisijGnKFQ== 281 | 282 | "@esbuild/linux-s390x@0.16.16": 283 | version "0.16.16" 284 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.16.tgz#5042de05b9b653dfd134f05e1b37b61704c14c42" 285 | integrity sha512-jRqBCre9gZGoCdCN/UWCCMwCMsOg65IpY9Pyj56mKCF5zXy9d60kkNRdDN6YXGjr3rzcC4DXnS/kQVCGcC4yPQ== 286 | 287 | "@esbuild/linux-x64@0.16.16": 288 | version "0.16.16" 289 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.16.tgz#b7c0750f2276c9dcf41f0f2229adca46ef22f698" 290 | integrity sha512-G1+09TopOzo59/55lk5Q0UokghYLyHTKKzD5lXsAOOlGDbieGEFJpJBr3BLDbf7cz89KX04sBeExAR/pL/26sA== 291 | 292 | "@esbuild/netbsd-x64@0.16.16": 293 | version "0.16.16" 294 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.16.tgz#e2a0ee181fbbe834174d26e24ce1b258232bb3eb" 295 | integrity sha512-xwjGJB5wwDEujLaJIrSMRqWkbigALpBNcsF9SqszoNKc+wY4kPTdKrSxiY5ik3IatojePP+WV108MvF6q6np4w== 296 | 297 | "@esbuild/openbsd-x64@0.16.16": 298 | version "0.16.16" 299 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.16.tgz#87a84c1932e00f52ab3380c31facf0e48086ffb9" 300 | integrity sha512-yeERkoxG2nR2oxO5n+Ms7MsCeNk23zrby2GXCqnfCpPp7KNc0vxaaacIxb21wPMfXXRhGBrNP4YLIupUBrWdlg== 301 | 302 | "@esbuild/sunos-x64@0.16.16": 303 | version "0.16.16" 304 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.16.tgz#996bcd2603cd345733c3aa5f52bfd5b8fa7d1d36" 305 | integrity sha512-nHfbEym0IObXPhtX6Va3H5GaKBty2kdhlAhKmyCj9u255ktAj0b1YACUs9j5H88NRn9cJCthD1Ik/k9wn8YKVg== 306 | 307 | "@esbuild/win32-arm64@0.16.16": 308 | version "0.16.16" 309 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.16.tgz#404a9411d12533d0f2ce0a85df6ddb32e851ef04" 310 | integrity sha512-pdD+M1ZOFy4hE15ZyPX09fd5g4DqbbL1wXGY90YmleVS6Y5YlraW4BvHjim/X/4yuCpTsAFvsT4Nca2lbyDH/A== 311 | 312 | "@esbuild/win32-ia32@0.16.16": 313 | version "0.16.16" 314 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.16.tgz#bb5655a48f5f87fee870061883411f5149bc5e44" 315 | integrity sha512-IPEMfU9p0c3Vb8PqxaPX6BM9rYwlTZGYOf9u+kMdhoILZkVKEjq6PKZO0lB+isojWwAnAqh4ZxshD96njTXajg== 316 | 317 | "@esbuild/win32-x64@0.16.16": 318 | version "0.16.16" 319 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.16.tgz#ee22fed0b2e0c00ce895cdfae9d32ef069a12e04" 320 | integrity sha512-1YYpoJ39WV/2bnShPwgdzJklc+XS0bysN6Tpnt1cWPdeoKOG4RMEY1g7i534QxXX/rPvNx/NLJQTTCeORYzipg== 321 | 322 | "@hookform/resolvers@^2.9.10": 323 | version "2.9.10" 324 | resolved "https://registry.yarnpkg.com/@hookform/resolvers/-/resolvers-2.9.10.tgz#e7e88942ee34e97b7bc937b0be4694194c9cd420" 325 | integrity sha512-JIL1DgJIlH9yuxcNGtyhsWX/PgNltz+5Gr6+8SX9fhXc/hPbEIk6wPI82nhgvp3uUb6ZfAM5mqg/x7KR7NAb+A== 326 | 327 | "@jridgewell/gen-mapping@^0.1.0": 328 | version "0.1.1" 329 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 330 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 331 | dependencies: 332 | "@jridgewell/set-array" "^1.0.0" 333 | "@jridgewell/sourcemap-codec" "^1.4.10" 334 | 335 | "@jridgewell/gen-mapping@^0.3.2": 336 | version "0.3.2" 337 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 338 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 339 | dependencies: 340 | "@jridgewell/set-array" "^1.0.1" 341 | "@jridgewell/sourcemap-codec" "^1.4.10" 342 | "@jridgewell/trace-mapping" "^0.3.9" 343 | 344 | "@jridgewell/resolve-uri@3.1.0": 345 | version "3.1.0" 346 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 347 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 348 | 349 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 350 | version "1.1.2" 351 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 352 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 353 | 354 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": 355 | version "1.4.14" 356 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 357 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 358 | 359 | "@jridgewell/trace-mapping@^0.3.9": 360 | version "0.3.17" 361 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 362 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 363 | dependencies: 364 | "@jridgewell/resolve-uri" "3.1.0" 365 | "@jridgewell/sourcemap-codec" "1.4.14" 366 | 367 | "@nodelib/fs.scandir@2.1.5": 368 | version "2.1.5" 369 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 370 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 371 | dependencies: 372 | "@nodelib/fs.stat" "2.0.5" 373 | run-parallel "^1.1.9" 374 | 375 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 376 | version "2.0.5" 377 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 378 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 379 | 380 | "@nodelib/fs.walk@^1.2.3": 381 | version "1.2.8" 382 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 383 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 384 | dependencies: 385 | "@nodelib/fs.scandir" "2.1.5" 386 | fastq "^1.6.0" 387 | 388 | "@remix-run/router@1.2.1": 389 | version "1.2.1" 390 | resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.2.1.tgz#812edd4104a15a493dda1ccac0b352270d7a188c" 391 | integrity sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ== 392 | 393 | "@types/prop-types@*": 394 | version "15.7.5" 395 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 396 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 397 | 398 | "@types/react-dom@^18.0.9": 399 | version "18.0.10" 400 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.10.tgz#3b66dec56aa0f16a6cc26da9e9ca96c35c0b4352" 401 | integrity sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg== 402 | dependencies: 403 | "@types/react" "*" 404 | 405 | "@types/react@*", "@types/react@^18.0.26": 406 | version "18.0.26" 407 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" 408 | integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== 409 | dependencies: 410 | "@types/prop-types" "*" 411 | "@types/scheduler" "*" 412 | csstype "^3.0.2" 413 | 414 | "@types/scheduler@*": 415 | version "0.16.2" 416 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 417 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 418 | 419 | "@vitejs/plugin-react@^3.0.0": 420 | version "3.0.1" 421 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz#ad21fb81377970dd4021a31cd95a03eb6f5c4c48" 422 | integrity sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ== 423 | dependencies: 424 | "@babel/core" "^7.20.7" 425 | "@babel/plugin-transform-react-jsx-self" "^7.18.6" 426 | "@babel/plugin-transform-react-jsx-source" "^7.19.6" 427 | magic-string "^0.27.0" 428 | react-refresh "^0.14.0" 429 | 430 | acorn-node@^1.8.2: 431 | version "1.8.2" 432 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 433 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 434 | dependencies: 435 | acorn "^7.0.0" 436 | acorn-walk "^7.0.0" 437 | xtend "^4.0.2" 438 | 439 | acorn-walk@^7.0.0: 440 | version "7.2.0" 441 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 442 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 443 | 444 | acorn@^7.0.0: 445 | version "7.4.1" 446 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 447 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 448 | 449 | ansi-styles@^3.2.1: 450 | version "3.2.1" 451 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 452 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 453 | dependencies: 454 | color-convert "^1.9.0" 455 | 456 | anymatch@~3.1.2: 457 | version "3.1.3" 458 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 459 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 460 | dependencies: 461 | normalize-path "^3.0.0" 462 | picomatch "^2.0.4" 463 | 464 | arg@^5.0.2: 465 | version "5.0.2" 466 | resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" 467 | integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== 468 | 469 | autoprefixer@^10.4.13: 470 | version "10.4.13" 471 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.13.tgz#b5136b59930209a321e9fa3dca2e7c4d223e83a8" 472 | integrity sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg== 473 | dependencies: 474 | browserslist "^4.21.4" 475 | caniuse-lite "^1.0.30001426" 476 | fraction.js "^4.2.0" 477 | normalize-range "^0.1.2" 478 | picocolors "^1.0.0" 479 | postcss-value-parser "^4.2.0" 480 | 481 | binary-extensions@^2.0.0: 482 | version "2.2.0" 483 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 484 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 485 | 486 | braces@^3.0.2, braces@~3.0.2: 487 | version "3.0.2" 488 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 489 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 490 | dependencies: 491 | fill-range "^7.0.1" 492 | 493 | browserslist@^4.21.3, browserslist@^4.21.4: 494 | version "4.21.4" 495 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" 496 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== 497 | dependencies: 498 | caniuse-lite "^1.0.30001400" 499 | electron-to-chromium "^1.4.251" 500 | node-releases "^2.0.6" 501 | update-browserslist-db "^1.0.9" 502 | 503 | camelcase-css@^2.0.1: 504 | version "2.0.1" 505 | resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 506 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 507 | 508 | caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: 509 | version "1.0.30001442" 510 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz#40337f1cf3be7c637b061e2f78582dc1daec0614" 511 | integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow== 512 | 513 | chalk@^2.0.0: 514 | version "2.4.2" 515 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 516 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 517 | dependencies: 518 | ansi-styles "^3.2.1" 519 | escape-string-regexp "^1.0.5" 520 | supports-color "^5.3.0" 521 | 522 | chokidar@^3.5.3: 523 | version "3.5.3" 524 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 525 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 526 | dependencies: 527 | anymatch "~3.1.2" 528 | braces "~3.0.2" 529 | glob-parent "~5.1.2" 530 | is-binary-path "~2.1.0" 531 | is-glob "~4.0.1" 532 | normalize-path "~3.0.0" 533 | readdirp "~3.6.0" 534 | optionalDependencies: 535 | fsevents "~2.3.2" 536 | 537 | clsx@^1.1.1: 538 | version "1.2.1" 539 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" 540 | integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== 541 | 542 | color-convert@^1.9.0: 543 | version "1.9.3" 544 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 545 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 546 | dependencies: 547 | color-name "1.1.3" 548 | 549 | color-name@1.1.3: 550 | version "1.1.3" 551 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 552 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 553 | 554 | color-name@^1.1.4: 555 | version "1.1.4" 556 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 557 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 558 | 559 | convert-source-map@^1.7.0: 560 | version "1.9.0" 561 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 562 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 563 | 564 | cssesc@^3.0.0: 565 | version "3.0.0" 566 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 567 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 568 | 569 | csstype@^3.0.2: 570 | version "3.1.1" 571 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" 572 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== 573 | 574 | debug@^4.1.0: 575 | version "4.3.4" 576 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 577 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 578 | dependencies: 579 | ms "2.1.2" 580 | 581 | defined@^1.0.0: 582 | version "1.0.1" 583 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" 584 | integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== 585 | 586 | detective@^5.2.1: 587 | version "5.2.1" 588 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" 589 | integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== 590 | dependencies: 591 | acorn-node "^1.8.2" 592 | defined "^1.0.0" 593 | minimist "^1.2.6" 594 | 595 | didyoumean@^1.2.2: 596 | version "1.2.2" 597 | resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" 598 | integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 599 | 600 | dlv@^1.1.3: 601 | version "1.1.3" 602 | resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" 603 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 604 | 605 | electron-to-chromium@^1.4.251: 606 | version "1.4.284" 607 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" 608 | integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== 609 | 610 | esbuild@^0.16.3: 611 | version "0.16.16" 612 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.16.tgz#e8a27820a30cc1449066f9bbe8916b145dbc9046" 613 | integrity sha512-24JyKq10KXM5EBIgPotYIJ2fInNWVVqflv3gicIyQqfmUqi4HvDW1VR790cBgLJHCl96Syy7lhoz7tLFcmuRmg== 614 | optionalDependencies: 615 | "@esbuild/android-arm" "0.16.16" 616 | "@esbuild/android-arm64" "0.16.16" 617 | "@esbuild/android-x64" "0.16.16" 618 | "@esbuild/darwin-arm64" "0.16.16" 619 | "@esbuild/darwin-x64" "0.16.16" 620 | "@esbuild/freebsd-arm64" "0.16.16" 621 | "@esbuild/freebsd-x64" "0.16.16" 622 | "@esbuild/linux-arm" "0.16.16" 623 | "@esbuild/linux-arm64" "0.16.16" 624 | "@esbuild/linux-ia32" "0.16.16" 625 | "@esbuild/linux-loong64" "0.16.16" 626 | "@esbuild/linux-mips64el" "0.16.16" 627 | "@esbuild/linux-ppc64" "0.16.16" 628 | "@esbuild/linux-riscv64" "0.16.16" 629 | "@esbuild/linux-s390x" "0.16.16" 630 | "@esbuild/linux-x64" "0.16.16" 631 | "@esbuild/netbsd-x64" "0.16.16" 632 | "@esbuild/openbsd-x64" "0.16.16" 633 | "@esbuild/sunos-x64" "0.16.16" 634 | "@esbuild/win32-arm64" "0.16.16" 635 | "@esbuild/win32-ia32" "0.16.16" 636 | "@esbuild/win32-x64" "0.16.16" 637 | 638 | escalade@^3.1.1: 639 | version "3.1.1" 640 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 641 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 642 | 643 | escape-string-regexp@^1.0.5: 644 | version "1.0.5" 645 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 646 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 647 | 648 | fast-glob@^3.2.12: 649 | version "3.2.12" 650 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 651 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 652 | dependencies: 653 | "@nodelib/fs.stat" "^2.0.2" 654 | "@nodelib/fs.walk" "^1.2.3" 655 | glob-parent "^5.1.2" 656 | merge2 "^1.3.0" 657 | micromatch "^4.0.4" 658 | 659 | fastq@^1.6.0: 660 | version "1.15.0" 661 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 662 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 663 | dependencies: 664 | reusify "^1.0.4" 665 | 666 | fill-range@^7.0.1: 667 | version "7.0.1" 668 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 669 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 670 | dependencies: 671 | to-regex-range "^5.0.1" 672 | 673 | fraction.js@^4.2.0: 674 | version "4.2.0" 675 | resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" 676 | integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== 677 | 678 | fsevents@~2.3.2: 679 | version "2.3.2" 680 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 681 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 682 | 683 | function-bind@^1.1.1: 684 | version "1.1.1" 685 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 686 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 687 | 688 | gensync@^1.0.0-beta.2: 689 | version "1.0.0-beta.2" 690 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 691 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 692 | 693 | glob-parent@^5.1.2, glob-parent@~5.1.2: 694 | version "5.1.2" 695 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 696 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 697 | dependencies: 698 | is-glob "^4.0.1" 699 | 700 | glob-parent@^6.0.2: 701 | version "6.0.2" 702 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 703 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 704 | dependencies: 705 | is-glob "^4.0.3" 706 | 707 | globals@^11.1.0: 708 | version "11.12.0" 709 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 710 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 711 | 712 | has-flag@^3.0.0: 713 | version "3.0.0" 714 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 715 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 716 | 717 | has@^1.0.3: 718 | version "1.0.3" 719 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 720 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 721 | dependencies: 722 | function-bind "^1.1.1" 723 | 724 | is-binary-path@~2.1.0: 725 | version "2.1.0" 726 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 727 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 728 | dependencies: 729 | binary-extensions "^2.0.0" 730 | 731 | is-core-module@^2.9.0: 732 | version "2.11.0" 733 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 734 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 735 | dependencies: 736 | has "^1.0.3" 737 | 738 | is-extglob@^2.1.1: 739 | version "2.1.1" 740 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 741 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 742 | 743 | is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 744 | version "4.0.3" 745 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 746 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 747 | dependencies: 748 | is-extglob "^2.1.1" 749 | 750 | is-number@^7.0.0: 751 | version "7.0.0" 752 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 753 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 754 | 755 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 756 | version "4.0.0" 757 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 758 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 759 | 760 | jsesc@^2.5.1: 761 | version "2.5.2" 762 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 763 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 764 | 765 | json5@^2.2.2: 766 | version "2.2.3" 767 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 768 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 769 | 770 | lilconfig@^2.0.5, lilconfig@^2.0.6: 771 | version "2.0.6" 772 | resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" 773 | integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== 774 | 775 | loose-envify@^1.1.0: 776 | version "1.4.0" 777 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 778 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 779 | dependencies: 780 | js-tokens "^3.0.0 || ^4.0.0" 781 | 782 | lru-cache@^5.1.1: 783 | version "5.1.1" 784 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 785 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 786 | dependencies: 787 | yallist "^3.0.2" 788 | 789 | magic-string@^0.27.0: 790 | version "0.27.0" 791 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" 792 | integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== 793 | dependencies: 794 | "@jridgewell/sourcemap-codec" "^1.4.13" 795 | 796 | merge2@^1.3.0: 797 | version "1.4.1" 798 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 799 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 800 | 801 | micromatch@^4.0.4, micromatch@^4.0.5: 802 | version "4.0.5" 803 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 804 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 805 | dependencies: 806 | braces "^3.0.2" 807 | picomatch "^2.3.1" 808 | 809 | minimist@^1.2.6: 810 | version "1.2.7" 811 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" 812 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== 813 | 814 | ms@2.1.2: 815 | version "2.1.2" 816 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 817 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 818 | 819 | nanoid@^3.3.4: 820 | version "3.3.4" 821 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 822 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 823 | 824 | node-releases@^2.0.6: 825 | version "2.0.8" 826 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" 827 | integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== 828 | 829 | normalize-path@^3.0.0, normalize-path@~3.0.0: 830 | version "3.0.0" 831 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 832 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 833 | 834 | normalize-range@^0.1.2: 835 | version "0.1.2" 836 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 837 | integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 838 | 839 | object-hash@^3.0.0: 840 | version "3.0.0" 841 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" 842 | integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== 843 | 844 | path-parse@^1.0.7: 845 | version "1.0.7" 846 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 847 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 848 | 849 | picocolors@^1.0.0: 850 | version "1.0.0" 851 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 852 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 853 | 854 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 855 | version "2.3.1" 856 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 857 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 858 | 859 | pify@^2.3.0: 860 | version "2.3.0" 861 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 862 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 863 | 864 | postcss-import@^14.1.0: 865 | version "14.1.0" 866 | resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" 867 | integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== 868 | dependencies: 869 | postcss-value-parser "^4.0.0" 870 | read-cache "^1.0.0" 871 | resolve "^1.1.7" 872 | 873 | postcss-js@^4.0.0: 874 | version "4.0.0" 875 | resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00" 876 | integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ== 877 | dependencies: 878 | camelcase-css "^2.0.1" 879 | 880 | postcss-load-config@^3.1.4: 881 | version "3.1.4" 882 | resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" 883 | integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== 884 | dependencies: 885 | lilconfig "^2.0.5" 886 | yaml "^1.10.2" 887 | 888 | postcss-nested@6.0.0: 889 | version "6.0.0" 890 | resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" 891 | integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== 892 | dependencies: 893 | postcss-selector-parser "^6.0.10" 894 | 895 | postcss-selector-parser@^6.0.10: 896 | version "6.0.11" 897 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" 898 | integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== 899 | dependencies: 900 | cssesc "^3.0.0" 901 | util-deprecate "^1.0.2" 902 | 903 | postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: 904 | version "4.2.0" 905 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 906 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 907 | 908 | postcss@^8.4.18, postcss@^8.4.20, postcss@^8.4.21: 909 | version "8.4.21" 910 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" 911 | integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== 912 | dependencies: 913 | nanoid "^3.3.4" 914 | picocolors "^1.0.0" 915 | source-map-js "^1.0.2" 916 | 917 | queue-microtask@^1.2.2: 918 | version "1.2.3" 919 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 920 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 921 | 922 | quick-lru@^5.1.1: 923 | version "5.1.1" 924 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 925 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 926 | 927 | react-dom@^18.2.0: 928 | version "18.2.0" 929 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 930 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 931 | dependencies: 932 | loose-envify "^1.1.0" 933 | scheduler "^0.23.0" 934 | 935 | react-hook-form@^7.42.1: 936 | version "7.42.1" 937 | resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.42.1.tgz#c6396ca684716d89abc1c7e64343badfd30c56c6" 938 | integrity sha512-2UIGqwMZksd5HS55crTT1ATLTr0rAI4jS7yVuqTaoRVDhY2Qc4IyjskCmpnmdYqUNOYFy04vW253tb2JRVh+IQ== 939 | 940 | react-refresh@^0.14.0: 941 | version "0.14.0" 942 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" 943 | integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== 944 | 945 | react-router-dom@^6.6.2: 946 | version "6.6.2" 947 | resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.6.2.tgz#bbf1f9b45855b218d22fc2d294b79408a084740a" 948 | integrity sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA== 949 | dependencies: 950 | "@remix-run/router" "1.2.1" 951 | react-router "6.6.2" 952 | 953 | react-router@6.6.2: 954 | version "6.6.2" 955 | resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.6.2.tgz#556f7b56cff7fe32c5c02429fef3fcb2ecd08111" 956 | integrity sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ== 957 | dependencies: 958 | "@remix-run/router" "1.2.1" 959 | 960 | react-toastify@^9.1.1: 961 | version "9.1.1" 962 | resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.1.tgz#9280caea4a13dc1739c350d90660a630807bf10b" 963 | integrity sha512-pkFCla1z3ve045qvjEmn2xOJOy4ZciwRXm1oMPULVkELi5aJdHCN/FHnuqXq8IwGDLB7PPk2/J6uP9D8ejuiRw== 964 | dependencies: 965 | clsx "^1.1.1" 966 | 967 | react@^18.2.0: 968 | version "18.2.0" 969 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 970 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 971 | dependencies: 972 | loose-envify "^1.1.0" 973 | 974 | read-cache@^1.0.0: 975 | version "1.0.0" 976 | resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" 977 | integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== 978 | dependencies: 979 | pify "^2.3.0" 980 | 981 | readdirp@~3.6.0: 982 | version "3.6.0" 983 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 984 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 985 | dependencies: 986 | picomatch "^2.2.1" 987 | 988 | resolve@^1.1.7, resolve@^1.22.1: 989 | version "1.22.1" 990 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 991 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 992 | dependencies: 993 | is-core-module "^2.9.0" 994 | path-parse "^1.0.7" 995 | supports-preserve-symlinks-flag "^1.0.0" 996 | 997 | reusify@^1.0.4: 998 | version "1.0.4" 999 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1000 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1001 | 1002 | rollup@^3.7.0: 1003 | version "3.9.1" 1004 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.9.1.tgz#27501d3d026418765fe379d5620d25954ff2a011" 1005 | integrity sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w== 1006 | optionalDependencies: 1007 | fsevents "~2.3.2" 1008 | 1009 | run-parallel@^1.1.9: 1010 | version "1.2.0" 1011 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1012 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1013 | dependencies: 1014 | queue-microtask "^1.2.2" 1015 | 1016 | scheduler@^0.23.0: 1017 | version "0.23.0" 1018 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 1019 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1020 | dependencies: 1021 | loose-envify "^1.1.0" 1022 | 1023 | semver@^6.3.0: 1024 | version "6.3.0" 1025 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1026 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1027 | 1028 | source-map-js@^1.0.2: 1029 | version "1.0.2" 1030 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1031 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1032 | 1033 | supports-color@^5.3.0: 1034 | version "5.5.0" 1035 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1036 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1037 | dependencies: 1038 | has-flag "^3.0.0" 1039 | 1040 | supports-preserve-symlinks-flag@^1.0.0: 1041 | version "1.0.0" 1042 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1043 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1044 | 1045 | tailwind-merge@^1.8.1: 1046 | version "1.8.1" 1047 | resolved "https://registry.yarnpkg.com/tailwind-merge/-/tailwind-merge-1.8.1.tgz#0e56c8afbab2491f72e06381043ffec8b720ba04" 1048 | integrity sha512-+fflfPxvHFr81hTJpQ3MIwtqgvefHZFUHFiIHpVIRXvG/nX9+gu2P7JNlFu2bfDMJ+uHhi/pUgzaYacMoXv+Ww== 1049 | 1050 | tailwindcss@^3.2.4: 1051 | version "3.2.4" 1052 | resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.4.tgz#afe3477e7a19f3ceafb48e4b083e292ce0dc0250" 1053 | integrity sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ== 1054 | dependencies: 1055 | arg "^5.0.2" 1056 | chokidar "^3.5.3" 1057 | color-name "^1.1.4" 1058 | detective "^5.2.1" 1059 | didyoumean "^1.2.2" 1060 | dlv "^1.1.3" 1061 | fast-glob "^3.2.12" 1062 | glob-parent "^6.0.2" 1063 | is-glob "^4.0.3" 1064 | lilconfig "^2.0.6" 1065 | micromatch "^4.0.5" 1066 | normalize-path "^3.0.0" 1067 | object-hash "^3.0.0" 1068 | picocolors "^1.0.0" 1069 | postcss "^8.4.18" 1070 | postcss-import "^14.1.0" 1071 | postcss-js "^4.0.0" 1072 | postcss-load-config "^3.1.4" 1073 | postcss-nested "6.0.0" 1074 | postcss-selector-parser "^6.0.10" 1075 | postcss-value-parser "^4.2.0" 1076 | quick-lru "^5.1.1" 1077 | resolve "^1.22.1" 1078 | 1079 | to-fast-properties@^2.0.0: 1080 | version "2.0.0" 1081 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1082 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1083 | 1084 | to-regex-range@^5.0.1: 1085 | version "5.0.1" 1086 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1087 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1088 | dependencies: 1089 | is-number "^7.0.0" 1090 | 1091 | typescript@^4.9.3: 1092 | version "4.9.4" 1093 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" 1094 | integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== 1095 | 1096 | update-browserslist-db@^1.0.9: 1097 | version "1.0.10" 1098 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 1099 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 1100 | dependencies: 1101 | escalade "^3.1.1" 1102 | picocolors "^1.0.0" 1103 | 1104 | use-sync-external-store@1.2.0: 1105 | version "1.2.0" 1106 | resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" 1107 | integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== 1108 | 1109 | util-deprecate@^1.0.2: 1110 | version "1.0.2" 1111 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1112 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1113 | 1114 | vite@^4.0.0: 1115 | version "4.0.4" 1116 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.0.4.tgz#4612ce0b47bbb233a887a54a4ae0c6e240a0da31" 1117 | integrity sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw== 1118 | dependencies: 1119 | esbuild "^0.16.3" 1120 | postcss "^8.4.20" 1121 | resolve "^1.22.1" 1122 | rollup "^3.7.0" 1123 | optionalDependencies: 1124 | fsevents "~2.3.2" 1125 | 1126 | xtend@^4.0.2: 1127 | version "4.0.2" 1128 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1129 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1130 | 1131 | yallist@^3.0.2: 1132 | version "3.1.1" 1133 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 1134 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 1135 | 1136 | yaml@^1.10.2: 1137 | version "1.10.2" 1138 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1139 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1140 | 1141 | zod@^3.20.2: 1142 | version "3.20.2" 1143 | resolved "https://registry.yarnpkg.com/zod/-/zod-3.20.2.tgz#068606642c8f51b3333981f91c0a8ab37dfc2807" 1144 | integrity sha512-1MzNQdAvO+54H+EaK5YpyEy0T+Ejo/7YLHS93G3RnYWh5gaotGHwGeN/ZO687qEDU2y4CdStQYXVHIgrUl5UVQ== 1145 | 1146 | zustand@^4.3.2: 1147 | version "4.3.2" 1148 | resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.3.2.tgz#bb121fcad84c5a569e94bd1a2695e1a93ba85d39" 1149 | integrity sha512-rd4haDmlwMTVWVqwvgy00ny8rtti/klRoZjFbL/MAcDnmD5qSw/RZc+Vddstdv90M5Lv6RPgWvm1Hivyn0QgJw== 1150 | dependencies: 1151 | use-sync-external-store "1.2.0" 1152 | --------------------------------------------------------------------------------