├── .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 | 
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 | 
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 |
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 |
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 |
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 |

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 |
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 |
--------------------------------------------------------------------------------