├── .gitignore ├── README.md ├── client ├── .env ├── .eslintrc.cjs ├── .gitignore ├── .prettierignore ├── .prettierrc ├── index.html ├── package.json ├── postcss.config.js ├── public │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── src │ ├── App.tsx │ ├── assets │ │ ├── error_500.jpg │ │ └── logo.png │ ├── components │ │ ├── ErrorModal.tsx │ │ ├── Explore.tsx │ │ ├── Header.tsx │ │ ├── ImageModal.tsx │ │ └── SizeSelector.tsx │ ├── constant │ │ └── index.ts │ ├── index.css │ ├── main.tsx │ ├── pages │ │ └── Home.tsx │ ├── routes │ │ └── index.tsx │ ├── services │ │ └── image.service.ts │ ├── types │ │ └── types.ts │ ├── utils │ │ ├── axios.ts │ │ └── index.ts │ └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json ├── tsconfig.node.json ├── vite.config.ts └── yarn.lock ├── package.json ├── server ├── .env.example ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .prettierrc ├── nodemon.json ├── package.json ├── src │ ├── app.ts │ ├── config │ │ ├── config.ts │ │ └── dbConnect.ts │ ├── controller │ │ └── image.controller.ts │ ├── models │ │ └── image.schema.ts │ ├── routes │ │ └── image.route.ts │ ├── service │ │ └── image.service.ts │ ├── types │ │ ├── EnvConfig.ts │ │ └── Image.ts │ └── utils │ │ └── responseHandler.ts ├── tsconfig.json └── yarn.lock └── 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-ssr 12 | *.local 13 | 14 | # Editor directories and files 15 | .vscode/* 16 | !.vscode/extensions.json 17 | .idea 18 | .DS_Store 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AI Image Generator 🔥 2 | 3 | ## Text to image Generator with DALL·E 2 4 | 5 |

6 | 7 |

8 | 9 | ### Give your prompt and see the magic ! 10 | 11 | ## Live 🚀 12 | 13 | [image-generator.dhavalcode.com](https://image-generator.dhavalcode.com) 14 | 15 | ## Technologies Used 🖥️ 16 | 17 | - [Typescript](https://www.typescriptlang.org/) 18 | - [React](https://reactjs.org/) 19 | - [Node Js](https://nodejs.org/en) 20 | - [Mongoose Js](https://mongoosejs.com/) 21 | - [Tailwind CSS](https://tailwindcss.com/) 22 | - [Vite Js](https://vitejs.dev) 23 | - [Open AI](https://openai.com/) 24 | - [Cloudinary](https://cloudinary.com/) 25 | 26 | ## Getting Started 27 | 28 | ```bash 29 | # Clone this repository 30 | git clone https://github.com/dhavalCode/ai-image-generator.git 31 | 32 | # Go into the repository 33 | cd ai-image-generator 34 | 35 | # Setup default environment variables 36 | 37 | # For Linux 38 | cp env.example .env.local 39 | # For Windows 40 | copy env.example .env.local 41 | 42 | # Install dependencies 43 | npm install 44 | 45 | # Start a local dev server 46 | npm start 47 | ``` 48 | 49 | ## Setup 50 | 51 | - Create ENV File 52 | 53 | ```bash 54 | - ai-image-generator 55 | - server 56 | - node_modules 57 | - public 58 | - src 59 | - .env <-- create it here 60 | - env.example <-- this is the base file 61 | - .gitignore 62 | - package-lock.json 63 | - package.json 64 | ``` 65 | 66 | ```env 67 | // .env 68 | MONGODB_URL= "Replace with your url" 69 | OPEN_AI_KEY= "Replace with your key" 70 | CLOUDINARY_CLOUD_NAME= "Replace with yours" 71 | CLOUDINARY_API_KEY= "Your api key" 72 | CLOUDINARY_API_SECRET= "Your app secret key" 73 | ``` 74 | 75 | ## For the Future 76 | 77 | If you want to add more, Please don't hesitate to open a [pull request](https://github.com/dhavalCode/ai-image-generator/pulls). 78 | 79 | ## 👋 Get in Touch 80 | 81 | [![Twitter Follow](https://img.shields.io/twitter/follow/dhavalcode?style=social)](https://twitter.com/dhavalCode) 82 | 83 | [![linkedin](https://img.shields.io/badge/linkedin-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/dhavalcode) 84 | -------------------------------------------------------------------------------- /client/.env: -------------------------------------------------------------------------------- 1 | REACT_APP_API_HOST_URL="https://ai-image-generator-1b02.onrender.com" -------------------------------------------------------------------------------- /client/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { browser: true, es2020: true }, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:@typescript-eslint/recommended', 6 | 'plugin:react-hooks/recommended', 7 | ], 8 | parser: '@typescript-eslint/parser', 9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, 10 | plugins: ['react-refresh'], 11 | rules: { 12 | 'react-refresh/only-export-components': 'warn', 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /client/.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 | -------------------------------------------------------------------------------- /client/.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | # Ignore artifacts: 3 | build 4 | coverage -------------------------------------------------------------------------------- /client/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": false, 5 | "singleQuote": true 6 | } -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 16 | 21 | 26 | 31 | 36 | 41 | 46 | 51 | 57 | 63 | 69 | 75 | 76 | 77 | 78 | 79 | AI Image Generator 80 | 81 | 82 |
83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ai-image", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "homepage": "ai-image-generator-gilt.vercel.app", 7 | "scripts": { 8 | "dev": "vite", 9 | "build": "tsc && vite build", 10 | "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 11 | "preview": "vite preview" 12 | }, 13 | "dependencies": { 14 | "axios": "^1.4.0", 15 | "classnames": "^2.3.2", 16 | "copy-image-clipboard": "^2.1.2", 17 | "daisyui": "^2.51.6", 18 | "file-saver": "^2.0.5", 19 | "react": "^18.2.0", 20 | "react-dom": "^18.2.0", 21 | "react-router-dom": "^6.10.0" 22 | }, 23 | "devDependencies": { 24 | "@types/node": "^20.8.10", 25 | "@types/file-saver": "^2.0.5", 26 | "@types/react": "^18.0.28", 27 | "@types/react-dom": "^18.0.11", 28 | "@typescript-eslint/eslint-plugin": "^5.57.1", 29 | "@typescript-eslint/parser": "^5.57.1", 30 | "@vitejs/plugin-react-swc": "^3.0.0", 31 | "autoprefixer": "^10.4.14", 32 | "eslint": "^8.38.0", 33 | "eslint-plugin-react-hooks": "^4.6.0", 34 | "eslint-plugin-react-refresh": "^0.3.4", 35 | "postcss": "^8.4.23", 36 | "prettier": "^2.8.8", 37 | "tailwindcss": "^3.3.1", 38 | "typescript": "^5.0.2", 39 | "vite": "^4.3.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /client/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /client/public/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-144x144.png -------------------------------------------------------------------------------- /client/public/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-192x192.png -------------------------------------------------------------------------------- /client/public/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-36x36.png -------------------------------------------------------------------------------- /client/public/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-48x48.png -------------------------------------------------------------------------------- /client/public/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-72x72.png -------------------------------------------------------------------------------- /client/public/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/android-icon-96x96.png -------------------------------------------------------------------------------- /client/public/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-114x114.png -------------------------------------------------------------------------------- /client/public/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-120x120.png -------------------------------------------------------------------------------- /client/public/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-144x144.png -------------------------------------------------------------------------------- /client/public/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-152x152.png -------------------------------------------------------------------------------- /client/public/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-180x180.png -------------------------------------------------------------------------------- /client/public/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-57x57.png -------------------------------------------------------------------------------- /client/public/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-60x60.png -------------------------------------------------------------------------------- /client/public/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-72x72.png -------------------------------------------------------------------------------- /client/public/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-76x76.png -------------------------------------------------------------------------------- /client/public/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon-precomposed.png -------------------------------------------------------------------------------- /client/public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/apple-icon.png -------------------------------------------------------------------------------- /client/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/favicon-16x16.png -------------------------------------------------------------------------------- /client/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/favicon-32x32.png -------------------------------------------------------------------------------- /client/public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/favicon-96x96.png -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "App", 3 | "icons": [ 4 | { 5 | "src": "\/android-icon-36x36.png", 6 | "sizes": "36x36", 7 | "type": "image\/png", 8 | "density": "0.75" 9 | }, 10 | { 11 | "src": "\/android-icon-48x48.png", 12 | "sizes": "48x48", 13 | "type": "image\/png", 14 | "density": "1.0" 15 | }, 16 | { 17 | "src": "\/android-icon-72x72.png", 18 | "sizes": "72x72", 19 | "type": "image\/png", 20 | "density": "1.5" 21 | }, 22 | { 23 | "src": "\/android-icon-96x96.png", 24 | "sizes": "96x96", 25 | "type": "image\/png", 26 | "density": "2.0" 27 | }, 28 | { 29 | "src": "\/android-icon-144x144.png", 30 | "sizes": "144x144", 31 | "type": "image\/png", 32 | "density": "3.0" 33 | }, 34 | { 35 | "src": "\/android-icon-192x192.png", 36 | "sizes": "192x192", 37 | "type": "image\/png", 38 | "density": "4.0" 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /client/public/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/ms-icon-144x144.png -------------------------------------------------------------------------------- /client/public/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/ms-icon-150x150.png -------------------------------------------------------------------------------- /client/public/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/ms-icon-310x310.png -------------------------------------------------------------------------------- /client/public/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/public/ms-icon-70x70.png -------------------------------------------------------------------------------- /client/src/App.tsx: -------------------------------------------------------------------------------- 1 | import { RouterProvider } from 'react-router-dom' 2 | import router from './routes' 3 | 4 | // ---------------------------------------------------------- 5 | 6 | function App() { 7 | return 8 | } 9 | 10 | export default App 11 | -------------------------------------------------------------------------------- /client/src/assets/error_500.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/src/assets/error_500.jpg -------------------------------------------------------------------------------- /client/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhavalCode/ai-image-generator/051e8a9e094a6c808d5a8cabd2d97ba5a2ad2fca/client/src/assets/logo.png -------------------------------------------------------------------------------- /client/src/components/ErrorModal.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useRef } from 'react' 2 | import classNames from 'classnames' 3 | import errorImg from '../assets/error_500.jpg' 4 | 5 | // ------------------------------------------------------------ 6 | 7 | interface ErrorModalProps { 8 | open: boolean 9 | setIsOpen: React.Dispatch> 10 | } 11 | 12 | const ErrorModal: React.FC = ({ open, setIsOpen }) => { 13 | const modalRef = useRef(null) 14 | 15 | useEffect(() => { 16 | if (open) { 17 | document.body.style.overflow = 'hidden' 18 | document.addEventListener('click', handleClickOutside) 19 | } else { 20 | document.body.style.overflow = 'unset' 21 | document.removeEventListener('click', handleClickOutside) 22 | } 23 | 24 | return () => { 25 | document.body.style.overflow = 'unset' 26 | document.removeEventListener('click', handleClickOutside) 27 | } 28 | // eslint-disable-next-line react-hooks/exhaustive-deps 29 | }, [open]) 30 | 31 | const handleClickOutside = (event: MouseEvent) => { 32 | if ( 33 | modalRef.current && 34 | !modalRef.current.contains(event.target as Node) 35 | ) { 36 | setIsOpen(false) 37 | } 38 | } 39 | 40 | const handleClose = () => { 41 | setIsOpen(false) 42 | } 43 | 44 | return ( 45 | <> 46 |
51 |
52 | 58 | 59 |
60 |
61 | {'Internal 66 |
67 |

68 | We are currently experiencing high demand for image 69 | generation service, and as a result, we may be 70 | unable to process your request at this time. Please 71 | try again later. 72 |

73 |
74 | 75 |
76 | 83 |
84 |
85 |
86 | 87 | ) 88 | } 89 | 90 | export default ErrorModal 91 | -------------------------------------------------------------------------------- /client/src/components/Explore.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import { Image, ImageModalState } from '../types/types' 3 | import ImageService from '../services/image.service' 4 | import { removeDuplicatesById } from '../utils' 5 | 6 | // ------------------------------------------------------------ 7 | 8 | interface ImageModalProps { 9 | setImageModalState: React.Dispatch> 10 | } 11 | 12 | const Explore: React.FC = ({ setImageModalState }) => { 13 | const [generatedImages, setGeneratedImages] = useState([]) 14 | const [isFetching, setIsFetching] = useState(false) 15 | const [page, setPage] = useState(1) 16 | const [isEnded, setIsEnded] = useState(false) 17 | 18 | useEffect(() => { 19 | window.addEventListener('scroll', handleInfiniteScroll) 20 | 21 | return () => window.removeEventListener('scroll', handleInfiniteScroll) 22 | // eslint-disable-next-line react-hooks/exhaustive-deps 23 | }, []) 24 | 25 | useEffect(() => { 26 | if (!isEnded && !isFetching) { 27 | fetch() 28 | } 29 | // eslint-disable-next-line react-hooks/exhaustive-deps 30 | }, [page]) 31 | 32 | const handleInfiniteScroll = () => { 33 | if ( 34 | window.innerHeight + document.documentElement.scrollTop + 1 >= 35 | document.documentElement.scrollHeight 36 | ) { 37 | setPage((page) => page + 1) 38 | } 39 | } 40 | 41 | const fetch = async () => { 42 | try { 43 | setIsFetching(true) 44 | const res = await ImageService.fetchImages(page) 45 | 46 | if (res.status === 201 || res.status === 200) { 47 | const images: Image[] = res?.data?.data || [] 48 | 49 | setIsEnded(images.length === 0) 50 | 51 | setGeneratedImages((preValue) => 52 | removeDuplicatesById([...preValue, ...images]) 53 | ) 54 | } 55 | } catch (error) { 56 | console.log('Error : ', error) 57 | } finally { 58 | setIsFetching(false) 59 | } 60 | } 61 | 62 | return ( 63 |
64 |
65 |

66 | Explore 67 |

68 | 69 |

70 | So Far, Our platform has produced countless stunning images. 71 | Be amazed by what it can do for You. 72 |

73 |
74 |
75 | {generatedImages.length > 0 && 76 | generatedImages.map((image) => ( 77 |
{ 81 | e.stopPropagation() 82 | setImageModalState((pre) => ({ 83 | ...pre, 84 | open: true, 85 | imgSrc: image.imageUrl, 86 | prompt: image.prompt, 87 | })) 88 | }} 89 | > 90 | {image.prompt} 96 |
97 | ))} 98 | {isFetching && 99 | [1, 2, 3, 4, 5, 6, 7, 8].map((ele) => ( 100 |
104 | ))} 105 |
106 |
107 | ) 108 | } 109 | 110 | export default Explore 111 | -------------------------------------------------------------------------------- /client/src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import logoImg from '../assets/logo.png' 2 | 3 | // ------------------------------------------------ 4 | 5 | function Header() { 6 | return ( 7 |
8 | 49 |
50 | ) 51 | } 52 | 53 | export default Header 54 | -------------------------------------------------------------------------------- /client/src/components/ImageModal.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useRef, useState } from 'react' 2 | import FileSaver from 'file-saver' 3 | import { copyImageToClipboard } from 'copy-image-clipboard' 4 | import classNames from 'classnames' 5 | import { ImageModalState } from '../types/types' 6 | 7 | // ------------------------------------------------------------ 8 | 9 | interface ImageModalProps { 10 | dialogState: ImageModalState 11 | setDialogState: React.Dispatch> 12 | } 13 | 14 | const ImageModal: React.FC = ({ 15 | dialogState, 16 | setDialogState, 17 | }) => { 18 | const [isCopied, setIsCopied] = useState(false) 19 | 20 | const [isDownloaded, setIsDownloaded] = useState(false) 21 | 22 | const { imgSrc, open, prompt } = dialogState 23 | 24 | const modalRef = useRef(null) 25 | 26 | useEffect(() => { 27 | if (open) { 28 | document.body.style.overflow = 'hidden' 29 | document.addEventListener('click', handleClickOutside) 30 | } else { 31 | document.body.style.overflow = 'unset' 32 | document.removeEventListener('click', handleClickOutside) 33 | } 34 | 35 | return () => { 36 | document.body.style.overflow = 'unset' 37 | document.removeEventListener('click', handleClickOutside) 38 | setIsCopied(false) 39 | setIsDownloaded(false) 40 | } 41 | // eslint-disable-next-line react-hooks/exhaustive-deps 42 | }, [open]) 43 | 44 | const clearModalContent = () => { 45 | setTimeout(() => { 46 | setDialogState({ 47 | ...dialogState, 48 | open: false, 49 | imgSrc: '', 50 | prompt: '', 51 | }) 52 | }, 500) 53 | } 54 | 55 | const handleClickOutside = (event: MouseEvent) => { 56 | if ( 57 | modalRef.current && 58 | !modalRef.current.contains(event.target as Node) 59 | ) { 60 | setDialogState({ 61 | ...dialogState, 62 | open: false, 63 | }) 64 | clearModalContent() 65 | } 66 | } 67 | 68 | const handleClose = () => { 69 | setDialogState({ ...dialogState, open: false }) 70 | clearModalContent() 71 | } 72 | 73 | const handleDownload = (url: string | null) => { 74 | if (url) { 75 | FileSaver.saveAs( 76 | url, 77 | `download_${new Date().toLocaleDateString()}.png` 78 | ) 79 | setIsDownloaded(true) 80 | } 81 | } 82 | 83 | const handleCopyImage = async (url: string | null) => { 84 | if (!url) { 85 | return 86 | } 87 | try { 88 | await copyImageToClipboard(url) 89 | setIsCopied(true) 90 | } catch (error) { 91 | alert('something went wrong') 92 | } 93 | } 94 | 95 | return ( 96 | <> 97 |
102 |
103 | 109 | 110 |
111 |
112 | {prompt} 117 |
118 |

119 | {prompt} 120 |

121 |
122 | 123 |
124 | {isCopied ? ( 125 | 143 | ) : ( 144 | 163 | )} 164 | 165 | {isDownloaded ? ( 166 | 184 | ) : ( 185 | 204 | )} 205 |
206 |
207 |
208 | 209 | ) 210 | } 211 | 212 | export default ImageModal 213 | -------------------------------------------------------------------------------- /client/src/components/SizeSelector.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { IMAGE_SIZES } from '../constant' 3 | 4 | //--------------------------------------------------------- 5 | 6 | interface SizeSelectorProps { 7 | value: string 8 | onValueChange: (value: string) => void 9 | } 10 | 11 | const SizeSelector: React.FC = ({ 12 | value, 13 | onValueChange, 14 | }) => { 15 | const [open, setOpen] = useState(false) 16 | 17 | const handleOpen = () => { 18 | setOpen(true) 19 | } 20 | const handleClose = () => { 21 | setOpen(false) 22 | } 23 | return ( 24 |
25 |
26 | 45 |
46 |
51 |
    52 | {IMAGE_SIZES.map((size) => ( 53 |
  • { 61 | onValueChange(size.value) 62 | handleClose() 63 | }} 64 | > 65 | {size.label} 66 |
  • 67 | ))} 68 |
69 |
70 |
71 | ) 72 | } 73 | 74 | export default SizeSelector 75 | -------------------------------------------------------------------------------- /client/src/constant/index.ts: -------------------------------------------------------------------------------- 1 | export const IMAGE_SIZES = [ 2 | { 3 | label: 'Small (256 X 256)', 4 | value: 'Small', 5 | }, 6 | { 7 | label: 'Medium (512 X 512)', 8 | value: 'Medium', 9 | }, 10 | { 11 | label: 'Large (1024 X 1024)', 12 | value: 'Large', 13 | }, 14 | ] 15 | 16 | export const promptList = [ 17 | 'Mechanical Dawn, Technology City, a Mechanical Transformer, epic fantasy art', 18 | 'Centered portrait of an ultra detailed Mechanical Cyberpunk Female Android, looking into the camera, intricate, elegant, super highly detailed, smooth, sharp focus, no blur, no dof, extreme illustration, Unreal', 19 | 'wolf portrait, ferns, butterflies, oilpainting, cinematic lighting', 20 | 'A pretty woman, delicate features directed gaze, Earrings,concept art, digital painting, illustration, 8k, studio lighting', 21 | 'Mechanical Dawn, Technology City, a Mechanical Transformer, epic fantasy art', 22 | 'Iridescent armor, long wild white hair!! covered chest!!! fantasy, d & d, intricate ornate details, digital painting, pretty face, symmetry', 23 | 'A 28 mm closeup photo of a tesla cybertruck a on wet floor of a photo studio, intricate, hyper detailed, smooth, high contrast, volumetric lighting, octane, moebius, greg rutkowski, blade runner, ripley scott, synthwave, cinematic', 24 | 'Silicon valley virtual reality 10 th anniversary, beautiful! woman with glasses, cyberpunk art by android jones, cyberpunk art by beeple, synthwave, darksynth, quantum tracerwave, wireframes', 25 | 'Centered portrait of an ultra detailed Mechanical Cyberpunk Female Android, looking into the camera, intricate, elegant, super highly detailed, smooth, sharp focus, no blur, no dof, extreme illustration, Unreal', 26 | 'Beautiful organic house made of imaginary plants in a forest, architectural render, futuresynth, chillwave', 27 | 'Hand drawn cute gnomes face in autumn disguise holding pumpkin and maple leaf, detailed face, low angle, high detail, warm lighting, volumetric, godrays, vivid, beautiful', 28 | 'Very atmospheric Technology City, a tiny Motorcycle, fantasy art', 29 | 'An astronaut resting on mars in a beach chair, vibrant lighting, elegant, highly detailed, smooth, sharp focus, illustration, beautiful, geometric', 30 | 'Full body 3d render of brown man with beard wearing tobacco brown pullover, glasses, white collar', 31 | 'A pretty woman, delicate features directed gaze, Earrings', 32 | 'An astronaut resting on mars in a beach chair, vibrant lighting, elegant, highly detailed, smooth, sharp focus, illustration, beautiful, geometric', 33 | 'A 28 mm closeup photo of a tesla cybertruck a on wet floor of a photo studio, intricate, hyper detailed, smooth, high contrast, volumetric lighting, octane, moebius, greg rutkowski, blade runner, ripley scott, synthwave, cinematic', 34 | 'Robert Pattison portrait, dystopia core, hyperrealistic, apocalyptic, highly detailed exoskeleton armor, dramatic, sharp focus, hero, gape, epic, perfectly symmetrical face, perfect eyes, intricate', 35 | 'anime key visual of elegant young female, long blonde hair and large eyes, finely detailed perfect face, laying down in the grass at sunset, golden hour sunset lighting, background blur bokeh', 36 | 'Iridescent armor, long wild white hair!! covered chest!!! fantasy, d & d, intricate ornate details, digital painting, pretty face, symmetry', 37 | 'wolf portrait, ferns, butterflies, oilpainting, cinematic lighting', 38 | '4K HD, high detail photograph, shot with Sigma f/4.2, 250 mm sharp lens, shallow depth of field, White golden retriever, consistent, high detailed light refraction, high level texture render', 39 | 'A realistic photograph of a young woman with blue eyes and blonde hair', 40 | 'A man standing in front of a stargate to another dimension', 41 | 'Spongebob Squarepants in the Blair Witch Project', 42 | 'A velociraptor working at a hotdog stand, lomography', 43 | 'A man walking through the bustling streets of Kowloon at night, lit by many bright neon shop signs, 50mm lens', 44 | 'A BBQ that is alive, in the style of a Pixar animated movie', 45 | 'A futuristic cyborg dance club, neon lights', 46 | 'The long-lost Star Wars 1990 Japanese Anime', 47 | 'A hamburger in the shape of a Rubik’s cube, professional food photography', 48 | 'A Synthwave Hedgehog, Blade Runner Cyberpunk', 49 | 'An astronaut encountering an alien life form on a distant planet, photography', 50 | 'A Dinosaur exploring Cape Town, photography', 51 | 'A Man falling in Love with his Computer, digital art', 52 | 'A photograph of a cyborg exploring Tokyo at night, lomography', 53 | 'Dracula walking down the street of New York City in the 1920s, black and white photography', 54 | 'Synthwave aeroplane', 55 | 'A man wanders through the rainy streets of Tokyo, with bright neon signs, 50mm', 56 | 'A Space Shuttle flying above Cape Town, digital art', 57 | ] -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /client/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.tsx' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /client/src/pages/Home.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import Header from '../components/Header' 3 | import SizeSelector from '../components/SizeSelector' 4 | import Explore from '../components/Explore' 5 | import { IMAGE_SIZES } from '../constant' 6 | import { getSurprisePrompt } from '../utils' 7 | import imageService from '../services/image.service' 8 | import ImageModal from '../components/ImageModal' 9 | import { ImageModalState } from '../types/types' 10 | import classNames from 'classnames' 11 | import ErrorModal from '../components/ErrorModal' 12 | 13 | // ------------------------------------------------------------ 14 | 15 | function Home() { 16 | const [sizeValue, setSizeValue] = useState(IMAGE_SIZES[0].value) 17 | 18 | const [IsGenerating, setIsGenerating] = useState(false) 19 | 20 | const [imageModalState, setImageModalState] = useState({ 21 | imgSrc: null, 22 | open: false, 23 | prompt: '', 24 | }) 25 | const [errorModelOpen, setErrorModelOpen] = useState(false) 26 | 27 | const [prompt, setPrompt] = useState('') 28 | 29 | const generateImage = async () => { 30 | try { 31 | setIsGenerating(true) 32 | const res = await imageService.generateImage({ 33 | prompt, 34 | size: sizeValue, 35 | }) 36 | 37 | setIsGenerating(false) 38 | 39 | if (res.status === 201 || res.status === 200) { 40 | const imageUrl = res?.data?.data?.imageUrl 41 | 42 | setImageModalState((pre) => ({ 43 | ...pre, 44 | imgSrc: imageUrl, 45 | open: true, 46 | prompt: prompt, 47 | })) 48 | } else { 49 | setErrorModelOpen(true) 50 | } 51 | } catch (error) { 52 | setErrorModelOpen(true) 53 | } 54 | } 55 | 56 | return ( 57 | <> 58 |
59 |
60 |

61 | Text to image with AI Image Generator 62 |

63 |

64 | Unlock your imagination with our platform and witness the 65 | breathtaking power of computer-generated imagery! 66 |

67 |
68 |
69 |
70 | setPrompt(e.target.value)} 75 | className="block w-full p-4 text-gray-700 border border-gray-300 rounded-lg bg-gray-50 sm:text-md focus:ring-blue-500 focus:border-purple-500" 76 | /> 77 | 78 | { 81 | setSizeValue(value) 82 | }} 83 | /> 84 |
85 | 96 |
97 |
98 |

99 | No Inspiration ? Try ⇒ 100 |

101 | 109 |
110 |
111 |
112 | 113 | 114 | {/* footer spacer */} 115 |
116 | 117 | {/* Modal */} 118 | 119 | 123 | 124 | 125 | ) 126 | } 127 | 128 | export default Home 129 | -------------------------------------------------------------------------------- /client/src/routes/index.tsx: -------------------------------------------------------------------------------- 1 | import { createBrowserRouter } from 'react-router-dom' 2 | // components 3 | import Home from '../pages/Home' 4 | 5 | const router = createBrowserRouter([ 6 | { 7 | path: '/', 8 | element: , 9 | }, 10 | ]) 11 | 12 | export default router 13 | -------------------------------------------------------------------------------- /client/src/services/image.service.ts: -------------------------------------------------------------------------------- 1 | import axios from '../utils/axios' 2 | 3 | const generateImage = (data: { prompt: string; size: string }) => 4 | axios.post('/image/generate', data).then( 5 | (response) => response, 6 | (error) => error 7 | ) 8 | 9 | const fetchImages = (page: number, limit = 8) => 10 | axios.get(`/image/all?page=${page}&limit=${limit}`).then( 11 | (response) => response, 12 | (error) => error 13 | ) 14 | 15 | const imageService = { 16 | generateImage, 17 | fetchImages, 18 | } 19 | 20 | export default imageService 21 | -------------------------------------------------------------------------------- /client/src/types/types.ts: -------------------------------------------------------------------------------- 1 | export interface ImageModalState { 2 | imgSrc: string | null 3 | open: boolean 4 | prompt: string 5 | } 6 | 7 | export type Image = { 8 | _id: string 9 | prompt: string 10 | imageUrl: string 11 | createdAt : string 12 | } 13 | -------------------------------------------------------------------------------- /client/src/utils/axios.ts: -------------------------------------------------------------------------------- 1 | import axiosLib from 'axios' 2 | 3 | // axios Setup 4 | 5 | // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 6 | const baseURL = process.env.REACT_APP_API_HOST_URL! 7 | 8 | const axios = axiosLib.create({ 9 | baseURL: `${baseURL}/api`, 10 | }) 11 | 12 | export default axios 13 | -------------------------------------------------------------------------------- /client/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | import { promptList } from '../constant' 2 | 3 | export const getSurprisePrompt = (prompt: string): string => { 4 | const randomIndex = Math.floor(Math.random() * promptList.length) 5 | const randomPrompt = promptList[randomIndex] 6 | 7 | if (randomPrompt === prompt) return getSurprisePrompt(prompt) 8 | 9 | return randomPrompt 10 | } 11 | 12 | interface Identifiable { 13 | _id: number | string 14 | } 15 | 16 | export const removeDuplicatesById = (arr: T[]): T[] => { 17 | return Object.values( 18 | arr.reduce((acc, current) => { 19 | acc[current._id] = current 20 | return acc 21 | }, {} as Record) 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /client/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /client/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | import colors from 'tailwindcss/colors' 3 | import daisyui from 'daisyui' 4 | import defaultTheme from 'tailwindcss/defaultTheme' 5 | 6 | export default { 7 | content: ['./src/**/*.{js,ts,jsx,tsx}'], 8 | darkMode: 'class', 9 | theme: { 10 | extend: { 11 | screens: { 12 | xs: '475px', 13 | ...defaultTheme.screens, 14 | }, 15 | colors: { 16 | neutral: colors.slate, 17 | }, 18 | fontFamily: { 19 | lato: ['Lato', 'sans-serif'], 20 | roboto: ['Roboto', 'sans-serif'], 21 | }, 22 | animation: { 23 | text: 'text 10s ease infinite', 24 | }, 25 | keyframes: { 26 | text: { 27 | '0%, 100%': { 28 | 'background-size': '200% 200%', 29 | 'background-position': 'left center', 30 | }, 31 | '50%': { 32 | 'background-size': '200% 200%', 33 | 'background-position': 'right center', 34 | }, 35 | }, 36 | }, 37 | }, 38 | }, 39 | variants: { 40 | extend: {}, 41 | }, 42 | plugins: [daisyui], 43 | daisyui: { 44 | darkTheme: 'light', 45 | }, 46 | } 47 | -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 5 | "module": "ESNext", 6 | "skipLibCheck": true, 7 | 8 | /* Bundler mode */ 9 | "moduleResolution": "bundler", 10 | "allowImportingTsExtensions": true, 11 | "resolveJsonModule": true, 12 | "isolatedModules": true, 13 | "noEmit": true, 14 | "jsx": "react-jsx", 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true 21 | }, 22 | "include": ["src"], 23 | "references": [{ "path": "./tsconfig.node.json" }] 24 | } 25 | -------------------------------------------------------------------------------- /client/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /client/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, loadEnv } from 'vite' 2 | import react from '@vitejs/plugin-react-swc' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig(({ mode }) => { 6 | const env = loadEnv(mode, process.cwd(), ''); 7 | return { 8 | define: { 9 | 'process.env.REACT_APP_API_HOST_URL': JSON.stringify(env.REACT_APP_API_HOST_URL) 10 | }, 11 | plugins: [react()], 12 | } 13 | }) -------------------------------------------------------------------------------- /client/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@alloc/quick-lru@^5.2.0": 6 | version "5.2.0" 7 | resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" 8 | integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== 9 | 10 | "@esbuild/android-arm64@0.17.18": 11 | version "0.17.18" 12 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz#4aa8d8afcffb4458736ca9b32baa97d7cb5861ea" 13 | integrity sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw== 14 | 15 | "@esbuild/android-arm@0.17.18": 16 | version "0.17.18" 17 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.18.tgz#74a7e95af4ee212ebc9db9baa87c06a594f2a427" 18 | integrity sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw== 19 | 20 | "@esbuild/android-x64@0.17.18": 21 | version "0.17.18" 22 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.18.tgz#1dcd13f201997c9fe0b204189d3a0da4eb4eb9b6" 23 | integrity sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg== 24 | 25 | "@esbuild/darwin-arm64@0.17.18": 26 | version "0.17.18" 27 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz#444f3b961d4da7a89eb9bd35cfa4415141537c2a" 28 | integrity sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ== 29 | 30 | "@esbuild/darwin-x64@0.17.18": 31 | version "0.17.18" 32 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz#a6da308d0ac8a498c54d62e0b2bfb7119b22d315" 33 | integrity sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A== 34 | 35 | "@esbuild/freebsd-arm64@0.17.18": 36 | version "0.17.18" 37 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz#b83122bb468889399d0d63475d5aea8d6829c2c2" 38 | integrity sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA== 39 | 40 | "@esbuild/freebsd-x64@0.17.18": 41 | version "0.17.18" 42 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz#af59e0e03fcf7f221b34d4c5ab14094862c9c864" 43 | integrity sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew== 44 | 45 | "@esbuild/linux-arm64@0.17.18": 46 | version "0.17.18" 47 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz#8551d72ba540c5bce4bab274a81c14ed01eafdcf" 48 | integrity sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ== 49 | 50 | "@esbuild/linux-arm@0.17.18": 51 | version "0.17.18" 52 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz#e09e76e526df4f665d4d2720d28ff87d15cdf639" 53 | integrity sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg== 54 | 55 | "@esbuild/linux-ia32@0.17.18": 56 | version "0.17.18" 57 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz#47878860ce4fe73a36fd8627f5647bcbbef38ba4" 58 | integrity sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ== 59 | 60 | "@esbuild/linux-loong64@0.17.18": 61 | version "0.17.18" 62 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz#3f8fbf5267556fc387d20b2e708ce115de5c967a" 63 | integrity sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ== 64 | 65 | "@esbuild/linux-mips64el@0.17.18": 66 | version "0.17.18" 67 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz#9d896d8f3c75f6c226cbeb840127462e37738226" 68 | integrity sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA== 69 | 70 | "@esbuild/linux-ppc64@0.17.18": 71 | version "0.17.18" 72 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz#3d9deb60b2d32c9985bdc3e3be090d30b7472783" 73 | integrity sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ== 74 | 75 | "@esbuild/linux-riscv64@0.17.18": 76 | version "0.17.18" 77 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz#8a943cf13fd24ff7ed58aefb940ef178f93386bc" 78 | integrity sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA== 79 | 80 | "@esbuild/linux-s390x@0.17.18": 81 | version "0.17.18" 82 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz#66cb01f4a06423e5496facabdce4f7cae7cb80e5" 83 | integrity sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw== 84 | 85 | "@esbuild/linux-x64@0.17.18": 86 | version "0.17.18" 87 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz#23c26050c6c5d1359c7b774823adc32b3883b6c9" 88 | integrity sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA== 89 | 90 | "@esbuild/netbsd-x64@0.17.18": 91 | version "0.17.18" 92 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz#789a203d3115a52633ff6504f8cbf757f15e703b" 93 | integrity sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg== 94 | 95 | "@esbuild/openbsd-x64@0.17.18": 96 | version "0.17.18" 97 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz#d7b998a30878f8da40617a10af423f56f12a5e90" 98 | integrity sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA== 99 | 100 | "@esbuild/sunos-x64@0.17.18": 101 | version "0.17.18" 102 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz#ecad0736aa7dae07901ba273db9ef3d3e93df31f" 103 | integrity sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg== 104 | 105 | "@esbuild/win32-arm64@0.17.18": 106 | version "0.17.18" 107 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz#58dfc177da30acf956252d7c8ae9e54e424887c4" 108 | integrity sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg== 109 | 110 | "@esbuild/win32-ia32@0.17.18": 111 | version "0.17.18" 112 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz#340f6163172b5272b5ae60ec12c312485f69232b" 113 | integrity sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw== 114 | 115 | "@esbuild/win32-x64@0.17.18": 116 | version "0.17.18" 117 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz#3a8e57153905308db357fd02f57c180ee3a0a1fa" 118 | integrity sha512-qU25Ma1I3NqTSHJUOKi9sAH1/Mzuvlke0ioMJRthLXKm7JiSKVwFghlGbDLOO2sARECGhja4xYfRAZNPAkooYg== 119 | 120 | "@eslint-community/eslint-utils@^4.2.0": 121 | version "4.4.0" 122 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 123 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 124 | dependencies: 125 | eslint-visitor-keys "^3.3.0" 126 | 127 | "@eslint-community/regexpp@^4.4.0": 128 | version "4.5.0" 129 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724" 130 | integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ== 131 | 132 | "@eslint/eslintrc@^2.0.2": 133 | version "2.0.2" 134 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.2.tgz#01575e38707add677cf73ca1589abba8da899a02" 135 | integrity sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ== 136 | dependencies: 137 | ajv "^6.12.4" 138 | debug "^4.3.2" 139 | espree "^9.5.1" 140 | globals "^13.19.0" 141 | ignore "^5.2.0" 142 | import-fresh "^3.2.1" 143 | js-yaml "^4.1.0" 144 | minimatch "^3.1.2" 145 | strip-json-comments "^3.1.1" 146 | 147 | "@eslint/js@8.39.0": 148 | version "8.39.0" 149 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.39.0.tgz#58b536bcc843f4cd1e02a7e6171da5c040f4d44b" 150 | integrity sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng== 151 | 152 | "@humanwhocodes/config-array@^0.11.8": 153 | version "0.11.8" 154 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 155 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 156 | dependencies: 157 | "@humanwhocodes/object-schema" "^1.2.1" 158 | debug "^4.1.1" 159 | minimatch "^3.0.5" 160 | 161 | "@humanwhocodes/module-importer@^1.0.1": 162 | version "1.0.1" 163 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 164 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 165 | 166 | "@humanwhocodes/object-schema@^1.2.1": 167 | version "1.2.1" 168 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 169 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 170 | 171 | "@jridgewell/gen-mapping@^0.3.2": 172 | version "0.3.3" 173 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 174 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 175 | dependencies: 176 | "@jridgewell/set-array" "^1.0.1" 177 | "@jridgewell/sourcemap-codec" "^1.4.10" 178 | "@jridgewell/trace-mapping" "^0.3.9" 179 | 180 | "@jridgewell/resolve-uri@3.1.0": 181 | version "3.1.0" 182 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 183 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 184 | 185 | "@jridgewell/set-array@^1.0.1": 186 | version "1.1.2" 187 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 188 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 189 | 190 | "@jridgewell/sourcemap-codec@1.4.14": 191 | version "1.4.14" 192 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 193 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 194 | 195 | "@jridgewell/sourcemap-codec@^1.4.10": 196 | version "1.4.15" 197 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 198 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 199 | 200 | "@jridgewell/trace-mapping@^0.3.9": 201 | version "0.3.18" 202 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 203 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 204 | dependencies: 205 | "@jridgewell/resolve-uri" "3.1.0" 206 | "@jridgewell/sourcemap-codec" "1.4.14" 207 | 208 | "@nodelib/fs.scandir@2.1.5": 209 | version "2.1.5" 210 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 211 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 212 | dependencies: 213 | "@nodelib/fs.stat" "2.0.5" 214 | run-parallel "^1.1.9" 215 | 216 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 217 | version "2.0.5" 218 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 219 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 220 | 221 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 222 | version "1.2.8" 223 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 224 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 225 | dependencies: 226 | "@nodelib/fs.scandir" "2.1.5" 227 | fastq "^1.6.0" 228 | 229 | "@remix-run/router@1.5.0": 230 | version "1.5.0" 231 | resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.5.0.tgz#57618e57942a5f0131374a9fdb0167e25a117fdc" 232 | integrity sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg== 233 | 234 | "@swc/core-darwin-arm64@1.3.53": 235 | version "1.3.53" 236 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.53.tgz#0dabb2ecfeea3aea8e66f5cbf9736128169e7055" 237 | integrity sha512-JvWwV/duzdQ60iwWYceDhDk75LmdrLoPC7myX3Src3gl/bJtETMq7uHS9uY8m0GQOqbct7XGR3q5Ff21YxkSzg== 238 | 239 | "@swc/core-darwin-x64@1.3.53": 240 | version "1.3.53" 241 | resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.53.tgz#01ef02573d2743478a5400a1f7b397901a13202a" 242 | integrity sha512-UuIGZtCfUPJM2Q01bRIFzmucOMg8UZ+mY3kh5xB8kl/VrLltBlraSWGjjJzYmUeUxiF8+CtMfeSYav5QfU2v3g== 243 | 244 | "@swc/core-linux-arm-gnueabihf@1.3.53": 245 | version "1.3.53" 246 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.53.tgz#d76fdcf34e835244f670b1696b320287187da80f" 247 | integrity sha512-LupAjTErteyLmowYIfiQeTz3uVh7/SPYv/EuG1PYrajNoUYomt7WA0rQUoyglF9VtwVyNqxptWEO5So32ApTHA== 248 | 249 | "@swc/core-linux-arm64-gnu@1.3.53": 250 | version "1.3.53" 251 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.53.tgz#00713c4477249192b23a39b30666043b47079eff" 252 | integrity sha512-kREfZdiJH/O8GtJJ22wVN9DVzz/+CPAkw5Mn5te2KQg0xJHMWaESU5XeYMWvtwyOQVmb31b6zCGFy3pnBWWfGw== 253 | 254 | "@swc/core-linux-arm64-musl@1.3.53": 255 | version "1.3.53" 256 | resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.53.tgz#f310ec81dc566f039520fe1dd583ce1c5a6ec636" 257 | integrity sha512-VeAgomBr6BVuBRjZjRHmvp5gKp1nZgbbd441ca1AvsPd2c+ZyhyHLxTWeHOzBDa/vYnmi9BCwx3QJzFqbAFPVw== 258 | 259 | "@swc/core-linux-x64-gnu@1.3.53": 260 | version "1.3.53" 261 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.53.tgz#a5e7113fbc778019960ca7276f104085adefd513" 262 | integrity sha512-LFX5+QpQkESPkmx860C40pIiYf1utEqoA+WDtmKnUz3DucYvw3eGlXCBdyklP7UBWwJktKIcPlIqr7yROY5VlQ== 263 | 264 | "@swc/core-linux-x64-musl@1.3.53": 265 | version "1.3.53" 266 | resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.53.tgz#dacc29541f983e9b2d801bf80b1b9e9ac81d5673" 267 | integrity sha512-O0lbJgeaM0VEsG8wFYvpF+Iuf0IENv+LnXHoygkAsv67sVW54+gFxav2sEdkftD5qYe9ku4tmtTVYRZlFgC84Q== 268 | 269 | "@swc/core-win32-arm64-msvc@1.3.53": 270 | version "1.3.53" 271 | resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.53.tgz#8d0b4cc7530512d9d390f6f90faecba8f4c93ada" 272 | integrity sha512-7PgvPl0aNLaFZSK+rIi4DB1g0aW2qOsTIJQSJGRszsCP8pze/traXymyuSG2I3y9Hx7Z+bP5ycJydyAgCw88WA== 273 | 274 | "@swc/core-win32-ia32-msvc@1.3.53": 275 | version "1.3.53" 276 | resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.53.tgz#88fc90d99620bd2f18ccb2bc6ee36bcee6dcee44" 277 | integrity sha512-T+OacGm69t8+1mt1sHlwhREiFiFgSeIGL3h11FIs8o2zKnOr5z2H9myzR432X8WuHGVQAOCMvDu53LCMBD0ZzQ== 278 | 279 | "@swc/core-win32-x64-msvc@1.3.53": 280 | version "1.3.53" 281 | resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.53.tgz#6dda89cdaa5fad14a25a8e2ed0076497ba3a8906" 282 | integrity sha512-uV1/GhROJ/SXzj+f+kKcVtR2GuAiggvbqepzZS46+G47okf6229hr2T1fjmiwYyA75w9R3Bj/wil4UhodohOLg== 283 | 284 | "@swc/core@^1.3.42": 285 | version "1.3.53" 286 | resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.53.tgz#22c20bbd328e4a091eb015285aeffca4c66fd32c" 287 | integrity sha512-OM5nCfKDZXr1HjxD072Jlx5463tPX7xeY7NDSRE3X4KFlkRDFdyMWAyV3pet1oouOfUNrzzoVTAR4XSU8ytO6Q== 288 | optionalDependencies: 289 | "@swc/core-darwin-arm64" "1.3.53" 290 | "@swc/core-darwin-x64" "1.3.53" 291 | "@swc/core-linux-arm-gnueabihf" "1.3.53" 292 | "@swc/core-linux-arm64-gnu" "1.3.53" 293 | "@swc/core-linux-arm64-musl" "1.3.53" 294 | "@swc/core-linux-x64-gnu" "1.3.53" 295 | "@swc/core-linux-x64-musl" "1.3.53" 296 | "@swc/core-win32-arm64-msvc" "1.3.53" 297 | "@swc/core-win32-ia32-msvc" "1.3.53" 298 | "@swc/core-win32-x64-msvc" "1.3.53" 299 | 300 | "@types/file-saver@^2.0.5": 301 | version "2.0.5" 302 | resolved "https://registry.yarnpkg.com/@types/file-saver/-/file-saver-2.0.5.tgz#9ee342a5d1314bb0928375424a2f162f97c310c7" 303 | integrity sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ== 304 | 305 | "@types/json-schema@^7.0.9": 306 | version "7.0.11" 307 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 308 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 309 | 310 | "@types/prop-types@*": 311 | version "15.7.5" 312 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 313 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 314 | 315 | "@types/react-dom@^18.0.11": 316 | version "18.0.11" 317 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" 318 | integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== 319 | dependencies: 320 | "@types/react" "*" 321 | 322 | "@types/react@*", "@types/react@^18.0.28": 323 | version "18.0.38" 324 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.38.tgz#02a23bef8848b360a0d1dceef4432c15c21c600c" 325 | integrity sha512-ExsidLLSzYj4cvaQjGnQCk4HFfVT9+EZ9XZsQ8Hsrcn8QNgXtpZ3m9vSIC2MWtx7jHictK6wYhQgGh6ic58oOw== 326 | dependencies: 327 | "@types/prop-types" "*" 328 | "@types/scheduler" "*" 329 | csstype "^3.0.2" 330 | 331 | "@types/scheduler@*": 332 | version "0.16.3" 333 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" 334 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== 335 | 336 | "@types/semver@^7.3.12": 337 | version "7.3.13" 338 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" 339 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 340 | 341 | "@typescript-eslint/eslint-plugin@^5.57.1": 342 | version "5.59.0" 343 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.0.tgz#c0e10eeb936debe5d1c3433cf36206a95befefd0" 344 | integrity sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw== 345 | dependencies: 346 | "@eslint-community/regexpp" "^4.4.0" 347 | "@typescript-eslint/scope-manager" "5.59.0" 348 | "@typescript-eslint/type-utils" "5.59.0" 349 | "@typescript-eslint/utils" "5.59.0" 350 | debug "^4.3.4" 351 | grapheme-splitter "^1.0.4" 352 | ignore "^5.2.0" 353 | natural-compare-lite "^1.4.0" 354 | semver "^7.3.7" 355 | tsutils "^3.21.0" 356 | 357 | "@typescript-eslint/parser@^5.57.1": 358 | version "5.59.0" 359 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.0.tgz#0ad7cd019346cc5d150363f64869eca10ca9977c" 360 | integrity sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w== 361 | dependencies: 362 | "@typescript-eslint/scope-manager" "5.59.0" 363 | "@typescript-eslint/types" "5.59.0" 364 | "@typescript-eslint/typescript-estree" "5.59.0" 365 | debug "^4.3.4" 366 | 367 | "@typescript-eslint/scope-manager@5.59.0": 368 | version "5.59.0" 369 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.0.tgz#86501d7a17885710b6716a23be2e93fc54a4fe8c" 370 | integrity sha512-tsoldKaMh7izN6BvkK6zRMINj4Z2d6gGhO2UsI8zGZY3XhLq1DndP3Ycjhi1JwdwPRwtLMW4EFPgpuKhbCGOvQ== 371 | dependencies: 372 | "@typescript-eslint/types" "5.59.0" 373 | "@typescript-eslint/visitor-keys" "5.59.0" 374 | 375 | "@typescript-eslint/type-utils@5.59.0": 376 | version "5.59.0" 377 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.0.tgz#8e8d1420fc2265989fa3a0d897bde37f3851e8c9" 378 | integrity sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA== 379 | dependencies: 380 | "@typescript-eslint/typescript-estree" "5.59.0" 381 | "@typescript-eslint/utils" "5.59.0" 382 | debug "^4.3.4" 383 | tsutils "^3.21.0" 384 | 385 | "@typescript-eslint/types@5.59.0": 386 | version "5.59.0" 387 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.0.tgz#3fcdac7dbf923ec5251545acdd9f1d42d7c4fe32" 388 | integrity sha512-yR2h1NotF23xFFYKHZs17QJnB51J/s+ud4PYU4MqdZbzeNxpgUr05+dNeCN/bb6raslHvGdd6BFCkVhpPk/ZeA== 389 | 390 | "@typescript-eslint/typescript-estree@5.59.0": 391 | version "5.59.0" 392 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.0.tgz#8869156ee1dcfc5a95be3ed0e2809969ea28e965" 393 | integrity sha512-sUNnktjmI8DyGzPdZ8dRwW741zopGxltGs/SAPgGL/AAgDpiLsCFLcMNSpbfXfmnNeHmK9h3wGmCkGRGAoUZAg== 394 | dependencies: 395 | "@typescript-eslint/types" "5.59.0" 396 | "@typescript-eslint/visitor-keys" "5.59.0" 397 | debug "^4.3.4" 398 | globby "^11.1.0" 399 | is-glob "^4.0.3" 400 | semver "^7.3.7" 401 | tsutils "^3.21.0" 402 | 403 | "@typescript-eslint/utils@5.59.0": 404 | version "5.59.0" 405 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.0.tgz#063d066b3bc4850c18872649ed0da9ee72d833d5" 406 | integrity sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA== 407 | dependencies: 408 | "@eslint-community/eslint-utils" "^4.2.0" 409 | "@types/json-schema" "^7.0.9" 410 | "@types/semver" "^7.3.12" 411 | "@typescript-eslint/scope-manager" "5.59.0" 412 | "@typescript-eslint/types" "5.59.0" 413 | "@typescript-eslint/typescript-estree" "5.59.0" 414 | eslint-scope "^5.1.1" 415 | semver "^7.3.7" 416 | 417 | "@typescript-eslint/visitor-keys@5.59.0": 418 | version "5.59.0" 419 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.0.tgz#a59913f2bf0baeb61b5cfcb6135d3926c3854365" 420 | integrity sha512-qZ3iXxQhanchCeaExlKPV3gDQFxMUmU35xfd5eCXB6+kUw1TUAbIy2n7QIrwz9s98DQLzNWyHp61fY0da4ZcbA== 421 | dependencies: 422 | "@typescript-eslint/types" "5.59.0" 423 | eslint-visitor-keys "^3.3.0" 424 | 425 | "@vitejs/plugin-react-swc@^3.0.0": 426 | version "3.3.0" 427 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.0.tgz#d443a4bbb423542c5a089c65a58dca597170c549" 428 | integrity sha512-Ycg+n2eyCOTpn/wRy+evVo859+hw7qCj9iaX5CMny6x1fx1Uoq0xBG+a98lFtwLNGfGEnpI0F26YigRuxCRkwg== 429 | dependencies: 430 | "@swc/core" "^1.3.42" 431 | 432 | acorn-jsx@^5.3.2: 433 | version "5.3.2" 434 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 435 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 436 | 437 | acorn@^8.8.0: 438 | version "8.8.2" 439 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 440 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 441 | 442 | ajv@^6.10.0, ajv@^6.12.4: 443 | version "6.12.6" 444 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 445 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 446 | dependencies: 447 | fast-deep-equal "^3.1.1" 448 | fast-json-stable-stringify "^2.0.0" 449 | json-schema-traverse "^0.4.1" 450 | uri-js "^4.2.2" 451 | 452 | ansi-regex@^5.0.1: 453 | version "5.0.1" 454 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 455 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 456 | 457 | ansi-styles@^4.1.0: 458 | version "4.3.0" 459 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 460 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 461 | dependencies: 462 | color-convert "^2.0.1" 463 | 464 | any-promise@^1.0.0: 465 | version "1.3.0" 466 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 467 | integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== 468 | 469 | anymatch@~3.1.2: 470 | version "3.1.3" 471 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 472 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 473 | dependencies: 474 | normalize-path "^3.0.0" 475 | picomatch "^2.0.4" 476 | 477 | arg@^5.0.2: 478 | version "5.0.2" 479 | resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" 480 | integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== 481 | 482 | argparse@^2.0.1: 483 | version "2.0.1" 484 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 485 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 486 | 487 | array-union@^2.1.0: 488 | version "2.1.0" 489 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 490 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 491 | 492 | asynckit@^0.4.0: 493 | version "0.4.0" 494 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 495 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 496 | 497 | autoprefixer@^10.4.14: 498 | version "10.4.14" 499 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" 500 | integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== 501 | dependencies: 502 | browserslist "^4.21.5" 503 | caniuse-lite "^1.0.30001464" 504 | fraction.js "^4.2.0" 505 | normalize-range "^0.1.2" 506 | picocolors "^1.0.0" 507 | postcss-value-parser "^4.2.0" 508 | 509 | axios@^1.4.0: 510 | version "1.4.0" 511 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f" 512 | integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== 513 | dependencies: 514 | follow-redirects "^1.15.0" 515 | form-data "^4.0.0" 516 | proxy-from-env "^1.1.0" 517 | 518 | balanced-match@^1.0.0: 519 | version "1.0.2" 520 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 521 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 522 | 523 | binary-extensions@^2.0.0: 524 | version "2.2.0" 525 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 526 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 527 | 528 | brace-expansion@^1.1.7: 529 | version "1.1.11" 530 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 531 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 532 | dependencies: 533 | balanced-match "^1.0.0" 534 | concat-map "0.0.1" 535 | 536 | braces@^3.0.2, braces@~3.0.2: 537 | version "3.0.2" 538 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 539 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 540 | dependencies: 541 | fill-range "^7.0.1" 542 | 543 | browserslist@^4.21.5: 544 | version "4.21.5" 545 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 546 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 547 | dependencies: 548 | caniuse-lite "^1.0.30001449" 549 | electron-to-chromium "^1.4.284" 550 | node-releases "^2.0.8" 551 | update-browserslist-db "^1.0.10" 552 | 553 | callsites@^3.0.0: 554 | version "3.1.0" 555 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 556 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 557 | 558 | camelcase-css@^2.0.1: 559 | version "2.0.1" 560 | resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 561 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 562 | 563 | caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: 564 | version "1.0.30001481" 565 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz#f58a717afe92f9e69d0e35ff64df596bfad93912" 566 | integrity sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ== 567 | 568 | chalk@^4.0.0: 569 | version "4.1.2" 570 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 571 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 572 | dependencies: 573 | ansi-styles "^4.1.0" 574 | supports-color "^7.1.0" 575 | 576 | chokidar@^3.5.3: 577 | version "3.5.3" 578 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 579 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 580 | dependencies: 581 | anymatch "~3.1.2" 582 | braces "~3.0.2" 583 | glob-parent "~5.1.2" 584 | is-binary-path "~2.1.0" 585 | is-glob "~4.0.1" 586 | normalize-path "~3.0.0" 587 | readdirp "~3.6.0" 588 | optionalDependencies: 589 | fsevents "~2.3.2" 590 | 591 | classnames@^2.3.2: 592 | version "2.3.2" 593 | resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" 594 | integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== 595 | 596 | color-convert@^2.0.1: 597 | version "2.0.1" 598 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 599 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 600 | dependencies: 601 | color-name "~1.1.4" 602 | 603 | color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4: 604 | version "1.1.4" 605 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 606 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 607 | 608 | color-string@^1.9.0: 609 | version "1.9.1" 610 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" 611 | integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== 612 | dependencies: 613 | color-name "^1.0.0" 614 | simple-swizzle "^0.2.2" 615 | 616 | color@^4.2: 617 | version "4.2.3" 618 | resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" 619 | integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== 620 | dependencies: 621 | color-convert "^2.0.1" 622 | color-string "^1.9.0" 623 | 624 | combined-stream@^1.0.8: 625 | version "1.0.8" 626 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 627 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 628 | dependencies: 629 | delayed-stream "~1.0.0" 630 | 631 | commander@^4.0.0: 632 | version "4.1.1" 633 | resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" 634 | integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 635 | 636 | concat-map@0.0.1: 637 | version "0.0.1" 638 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 639 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 640 | 641 | copy-image-clipboard@^2.1.2: 642 | version "2.1.2" 643 | resolved "https://registry.yarnpkg.com/copy-image-clipboard/-/copy-image-clipboard-2.1.2.tgz#7965038faa036b1aed451df207f14b52838286a1" 644 | integrity sha512-3VCXVl2IpFfOyD8drv9DozcNlwmqBqxOlsgkEGyVAzadjlPk1go8YNZyy8QmTnwHPxSFpeCR9OdsStEdVK7qDA== 645 | 646 | cross-spawn@^7.0.2: 647 | version "7.0.3" 648 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 649 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 650 | dependencies: 651 | path-key "^3.1.0" 652 | shebang-command "^2.0.0" 653 | which "^2.0.1" 654 | 655 | css-selector-tokenizer@^0.8.0: 656 | version "0.8.0" 657 | resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz#88267ef6238e64f2215ea2764b3e2cf498b845dd" 658 | integrity sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg== 659 | dependencies: 660 | cssesc "^3.0.0" 661 | fastparse "^1.1.2" 662 | 663 | cssesc@^3.0.0: 664 | version "3.0.0" 665 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 666 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 667 | 668 | csstype@^3.0.2: 669 | version "3.1.2" 670 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" 671 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== 672 | 673 | daisyui@^2.51.6: 674 | version "2.51.6" 675 | resolved "https://registry.yarnpkg.com/daisyui/-/daisyui-2.51.6.tgz#c91f5a782f2e991b973dfe9d17d7e93cd973b372" 676 | integrity sha512-JRqOKayuFCmWe4X4k6Qvx1y7V/VNao8U5eTSOhusOKIzCsYqf56+TCSe4d7zmqGE0V6JiLDYAT8JeoWUeRKFCw== 677 | dependencies: 678 | color "^4.2" 679 | css-selector-tokenizer "^0.8.0" 680 | postcss-js "^4.0.0" 681 | tailwindcss "^3" 682 | 683 | debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: 684 | version "4.3.4" 685 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 686 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 687 | dependencies: 688 | ms "2.1.2" 689 | 690 | deep-is@^0.1.3: 691 | version "0.1.4" 692 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 693 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 694 | 695 | delayed-stream@~1.0.0: 696 | version "1.0.0" 697 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 698 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 699 | 700 | didyoumean@^1.2.2: 701 | version "1.2.2" 702 | resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" 703 | integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 704 | 705 | dir-glob@^3.0.1: 706 | version "3.0.1" 707 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 708 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 709 | dependencies: 710 | path-type "^4.0.0" 711 | 712 | dlv@^1.1.3: 713 | version "1.1.3" 714 | resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" 715 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 716 | 717 | doctrine@^3.0.0: 718 | version "3.0.0" 719 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 720 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 721 | dependencies: 722 | esutils "^2.0.2" 723 | 724 | electron-to-chromium@^1.4.284: 725 | version "1.4.369" 726 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.369.tgz#a98d838cdd79be4471cd04e9b4dffe891d037874" 727 | integrity sha512-LfxbHXdA/S+qyoTEA4EbhxGjrxx7WK2h6yb5K2v0UCOufUKX+VZaHbl3svlzZfv9sGseym/g3Ne4DpsgRULmqg== 728 | 729 | esbuild@^0.17.5: 730 | version "0.17.18" 731 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.18.tgz#f4f8eb6d77384d68cd71c53eb6601c7efe05e746" 732 | integrity sha512-z1lix43jBs6UKjcZVKOw2xx69ffE2aG0PygLL5qJ9OS/gy0Ewd1gW/PUQIOIQGXBHWNywSc0floSKoMFF8aK2w== 733 | optionalDependencies: 734 | "@esbuild/android-arm" "0.17.18" 735 | "@esbuild/android-arm64" "0.17.18" 736 | "@esbuild/android-x64" "0.17.18" 737 | "@esbuild/darwin-arm64" "0.17.18" 738 | "@esbuild/darwin-x64" "0.17.18" 739 | "@esbuild/freebsd-arm64" "0.17.18" 740 | "@esbuild/freebsd-x64" "0.17.18" 741 | "@esbuild/linux-arm" "0.17.18" 742 | "@esbuild/linux-arm64" "0.17.18" 743 | "@esbuild/linux-ia32" "0.17.18" 744 | "@esbuild/linux-loong64" "0.17.18" 745 | "@esbuild/linux-mips64el" "0.17.18" 746 | "@esbuild/linux-ppc64" "0.17.18" 747 | "@esbuild/linux-riscv64" "0.17.18" 748 | "@esbuild/linux-s390x" "0.17.18" 749 | "@esbuild/linux-x64" "0.17.18" 750 | "@esbuild/netbsd-x64" "0.17.18" 751 | "@esbuild/openbsd-x64" "0.17.18" 752 | "@esbuild/sunos-x64" "0.17.18" 753 | "@esbuild/win32-arm64" "0.17.18" 754 | "@esbuild/win32-ia32" "0.17.18" 755 | "@esbuild/win32-x64" "0.17.18" 756 | 757 | escalade@^3.1.1: 758 | version "3.1.1" 759 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 760 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 761 | 762 | escape-string-regexp@^4.0.0: 763 | version "4.0.0" 764 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 765 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 766 | 767 | eslint-plugin-react-hooks@^4.6.0: 768 | version "4.6.0" 769 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" 770 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== 771 | 772 | eslint-plugin-react-refresh@^0.3.4: 773 | version "0.3.4" 774 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.4.tgz#586eeac5f4a95d2520824dba68511540e62c8491" 775 | integrity sha512-E0ViBglxSQAERBp6eTj5fPgtCRtDonnbCFiVQBhf4Dto2blJRxg1dFUMdMh7N6ljTI4UwPhHwYDQ3Dyo4m6bwA== 776 | 777 | eslint-scope@^5.1.1: 778 | version "5.1.1" 779 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 780 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 781 | dependencies: 782 | esrecurse "^4.3.0" 783 | estraverse "^4.1.1" 784 | 785 | eslint-scope@^7.2.0: 786 | version "7.2.0" 787 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 788 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 789 | dependencies: 790 | esrecurse "^4.3.0" 791 | estraverse "^5.2.0" 792 | 793 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.0: 794 | version "3.4.0" 795 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc" 796 | integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ== 797 | 798 | eslint@^8.38.0: 799 | version "8.39.0" 800 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.39.0.tgz#7fd20a295ef92d43809e914b70c39fd5a23cf3f1" 801 | integrity sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og== 802 | dependencies: 803 | "@eslint-community/eslint-utils" "^4.2.0" 804 | "@eslint-community/regexpp" "^4.4.0" 805 | "@eslint/eslintrc" "^2.0.2" 806 | "@eslint/js" "8.39.0" 807 | "@humanwhocodes/config-array" "^0.11.8" 808 | "@humanwhocodes/module-importer" "^1.0.1" 809 | "@nodelib/fs.walk" "^1.2.8" 810 | ajv "^6.10.0" 811 | chalk "^4.0.0" 812 | cross-spawn "^7.0.2" 813 | debug "^4.3.2" 814 | doctrine "^3.0.0" 815 | escape-string-regexp "^4.0.0" 816 | eslint-scope "^7.2.0" 817 | eslint-visitor-keys "^3.4.0" 818 | espree "^9.5.1" 819 | esquery "^1.4.2" 820 | esutils "^2.0.2" 821 | fast-deep-equal "^3.1.3" 822 | file-entry-cache "^6.0.1" 823 | find-up "^5.0.0" 824 | glob-parent "^6.0.2" 825 | globals "^13.19.0" 826 | grapheme-splitter "^1.0.4" 827 | ignore "^5.2.0" 828 | import-fresh "^3.0.0" 829 | imurmurhash "^0.1.4" 830 | is-glob "^4.0.0" 831 | is-path-inside "^3.0.3" 832 | js-sdsl "^4.1.4" 833 | js-yaml "^4.1.0" 834 | json-stable-stringify-without-jsonify "^1.0.1" 835 | levn "^0.4.1" 836 | lodash.merge "^4.6.2" 837 | minimatch "^3.1.2" 838 | natural-compare "^1.4.0" 839 | optionator "^0.9.1" 840 | strip-ansi "^6.0.1" 841 | strip-json-comments "^3.1.0" 842 | text-table "^0.2.0" 843 | 844 | espree@^9.5.1: 845 | version "9.5.1" 846 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.1.tgz#4f26a4d5f18905bf4f2e0bd99002aab807e96dd4" 847 | integrity sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg== 848 | dependencies: 849 | acorn "^8.8.0" 850 | acorn-jsx "^5.3.2" 851 | eslint-visitor-keys "^3.4.0" 852 | 853 | esquery@^1.4.2: 854 | version "1.5.0" 855 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 856 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 857 | dependencies: 858 | estraverse "^5.1.0" 859 | 860 | esrecurse@^4.3.0: 861 | version "4.3.0" 862 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 863 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 864 | dependencies: 865 | estraverse "^5.2.0" 866 | 867 | estraverse@^4.1.1: 868 | version "4.3.0" 869 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 870 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 871 | 872 | estraverse@^5.1.0, estraverse@^5.2.0: 873 | version "5.3.0" 874 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 875 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 876 | 877 | esutils@^2.0.2: 878 | version "2.0.3" 879 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 880 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 881 | 882 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 883 | version "3.1.3" 884 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 885 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 886 | 887 | fast-glob@^3.2.12, fast-glob@^3.2.9: 888 | version "3.2.12" 889 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 890 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 891 | dependencies: 892 | "@nodelib/fs.stat" "^2.0.2" 893 | "@nodelib/fs.walk" "^1.2.3" 894 | glob-parent "^5.1.2" 895 | merge2 "^1.3.0" 896 | micromatch "^4.0.4" 897 | 898 | fast-json-stable-stringify@^2.0.0: 899 | version "2.1.0" 900 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 901 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 902 | 903 | fast-levenshtein@^2.0.6: 904 | version "2.0.6" 905 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 906 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 907 | 908 | fastparse@^1.1.2: 909 | version "1.1.2" 910 | resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" 911 | integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== 912 | 913 | fastq@^1.6.0: 914 | version "1.15.0" 915 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 916 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 917 | dependencies: 918 | reusify "^1.0.4" 919 | 920 | file-entry-cache@^6.0.1: 921 | version "6.0.1" 922 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 923 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 924 | dependencies: 925 | flat-cache "^3.0.4" 926 | 927 | file-saver@^2.0.5: 928 | version "2.0.5" 929 | resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" 930 | integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== 931 | 932 | fill-range@^7.0.1: 933 | version "7.0.1" 934 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 935 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 936 | dependencies: 937 | to-regex-range "^5.0.1" 938 | 939 | find-up@^5.0.0: 940 | version "5.0.0" 941 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 942 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 943 | dependencies: 944 | locate-path "^6.0.0" 945 | path-exists "^4.0.0" 946 | 947 | flat-cache@^3.0.4: 948 | version "3.0.4" 949 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 950 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 951 | dependencies: 952 | flatted "^3.1.0" 953 | rimraf "^3.0.2" 954 | 955 | flatted@^3.1.0: 956 | version "3.2.7" 957 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" 958 | integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== 959 | 960 | follow-redirects@^1.15.0: 961 | version "1.15.2" 962 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 963 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 964 | 965 | form-data@^4.0.0: 966 | version "4.0.0" 967 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 968 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 969 | dependencies: 970 | asynckit "^0.4.0" 971 | combined-stream "^1.0.8" 972 | mime-types "^2.1.12" 973 | 974 | fraction.js@^4.2.0: 975 | version "4.2.0" 976 | resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" 977 | integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== 978 | 979 | fs.realpath@^1.0.0: 980 | version "1.0.0" 981 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 982 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 983 | 984 | fsevents@~2.3.2: 985 | version "2.3.2" 986 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 987 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 988 | 989 | function-bind@^1.1.1: 990 | version "1.1.1" 991 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 992 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 993 | 994 | glob-parent@^5.1.2, glob-parent@~5.1.2: 995 | version "5.1.2" 996 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 997 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 998 | dependencies: 999 | is-glob "^4.0.1" 1000 | 1001 | glob-parent@^6.0.2: 1002 | version "6.0.2" 1003 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1004 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1005 | dependencies: 1006 | is-glob "^4.0.3" 1007 | 1008 | glob@7.1.6: 1009 | version "7.1.6" 1010 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1011 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1012 | dependencies: 1013 | fs.realpath "^1.0.0" 1014 | inflight "^1.0.4" 1015 | inherits "2" 1016 | minimatch "^3.0.4" 1017 | once "^1.3.0" 1018 | path-is-absolute "^1.0.0" 1019 | 1020 | glob@^7.1.3: 1021 | version "7.2.3" 1022 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1023 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1024 | dependencies: 1025 | fs.realpath "^1.0.0" 1026 | inflight "^1.0.4" 1027 | inherits "2" 1028 | minimatch "^3.1.1" 1029 | once "^1.3.0" 1030 | path-is-absolute "^1.0.0" 1031 | 1032 | globals@^13.19.0: 1033 | version "13.20.0" 1034 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 1035 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 1036 | dependencies: 1037 | type-fest "^0.20.2" 1038 | 1039 | globby@^11.1.0: 1040 | version "11.1.0" 1041 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1042 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1043 | dependencies: 1044 | array-union "^2.1.0" 1045 | dir-glob "^3.0.1" 1046 | fast-glob "^3.2.9" 1047 | ignore "^5.2.0" 1048 | merge2 "^1.4.1" 1049 | slash "^3.0.0" 1050 | 1051 | grapheme-splitter@^1.0.4: 1052 | version "1.0.4" 1053 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 1054 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 1055 | 1056 | has-flag@^4.0.0: 1057 | version "4.0.0" 1058 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1059 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1060 | 1061 | has@^1.0.3: 1062 | version "1.0.3" 1063 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1064 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1065 | dependencies: 1066 | function-bind "^1.1.1" 1067 | 1068 | ignore@^5.2.0: 1069 | version "5.2.4" 1070 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 1071 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1072 | 1073 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1074 | version "3.3.0" 1075 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1076 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1077 | dependencies: 1078 | parent-module "^1.0.0" 1079 | resolve-from "^4.0.0" 1080 | 1081 | imurmurhash@^0.1.4: 1082 | version "0.1.4" 1083 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1084 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1085 | 1086 | inflight@^1.0.4: 1087 | version "1.0.6" 1088 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1089 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1090 | dependencies: 1091 | once "^1.3.0" 1092 | wrappy "1" 1093 | 1094 | inherits@2: 1095 | version "2.0.4" 1096 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1097 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1098 | 1099 | is-arrayish@^0.3.1: 1100 | version "0.3.2" 1101 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" 1102 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 1103 | 1104 | is-binary-path@~2.1.0: 1105 | version "2.1.0" 1106 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1107 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1108 | dependencies: 1109 | binary-extensions "^2.0.0" 1110 | 1111 | is-core-module@^2.11.0: 1112 | version "2.12.0" 1113 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" 1114 | integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== 1115 | dependencies: 1116 | has "^1.0.3" 1117 | 1118 | is-extglob@^2.1.1: 1119 | version "2.1.1" 1120 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1121 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1122 | 1123 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 1124 | version "4.0.3" 1125 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1126 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1127 | dependencies: 1128 | is-extglob "^2.1.1" 1129 | 1130 | is-number@^7.0.0: 1131 | version "7.0.0" 1132 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1133 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1134 | 1135 | is-path-inside@^3.0.3: 1136 | version "3.0.3" 1137 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1138 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1139 | 1140 | isexe@^2.0.0: 1141 | version "2.0.0" 1142 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1143 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1144 | 1145 | jiti@^1.17.2, jiti@^1.18.2: 1146 | version "1.18.2" 1147 | resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" 1148 | integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== 1149 | 1150 | js-sdsl@^4.1.4: 1151 | version "4.4.0" 1152 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" 1153 | integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== 1154 | 1155 | "js-tokens@^3.0.0 || ^4.0.0": 1156 | version "4.0.0" 1157 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1158 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1159 | 1160 | js-yaml@^4.1.0: 1161 | version "4.1.0" 1162 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1163 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1164 | dependencies: 1165 | argparse "^2.0.1" 1166 | 1167 | json-schema-traverse@^0.4.1: 1168 | version "0.4.1" 1169 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1170 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1171 | 1172 | json-stable-stringify-without-jsonify@^1.0.1: 1173 | version "1.0.1" 1174 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1175 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1176 | 1177 | levn@^0.4.1: 1178 | version "0.4.1" 1179 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1180 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1181 | dependencies: 1182 | prelude-ls "^1.2.1" 1183 | type-check "~0.4.0" 1184 | 1185 | lilconfig@^2.0.5, lilconfig@^2.0.6, lilconfig@^2.1.0: 1186 | version "2.1.0" 1187 | resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" 1188 | integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== 1189 | 1190 | lines-and-columns@^1.1.6: 1191 | version "1.2.4" 1192 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1193 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1194 | 1195 | locate-path@^6.0.0: 1196 | version "6.0.0" 1197 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1198 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1199 | dependencies: 1200 | p-locate "^5.0.0" 1201 | 1202 | lodash.merge@^4.6.2: 1203 | version "4.6.2" 1204 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1205 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1206 | 1207 | loose-envify@^1.1.0: 1208 | version "1.4.0" 1209 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1210 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1211 | dependencies: 1212 | js-tokens "^3.0.0 || ^4.0.0" 1213 | 1214 | lru-cache@^6.0.0: 1215 | version "6.0.0" 1216 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1217 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1218 | dependencies: 1219 | yallist "^4.0.0" 1220 | 1221 | merge2@^1.3.0, merge2@^1.4.1: 1222 | version "1.4.1" 1223 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1224 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1225 | 1226 | micromatch@^4.0.4, micromatch@^4.0.5: 1227 | version "4.0.5" 1228 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1229 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1230 | dependencies: 1231 | braces "^3.0.2" 1232 | picomatch "^2.3.1" 1233 | 1234 | mime-db@1.52.0: 1235 | version "1.52.0" 1236 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1237 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1238 | 1239 | mime-types@^2.1.12: 1240 | version "2.1.35" 1241 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1242 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1243 | dependencies: 1244 | mime-db "1.52.0" 1245 | 1246 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 1247 | version "3.1.2" 1248 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1249 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1250 | dependencies: 1251 | brace-expansion "^1.1.7" 1252 | 1253 | ms@2.1.2: 1254 | version "2.1.2" 1255 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1256 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1257 | 1258 | mz@^2.7.0: 1259 | version "2.7.0" 1260 | resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" 1261 | integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== 1262 | dependencies: 1263 | any-promise "^1.0.0" 1264 | object-assign "^4.0.1" 1265 | thenify-all "^1.0.0" 1266 | 1267 | nanoid@^3.3.6: 1268 | version "3.3.6" 1269 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 1270 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 1271 | 1272 | natural-compare-lite@^1.4.0: 1273 | version "1.4.0" 1274 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 1275 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1276 | 1277 | natural-compare@^1.4.0: 1278 | version "1.4.0" 1279 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1280 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1281 | 1282 | node-releases@^2.0.8: 1283 | version "2.0.10" 1284 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" 1285 | integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== 1286 | 1287 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1288 | version "3.0.0" 1289 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1290 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1291 | 1292 | normalize-range@^0.1.2: 1293 | version "0.1.2" 1294 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 1295 | integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 1296 | 1297 | object-assign@^4.0.1: 1298 | version "4.1.1" 1299 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1300 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1301 | 1302 | object-hash@^3.0.0: 1303 | version "3.0.0" 1304 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" 1305 | integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== 1306 | 1307 | once@^1.3.0: 1308 | version "1.4.0" 1309 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1310 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1311 | dependencies: 1312 | wrappy "1" 1313 | 1314 | optionator@^0.9.1: 1315 | version "0.9.1" 1316 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 1317 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1318 | dependencies: 1319 | deep-is "^0.1.3" 1320 | fast-levenshtein "^2.0.6" 1321 | levn "^0.4.1" 1322 | prelude-ls "^1.2.1" 1323 | type-check "^0.4.0" 1324 | word-wrap "^1.2.3" 1325 | 1326 | p-limit@^3.0.2: 1327 | version "3.1.0" 1328 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1329 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1330 | dependencies: 1331 | yocto-queue "^0.1.0" 1332 | 1333 | p-locate@^5.0.0: 1334 | version "5.0.0" 1335 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1336 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1337 | dependencies: 1338 | p-limit "^3.0.2" 1339 | 1340 | parent-module@^1.0.0: 1341 | version "1.0.1" 1342 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1343 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1344 | dependencies: 1345 | callsites "^3.0.0" 1346 | 1347 | path-exists@^4.0.0: 1348 | version "4.0.0" 1349 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1350 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1351 | 1352 | path-is-absolute@^1.0.0: 1353 | version "1.0.1" 1354 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1355 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1356 | 1357 | path-key@^3.1.0: 1358 | version "3.1.1" 1359 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1360 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1361 | 1362 | path-parse@^1.0.7: 1363 | version "1.0.7" 1364 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1365 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1366 | 1367 | path-type@^4.0.0: 1368 | version "4.0.0" 1369 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1370 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1371 | 1372 | picocolors@^1.0.0: 1373 | version "1.0.0" 1374 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1375 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1376 | 1377 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1378 | version "2.3.1" 1379 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1380 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1381 | 1382 | pify@^2.3.0: 1383 | version "2.3.0" 1384 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1385 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 1386 | 1387 | pirates@^4.0.1: 1388 | version "4.0.5" 1389 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" 1390 | integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== 1391 | 1392 | postcss-import@^14.1.0: 1393 | version "14.1.0" 1394 | resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" 1395 | integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== 1396 | dependencies: 1397 | postcss-value-parser "^4.0.0" 1398 | read-cache "^1.0.0" 1399 | resolve "^1.1.7" 1400 | 1401 | postcss-import@^15.1.0: 1402 | version "15.1.0" 1403 | resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" 1404 | integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== 1405 | dependencies: 1406 | postcss-value-parser "^4.0.0" 1407 | read-cache "^1.0.0" 1408 | resolve "^1.1.7" 1409 | 1410 | postcss-js@^4.0.0, postcss-js@^4.0.1: 1411 | version "4.0.1" 1412 | resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" 1413 | integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== 1414 | dependencies: 1415 | camelcase-css "^2.0.1" 1416 | 1417 | postcss-load-config@^3.1.4: 1418 | version "3.1.4" 1419 | resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" 1420 | integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== 1421 | dependencies: 1422 | lilconfig "^2.0.5" 1423 | yaml "^1.10.2" 1424 | 1425 | postcss-load-config@^4.0.1: 1426 | version "4.0.1" 1427 | resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd" 1428 | integrity sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA== 1429 | dependencies: 1430 | lilconfig "^2.0.5" 1431 | yaml "^2.1.1" 1432 | 1433 | postcss-nested@6.0.0: 1434 | version "6.0.0" 1435 | resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" 1436 | integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== 1437 | dependencies: 1438 | postcss-selector-parser "^6.0.10" 1439 | 1440 | postcss-nested@^6.0.1: 1441 | version "6.0.1" 1442 | resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" 1443 | integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== 1444 | dependencies: 1445 | postcss-selector-parser "^6.0.11" 1446 | 1447 | postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: 1448 | version "6.0.11" 1449 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" 1450 | integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== 1451 | dependencies: 1452 | cssesc "^3.0.0" 1453 | util-deprecate "^1.0.2" 1454 | 1455 | postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: 1456 | version "4.2.0" 1457 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 1458 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1459 | 1460 | postcss@^8.0.9, postcss@^8.4.21, postcss@^8.4.23: 1461 | version "8.4.23" 1462 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.23.tgz#df0aee9ac7c5e53e1075c24a3613496f9e6552ab" 1463 | integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== 1464 | dependencies: 1465 | nanoid "^3.3.6" 1466 | picocolors "^1.0.0" 1467 | source-map-js "^1.0.2" 1468 | 1469 | prelude-ls@^1.2.1: 1470 | version "1.2.1" 1471 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1472 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1473 | 1474 | prettier@^2.8.8: 1475 | version "2.8.8" 1476 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1477 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1478 | 1479 | proxy-from-env@^1.1.0: 1480 | version "1.1.0" 1481 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 1482 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1483 | 1484 | punycode@^2.1.0: 1485 | version "2.3.0" 1486 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1487 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1488 | 1489 | queue-microtask@^1.2.2: 1490 | version "1.2.3" 1491 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1492 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1493 | 1494 | quick-lru@^5.1.1: 1495 | version "5.1.1" 1496 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 1497 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1498 | 1499 | react-dom@^18.2.0: 1500 | version "18.2.0" 1501 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 1502 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 1503 | dependencies: 1504 | loose-envify "^1.1.0" 1505 | scheduler "^0.23.0" 1506 | 1507 | react-router-dom@^6.10.0: 1508 | version "6.10.0" 1509 | resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.10.0.tgz#090ddc5c84dc41b583ce08468c4007c84245f61f" 1510 | integrity sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg== 1511 | dependencies: 1512 | "@remix-run/router" "1.5.0" 1513 | react-router "6.10.0" 1514 | 1515 | react-router@6.10.0: 1516 | version "6.10.0" 1517 | resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.10.0.tgz#230f824fde9dd0270781b5cb497912de32c0a971" 1518 | integrity sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ== 1519 | dependencies: 1520 | "@remix-run/router" "1.5.0" 1521 | 1522 | react@^18.2.0: 1523 | version "18.2.0" 1524 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 1525 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 1526 | dependencies: 1527 | loose-envify "^1.1.0" 1528 | 1529 | read-cache@^1.0.0: 1530 | version "1.0.0" 1531 | resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" 1532 | integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== 1533 | dependencies: 1534 | pify "^2.3.0" 1535 | 1536 | readdirp@~3.6.0: 1537 | version "3.6.0" 1538 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1539 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1540 | dependencies: 1541 | picomatch "^2.2.1" 1542 | 1543 | resolve-from@^4.0.0: 1544 | version "4.0.0" 1545 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1546 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1547 | 1548 | resolve@^1.1.7, resolve@^1.22.1, resolve@^1.22.2: 1549 | version "1.22.2" 1550 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 1551 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 1552 | dependencies: 1553 | is-core-module "^2.11.0" 1554 | path-parse "^1.0.7" 1555 | supports-preserve-symlinks-flag "^1.0.0" 1556 | 1557 | reusify@^1.0.4: 1558 | version "1.0.4" 1559 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1560 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1561 | 1562 | rimraf@^3.0.2: 1563 | version "3.0.2" 1564 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1565 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1566 | dependencies: 1567 | glob "^7.1.3" 1568 | 1569 | rollup@^3.20.2: 1570 | version "3.21.0" 1571 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.21.0.tgz#0a71517db56e150222670f88e5e7acfa4fede7c8" 1572 | integrity sha512-ANPhVcyeHvYdQMUyCbczy33nbLzI7RzrBje4uvNiTDJGIMtlKoOStmympwr9OtS1LZxiDmE2wvxHyVhoLtf1KQ== 1573 | optionalDependencies: 1574 | fsevents "~2.3.2" 1575 | 1576 | run-parallel@^1.1.9: 1577 | version "1.2.0" 1578 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1579 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1580 | dependencies: 1581 | queue-microtask "^1.2.2" 1582 | 1583 | scheduler@^0.23.0: 1584 | version "0.23.0" 1585 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 1586 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1587 | dependencies: 1588 | loose-envify "^1.1.0" 1589 | 1590 | semver@^7.3.7: 1591 | version "7.5.0" 1592 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" 1593 | integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== 1594 | dependencies: 1595 | lru-cache "^6.0.0" 1596 | 1597 | shebang-command@^2.0.0: 1598 | version "2.0.0" 1599 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1600 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1601 | dependencies: 1602 | shebang-regex "^3.0.0" 1603 | 1604 | shebang-regex@^3.0.0: 1605 | version "3.0.0" 1606 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1607 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1608 | 1609 | simple-swizzle@^0.2.2: 1610 | version "0.2.2" 1611 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" 1612 | integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== 1613 | dependencies: 1614 | is-arrayish "^0.3.1" 1615 | 1616 | slash@^3.0.0: 1617 | version "3.0.0" 1618 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1619 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1620 | 1621 | source-map-js@^1.0.2: 1622 | version "1.0.2" 1623 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1624 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1625 | 1626 | strip-ansi@^6.0.1: 1627 | version "6.0.1" 1628 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1629 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1630 | dependencies: 1631 | ansi-regex "^5.0.1" 1632 | 1633 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1634 | version "3.1.1" 1635 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1636 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1637 | 1638 | sucrase@^3.29.0, sucrase@^3.32.0: 1639 | version "3.32.0" 1640 | resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.32.0.tgz#c4a95e0f1e18b6847127258a75cf360bc568d4a7" 1641 | integrity sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ== 1642 | dependencies: 1643 | "@jridgewell/gen-mapping" "^0.3.2" 1644 | commander "^4.0.0" 1645 | glob "7.1.6" 1646 | lines-and-columns "^1.1.6" 1647 | mz "^2.7.0" 1648 | pirates "^4.0.1" 1649 | ts-interface-checker "^0.1.9" 1650 | 1651 | supports-color@^7.1.0: 1652 | version "7.2.0" 1653 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1654 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1655 | dependencies: 1656 | has-flag "^4.0.0" 1657 | 1658 | supports-preserve-symlinks-flag@^1.0.0: 1659 | version "1.0.0" 1660 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1661 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1662 | 1663 | tailwindcss@^3: 1664 | version "3.3.2" 1665 | resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.2.tgz#2f9e35d715fdf0bbf674d90147a0684d7054a2d3" 1666 | integrity sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w== 1667 | dependencies: 1668 | "@alloc/quick-lru" "^5.2.0" 1669 | arg "^5.0.2" 1670 | chokidar "^3.5.3" 1671 | didyoumean "^1.2.2" 1672 | dlv "^1.1.3" 1673 | fast-glob "^3.2.12" 1674 | glob-parent "^6.0.2" 1675 | is-glob "^4.0.3" 1676 | jiti "^1.18.2" 1677 | lilconfig "^2.1.0" 1678 | micromatch "^4.0.5" 1679 | normalize-path "^3.0.0" 1680 | object-hash "^3.0.0" 1681 | picocolors "^1.0.0" 1682 | postcss "^8.4.23" 1683 | postcss-import "^15.1.0" 1684 | postcss-js "^4.0.1" 1685 | postcss-load-config "^4.0.1" 1686 | postcss-nested "^6.0.1" 1687 | postcss-selector-parser "^6.0.11" 1688 | postcss-value-parser "^4.2.0" 1689 | resolve "^1.22.2" 1690 | sucrase "^3.32.0" 1691 | 1692 | tailwindcss@^3.3.1: 1693 | version "3.3.1" 1694 | resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.1.tgz#b6662fab6a9b704779e48d083a9fef5a81d2b81e" 1695 | integrity sha512-Vkiouc41d4CEq0ujXl6oiGFQ7bA3WEhUZdTgXAhtKxSy49OmKs8rEfQmupsfF0IGW8fv2iQkp1EVUuapCFrZ9g== 1696 | dependencies: 1697 | arg "^5.0.2" 1698 | chokidar "^3.5.3" 1699 | color-name "^1.1.4" 1700 | didyoumean "^1.2.2" 1701 | dlv "^1.1.3" 1702 | fast-glob "^3.2.12" 1703 | glob-parent "^6.0.2" 1704 | is-glob "^4.0.3" 1705 | jiti "^1.17.2" 1706 | lilconfig "^2.0.6" 1707 | micromatch "^4.0.5" 1708 | normalize-path "^3.0.0" 1709 | object-hash "^3.0.0" 1710 | picocolors "^1.0.0" 1711 | postcss "^8.0.9" 1712 | postcss-import "^14.1.0" 1713 | postcss-js "^4.0.0" 1714 | postcss-load-config "^3.1.4" 1715 | postcss-nested "6.0.0" 1716 | postcss-selector-parser "^6.0.11" 1717 | postcss-value-parser "^4.2.0" 1718 | quick-lru "^5.1.1" 1719 | resolve "^1.22.1" 1720 | sucrase "^3.29.0" 1721 | 1722 | text-table@^0.2.0: 1723 | version "0.2.0" 1724 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1725 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 1726 | 1727 | thenify-all@^1.0.0: 1728 | version "1.6.0" 1729 | resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" 1730 | integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== 1731 | dependencies: 1732 | thenify ">= 3.1.0 < 4" 1733 | 1734 | "thenify@>= 3.1.0 < 4": 1735 | version "3.3.1" 1736 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" 1737 | integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== 1738 | dependencies: 1739 | any-promise "^1.0.0" 1740 | 1741 | to-regex-range@^5.0.1: 1742 | version "5.0.1" 1743 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1744 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1745 | dependencies: 1746 | is-number "^7.0.0" 1747 | 1748 | ts-interface-checker@^0.1.9: 1749 | version "0.1.13" 1750 | resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" 1751 | integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== 1752 | 1753 | tslib@^1.8.1: 1754 | version "1.14.1" 1755 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 1756 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1757 | 1758 | tsutils@^3.21.0: 1759 | version "3.21.0" 1760 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1761 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1762 | dependencies: 1763 | tslib "^1.8.1" 1764 | 1765 | type-check@^0.4.0, type-check@~0.4.0: 1766 | version "0.4.0" 1767 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1768 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1769 | dependencies: 1770 | prelude-ls "^1.2.1" 1771 | 1772 | type-fest@^0.20.2: 1773 | version "0.20.2" 1774 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1775 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1776 | 1777 | typescript@^5.0.2: 1778 | version "5.0.4" 1779 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" 1780 | integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== 1781 | 1782 | update-browserslist-db@^1.0.10: 1783 | version "1.0.11" 1784 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" 1785 | integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== 1786 | dependencies: 1787 | escalade "^3.1.1" 1788 | picocolors "^1.0.0" 1789 | 1790 | uri-js@^4.2.2: 1791 | version "4.4.1" 1792 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1793 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1794 | dependencies: 1795 | punycode "^2.1.0" 1796 | 1797 | util-deprecate@^1.0.2: 1798 | version "1.0.2" 1799 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1800 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1801 | 1802 | vite@^4.3.0: 1803 | version "4.3.1" 1804 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.1.tgz#9badb1377f995632cdcf05f32103414db6fbb95a" 1805 | integrity sha512-EPmfPLAI79Z/RofuMvkIS0Yr091T2ReUoXQqc5ppBX/sjFRhHKiPPF/R46cTdoci/XgeQpB23diiJxq5w30vdg== 1806 | dependencies: 1807 | esbuild "^0.17.5" 1808 | postcss "^8.4.21" 1809 | rollup "^3.20.2" 1810 | optionalDependencies: 1811 | fsevents "~2.3.2" 1812 | 1813 | which@^2.0.1: 1814 | version "2.0.2" 1815 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1816 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1817 | dependencies: 1818 | isexe "^2.0.0" 1819 | 1820 | word-wrap@^1.2.3: 1821 | version "1.2.3" 1822 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 1823 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 1824 | 1825 | wrappy@1: 1826 | version "1.0.2" 1827 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1828 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1829 | 1830 | yallist@^4.0.0: 1831 | version "4.0.0" 1832 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1833 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1834 | 1835 | yaml@^1.10.2: 1836 | version "1.10.2" 1837 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1838 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1839 | 1840 | yaml@^2.1.1: 1841 | version "2.2.2" 1842 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" 1843 | integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== 1844 | 1845 | yocto-queue@^0.1.0: 1846 | version "0.1.0" 1847 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1848 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1849 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ai-image", 3 | "version": "1.0.0", 4 | "main": "/server/src/app.ts", 5 | "repository": "https://github.com/dhavalCode/ai-image-generator", 6 | "author": "Dhaval Patel", 7 | "license": "MIT", 8 | "scripts": { 9 | "server-build": "cd server && yarn install && rimraf build && yarn build", 10 | "client-build": "cd client && yarn install && rimraf dist && yarn build", 11 | "build": "yarn install && yarn client-build && yarn server-build" 12 | }, 13 | "devDependencies": { 14 | "rimraf": "^5.0.0" 15 | } 16 | } -------------------------------------------------------------------------------- /server/.env.example: -------------------------------------------------------------------------------- 1 | MONGODB_URL= 2 | OPEN_AI_KEY= 3 | CLOUDINARY_CLOUD_NAME= 4 | CLOUDINARY_API_KEY= 5 | CLOUDINARY_API_SECRET= -------------------------------------------------------------------------------- /server/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build -------------------------------------------------------------------------------- /server/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "parser": "@typescript-eslint/parser", 4 | "plugins": ["@typescript-eslint", "unused-imports"], 5 | "extends": [ 6 | "eslint:recommended", 7 | "plugin:@typescript-eslint/eslint-recommended", 8 | "plugin:@typescript-eslint/recommended", 9 | "plugin:prettier/recommended" 10 | ], 11 | "rules": { 12 | "@typescript-eslint/no-explicit-any": "error", 13 | 14 | "prettier/prettier": "off", 15 | 16 | "@typescript-eslint/no-unused-vars": "off", 17 | 18 | "@typescript-eslint/explicit-module-boundary-types": "error", 19 | 20 | "unused-imports/no-unused-imports": "error", 21 | 22 | "unused-imports/no-unused-vars": [ 23 | "error", 24 | { 25 | "vars": "all", 26 | "varsIgnorePattern": "^_", 27 | "args": "after-used", 28 | "argsIgnorePattern": "^_" 29 | } 30 | ] 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | # These are some examples of commonly ignored file patterns. 2 | # You should customize this list as applicable to your project. 3 | # Learn more about .gitignore: 4 | # https://www.atlassian.com/git/tutorials/saving-changes/gitignore 5 | 6 | # Node artifact files 7 | node_modules/ 8 | dist/ 9 | 10 | build/ 11 | 12 | # Compiled Java class files 13 | *.class 14 | 15 | # Compiled Python bytecode 16 | *.py[cod] 17 | 18 | # Log files 19 | *.log 20 | 21 | # Package files 22 | *.jar 23 | 24 | # Maven 25 | target/ 26 | dist/ 27 | 28 | # JetBrains IDE 29 | .idea/ 30 | 31 | # Unit test reports 32 | TEST*.xml 33 | 34 | # Generated by MacOS 35 | .DS_Store 36 | 37 | # Generated by Windows 38 | Thumbs.db 39 | 40 | # Applications 41 | *.app 42 | *.exe 43 | *.war 44 | 45 | # Large media files 46 | *.mp4 47 | *.tiff 48 | *.avi 49 | *.flv 50 | *.mov 51 | *.wmv 52 | 53 | # Test folders 54 | backups 55 | 56 | # Enviroments 57 | .env 58 | 59 | #keycloak/realm-export.json 60 | #keycloak/TOPGRCSAAS-realm.json 61 | -------------------------------------------------------------------------------- /server/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true 6 | } 7 | -------------------------------------------------------------------------------- /server/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["src"], 3 | "ext": ".ts", 4 | "ignore": [], 5 | "exec": "ts-node ./src/app.ts" 6 | } 7 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ai-image", 3 | "version": "1.0.0", 4 | "main": "./src/app.ts", 5 | "repository": "https://github.com/dhavalCode/ai-image-generator", 6 | "author": "Dhaval Patel", 7 | "license": "MIT", 8 | "scripts": { 9 | "test": "jest --detectOpenHandles --forceExit", 10 | "lint": "eslint . --ext .ts", 11 | "build": "tsc --project ./", 12 | "start": "nodemon" 13 | }, 14 | "dependencies": { 15 | "body-parser": "^1.20.2", 16 | "cloudinary": "^1.36.1", 17 | "cors": "^2.8.5", 18 | "dotenv": "^16.0.3", 19 | "express": "^4.18.2", 20 | "joi": "^17.9.1", 21 | "mongoose": "^7.1.0", 22 | "openai": "^3.2.1" 23 | }, 24 | "devDependencies": { 25 | "@tsconfig/node16-strictest": "^1.0.4", 26 | "@types/body-parser": "^1.19.2", 27 | "@types/cors": "^2.8.13", 28 | "@types/express": "^4.17.17", 29 | "@types/node": "^18.16.0", 30 | "@typescript-eslint/eslint-plugin": "^5.59.0", 31 | "@typescript-eslint/parser": "^5.59.0", 32 | "eslint": "^8.39.0", 33 | "eslint-config-prettier": "^8.8.0", 34 | "eslint-plugin-prettier": "^4.2.1", 35 | "eslint-plugin-unused-imports": "^2.0.0", 36 | "nodemon": "^2.0.22", 37 | "prettier": "^2.8.8", 38 | "ts-node": "^10.9.1", 39 | "typescript": "^5.0.4" 40 | } 41 | } -------------------------------------------------------------------------------- /server/src/app.ts: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import express, { Application } from 'express' 3 | import cors from 'cors' 4 | // config 5 | import { validateEnv } from './config/config' 6 | import { dbConnect } from './config/dbConnect' 7 | // routes 8 | import { imageRouter } from './routes/image.route' 9 | // import { staticFileNames } from './config/staticFiles' 10 | 11 | export const app: Application = express() 12 | 13 | const port = 8080 14 | 15 | // checking environment variables 16 | validateEnv() 17 | 18 | // establish db connection 19 | dbConnect() 20 | 21 | app.disable('x-powered-by') 22 | 23 | app.use(express.json()) 24 | 25 | // app.use(express.static('public')) 26 | 27 | app.use(cors()) 28 | 29 | if (process.env.NODE_ENV == 'production') { 30 | app.use((req, res, next) => { 31 | if (req.header('x-forwarded-proto') !== 'https') { 32 | res.redirect(`https://${req.header('host')}${req.url}`) 33 | } else { 34 | next() 35 | } 36 | }) 37 | } 38 | 39 | app.use('/api/image', imageRouter) 40 | 41 | app.use('/health', (req, res) => res.json({ message: ' Server is running...' })) 42 | 43 | app.listen(port, () => { 44 | console.log(`🚀 Server running at http://localhost:${port}`) 45 | }) 46 | -------------------------------------------------------------------------------- /server/src/config/config.ts: -------------------------------------------------------------------------------- 1 | import EnvConfig from '../types/EnvConfig' 2 | import Joi from 'joi' 3 | import { config as cfg } from 'dotenv' 4 | import path from 'path' 5 | import { Configuration, OpenAIApi } from 'openai'; 6 | import { v2 as cloudinarySetup } from 'cloudinary'; 7 | 8 | 9 | cfg({ path: path.join(__dirname, '../../.env') }) 10 | 11 | 12 | const envVarsSchema = Joi.object() 13 | .keys({ 14 | MONGODB_URL: Joi.string().required().messages({ 'any.required': 'Provide Mongodb Url.' }), 15 | OPEN_AI_KEY: Joi.string().required().messages({ 'any.required': 'Provide OpenAI key.' }), 16 | CLOUDINARY_CLOUD_NAME: Joi.string().required().messages({ 'any.required': 'Provide cloudinary cloud name.' }), 17 | CLOUDINARY_API_KEY: Joi.string().required().messages({ 'any.required': 'Provide cloudinary api key.' }), 18 | CLOUDINARY_API_SECRET: Joi.string().required().messages({ 'any.required': 'Provide cloudinary api secret.' }), 19 | }) 20 | .unknown() 21 | 22 | const { value: envVars, error } = envVarsSchema 23 | .prefs({ errors: { label: 'key' } }) 24 | .validate(process.env) 25 | 26 | if (error) { 27 | throw new Error(`### ENV Setup Error ####\n ${error.message}`) 28 | } 29 | 30 | 31 | export const config: EnvConfig = { 32 | databaseUrl: envVars.MONGODB_URL, 33 | openAiKey: envVars.OPEN_AI_KEY, 34 | cloudinary: { 35 | name: envVars.CLOUDINARY_CLOUD_NAME, 36 | apiKey: envVars.CLOUDINARY_API_KEY, 37 | apiSecret: envVars.CLOUDINARY_API_SECRET 38 | } 39 | } 40 | 41 | export const validateEnv = (): void => { 42 | const { error } = envVarsSchema 43 | .prefs({ errors: { label: 'key' } }) 44 | .validate(process.env) 45 | 46 | if (error) { 47 | throw new Error(`### ENV Setup Error ####\n ${error.message}`) 48 | } 49 | } 50 | 51 | // Open AI Setup 52 | 53 | const configuration = new Configuration({ 54 | apiKey: config.openAiKey, 55 | }); 56 | 57 | export const openai = new OpenAIApi(configuration); 58 | 59 | // Cloudinary Setup 60 | 61 | cloudinarySetup.config({ 62 | cloud_name: config.cloudinary.name, 63 | api_key: config.cloudinary.apiKey, 64 | api_secret: config.cloudinary.apiSecret, 65 | }); 66 | 67 | export const cloudinary = cloudinarySetup -------------------------------------------------------------------------------- /server/src/config/dbConnect.ts: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose' 2 | import { config } from './config' 3 | 4 | // mongodb connection 5 | 6 | export const dbConnect = (): void => { 7 | mongoose 8 | .connect(config.databaseUrl, {}) 9 | .then(() => console.log(`Database Connected Successfully`)) 10 | .catch((err) => { 11 | console.log('Database Connection error => ', err) 12 | process.exit(1) 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /server/src/controller/image.controller.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response } from 'express' 2 | import { cloudinary, openai } from '../config/config' 3 | import { createImage, findAllImages } from '../service/image.service' 4 | import ResponseHandler from '../utils/responseHandler' 5 | import { CreateImageRequestSizeEnum } from 'openai' 6 | 7 | export const fetchAllImages = async ( 8 | _req: Request, 9 | res: Response 10 | ): Promise => { 11 | try { 12 | const page = _req.query['page'] || 1 13 | 14 | const limit = _req.query['limit'] || 8 15 | 16 | const skip = Number(limit) * (Number(page) - 1) 17 | 18 | const images = await findAllImages(+limit, skip) 19 | 20 | ResponseHandler.success(res, images) 21 | } catch (error) { 22 | // console.log('Error :', error) 23 | ResponseHandler.serverError(res, error) 24 | } 25 | } 26 | 27 | export const generateImage = async ( 28 | req: Request, 29 | res: Response 30 | ): Promise => { 31 | const { prompt, size } = req.body 32 | 33 | if (!prompt || prompt === '') { 34 | ResponseHandler.badRequest(res, '', 'Prompt is required.') 35 | } 36 | 37 | let imageSize 38 | 39 | switch (size) { 40 | case 'Small': 41 | imageSize = CreateImageRequestSizeEnum._256x256 42 | break 43 | case 'Medium': 44 | imageSize = CreateImageRequestSizeEnum._512x512 45 | break 46 | case 'Large': 47 | imageSize = CreateImageRequestSizeEnum._1024x1024 48 | break 49 | 50 | default: 51 | imageSize = CreateImageRequestSizeEnum._256x256 52 | break 53 | } 54 | 55 | try { 56 | const aiResponse = await openai.createImage({ 57 | prompt, 58 | n: 1, 59 | size: imageSize, 60 | }) 61 | 62 | const image = aiResponse.data.data[0].url 63 | 64 | if (!image) { 65 | ResponseHandler.serverError( 66 | res, 67 | '', 68 | 'Something went wrong while generating image' 69 | ) 70 | } 71 | 72 | const uploadedImage = await cloudinary.uploader.upload(image || '') 73 | 74 | const imageUrl = uploadedImage.url.replace(/^http:/, 'https:') 75 | 76 | await createImage({ 77 | imageUrl, 78 | prompt, 79 | }) 80 | 81 | ResponseHandler.created(res, { imageUrl }) 82 | } catch (error: unknown) { 83 | // console.log('Error :', error) 84 | ResponseHandler.serverError(res, error) 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /server/src/models/image.schema.ts: -------------------------------------------------------------------------------- 1 | import { Schema, model } from 'mongoose' 2 | 3 | interface ImageModel { 4 | prompt: string 5 | imageUrl: string 6 | } 7 | 8 | const imageSchema = new Schema( 9 | { 10 | prompt: { 11 | type: String, 12 | require: true, 13 | }, 14 | imageUrl: { 15 | type: String, 16 | require: true, 17 | }, 18 | }, 19 | { 20 | timestamps: true, 21 | } 22 | ) 23 | 24 | const Image = model('images', imageSchema) 25 | 26 | export default Image 27 | -------------------------------------------------------------------------------- /server/src/routes/image.route.ts: -------------------------------------------------------------------------------- 1 | import { Router } from 'express' 2 | import { 3 | fetchAllImages, generateImage 4 | } from '../controller/image.controller' 5 | 6 | export const imageRouter = Router() 7 | 8 | imageRouter.get('/all', fetchAllImages) 9 | 10 | imageRouter.post('/generate', generateImage) 11 | -------------------------------------------------------------------------------- /server/src/service/image.service.ts: -------------------------------------------------------------------------------- 1 | import { ImageInput, ImageOutput } from '../types/Image' 2 | import Image from '../models/image.schema' 3 | 4 | export const createImage = async (input: ImageInput): Promise => { 5 | const { imageUrl, prompt } = input 6 | 7 | const newImage = new Image({ 8 | imageUrl, 9 | prompt, 10 | }) 11 | 12 | return newImage.save() as Promise 13 | } 14 | 15 | export const findAllImages = async ( 16 | limit: number, 17 | skip: number 18 | ): Promise => { 19 | return Image.find().skip(skip).limit(limit).sort({ createdAt: -1 }).exec() 20 | } -------------------------------------------------------------------------------- /server/src/types/EnvConfig.ts: -------------------------------------------------------------------------------- 1 | type EnvConfig = { 2 | databaseUrl: string 3 | openAiKey: string 4 | cloudinary: { 5 | name: string 6 | apiKey: string 7 | apiSecret: string 8 | } 9 | } 10 | 11 | 12 | export default EnvConfig -------------------------------------------------------------------------------- /server/src/types/Image.ts: -------------------------------------------------------------------------------- 1 | import { Document } from 'mongoose' 2 | 3 | export type ImageInput = { 4 | prompt: string 5 | imageUrl: string 6 | } 7 | 8 | export interface ImageOutput extends Document { 9 | imageUrl: string 10 | prompt: string 11 | createdAt: Date 12 | updatedAt: Date 13 | } 14 | -------------------------------------------------------------------------------- /server/src/utils/responseHandler.ts: -------------------------------------------------------------------------------- 1 | import { Response } from "express"; 2 | 3 | class ResponseHandler { 4 | static success = (res: Response, data: unknown, message = ""): unknown => { 5 | return res.status(200).json({ 6 | success: true, 7 | message, 8 | code: 200, 9 | data, 10 | }); 11 | }; 12 | 13 | static created = (res: Response, data: unknown, message = ""): unknown => { 14 | return res.status(201).json({ 15 | success: true, 16 | message, 17 | code: 201, 18 | data, 19 | }); 20 | }; 21 | 22 | static serverError = (res: Response, error: unknown, message = "Something went wrong"): unknown => { 23 | return res.status(500).json({ 24 | success: false, 25 | message, 26 | code: 500, 27 | error, 28 | }); 29 | }; 30 | 31 | static badRequest = (res: Response, error: unknown, message = "Bad Request"): unknown => { 32 | return res.status(400).json({ 33 | success: false, 34 | message, 35 | code: 400, 36 | error, 37 | }); 38 | }; 39 | 40 | static notFound = (res: Response, message: string): unknown => { 41 | return res.status(404).json({ 42 | success: false, 43 | message, 44 | code: 404, 45 | }); 46 | }; 47 | 48 | static unAuthorized = (res: Response, message: string): unknown => { 49 | return res.status(401).json({ 50 | success: false, 51 | message, 52 | code: 401, 53 | }); 54 | }; 55 | } 56 | 57 | export default ResponseHandler 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/node16/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "es2017", 5 | "module": "commonjs", 6 | "sourceMap": true, 7 | "outDir": "build", 8 | "rootDir": "src", 9 | "moduleResolution": "node", 10 | "baseUrl": ".", 11 | "paths": { 12 | "*": ["node_modules/*"] 13 | }, 14 | "experimentalDecorators": true, 15 | "emitDecoratorMetadata": true, 16 | "noUncheckedIndexedAccess": false, 17 | "exactOptionalPropertyTypes": false 18 | }, 19 | 20 | "include": ["src/**/*"], 21 | "exclude": ["node_modules"] 22 | } 23 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@isaacs/cliui@^8.0.2": 6 | version "8.0.2" 7 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" 8 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== 9 | dependencies: 10 | string-width "^5.1.2" 11 | string-width-cjs "npm:string-width@^4.2.0" 12 | strip-ansi "^7.0.1" 13 | strip-ansi-cjs "npm:strip-ansi@^6.0.1" 14 | wrap-ansi "^8.1.0" 15 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" 16 | 17 | "@pkgjs/parseargs@^0.11.0": 18 | version "0.11.0" 19 | resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" 20 | integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== 21 | 22 | ansi-regex@^5.0.1: 23 | version "5.0.1" 24 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 25 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 26 | 27 | ansi-regex@^6.0.1: 28 | version "6.0.1" 29 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" 30 | integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== 31 | 32 | ansi-styles@^4.0.0: 33 | version "4.3.0" 34 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 35 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 36 | dependencies: 37 | color-convert "^2.0.1" 38 | 39 | ansi-styles@^6.1.0: 40 | version "6.2.1" 41 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 42 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 43 | 44 | balanced-match@^1.0.0: 45 | version "1.0.2" 46 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 47 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 48 | 49 | brace-expansion@^2.0.1: 50 | version "2.0.1" 51 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 52 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 53 | dependencies: 54 | balanced-match "^1.0.0" 55 | 56 | color-convert@^2.0.1: 57 | version "2.0.1" 58 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 59 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 60 | dependencies: 61 | color-name "~1.1.4" 62 | 63 | color-name@~1.1.4: 64 | version "1.1.4" 65 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 66 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 67 | 68 | cross-spawn@^7.0.0: 69 | version "7.0.3" 70 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 71 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 72 | dependencies: 73 | path-key "^3.1.0" 74 | shebang-command "^2.0.0" 75 | which "^2.0.1" 76 | 77 | eastasianwidth@^0.2.0: 78 | version "0.2.0" 79 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" 80 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== 81 | 82 | emoji-regex@^8.0.0: 83 | version "8.0.0" 84 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 85 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 86 | 87 | emoji-regex@^9.2.2: 88 | version "9.2.2" 89 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" 90 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== 91 | 92 | foreground-child@^3.1.0: 93 | version "3.1.1" 94 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" 95 | integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== 96 | dependencies: 97 | cross-spawn "^7.0.0" 98 | signal-exit "^4.0.1" 99 | 100 | glob@^10.0.0: 101 | version "10.2.2" 102 | resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.2.tgz#ce2468727de7e035e8ecf684669dc74d0526ab75" 103 | integrity sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ== 104 | dependencies: 105 | foreground-child "^3.1.0" 106 | jackspeak "^2.0.3" 107 | minimatch "^9.0.0" 108 | minipass "^5.0.0" 109 | path-scurry "^1.7.0" 110 | 111 | is-fullwidth-code-point@^3.0.0: 112 | version "3.0.0" 113 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 114 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 115 | 116 | isexe@^2.0.0: 117 | version "2.0.0" 118 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 119 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 120 | 121 | jackspeak@^2.0.3: 122 | version "2.2.0" 123 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.0.tgz#497cbaedc902ec3f31d5d61be804d2364ff9ddad" 124 | integrity sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ== 125 | dependencies: 126 | "@isaacs/cliui" "^8.0.2" 127 | optionalDependencies: 128 | "@pkgjs/parseargs" "^0.11.0" 129 | 130 | lru-cache@^9.0.0: 131 | version "9.1.1" 132 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" 133 | integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== 134 | 135 | minimatch@^9.0.0: 136 | version "9.0.0" 137 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.0.tgz#bfc8e88a1c40ffd40c172ddac3decb8451503b56" 138 | integrity sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w== 139 | dependencies: 140 | brace-expansion "^2.0.1" 141 | 142 | minipass@^5.0.0: 143 | version "5.0.0" 144 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" 145 | integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== 146 | 147 | path-key@^3.1.0: 148 | version "3.1.1" 149 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 150 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 151 | 152 | path-scurry@^1.7.0: 153 | version "1.7.0" 154 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" 155 | integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== 156 | dependencies: 157 | lru-cache "^9.0.0" 158 | minipass "^5.0.0" 159 | 160 | rimraf@^5.0.0: 161 | version "5.0.0" 162 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.0.tgz#5bda14e410d7e4dd522154891395802ce032c2cb" 163 | integrity sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g== 164 | dependencies: 165 | glob "^10.0.0" 166 | 167 | shebang-command@^2.0.0: 168 | version "2.0.0" 169 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 170 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 171 | dependencies: 172 | shebang-regex "^3.0.0" 173 | 174 | shebang-regex@^3.0.0: 175 | version "3.0.0" 176 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 177 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 178 | 179 | signal-exit@^4.0.1: 180 | version "4.0.1" 181 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" 182 | integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== 183 | 184 | "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: 185 | name string-width-cjs 186 | version "4.2.3" 187 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 188 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 189 | dependencies: 190 | emoji-regex "^8.0.0" 191 | is-fullwidth-code-point "^3.0.0" 192 | strip-ansi "^6.0.1" 193 | 194 | string-width@^5.0.1, string-width@^5.1.2: 195 | version "5.1.2" 196 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" 197 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== 198 | dependencies: 199 | eastasianwidth "^0.2.0" 200 | emoji-regex "^9.2.2" 201 | strip-ansi "^7.0.1" 202 | 203 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: 204 | name strip-ansi-cjs 205 | version "6.0.1" 206 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 207 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 208 | dependencies: 209 | ansi-regex "^5.0.1" 210 | 211 | strip-ansi@^7.0.1: 212 | version "7.0.1" 213 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" 214 | integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== 215 | dependencies: 216 | ansi-regex "^6.0.1" 217 | 218 | which@^2.0.1: 219 | version "2.0.2" 220 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 221 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 222 | dependencies: 223 | isexe "^2.0.0" 224 | 225 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 226 | version "7.0.0" 227 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 228 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 229 | dependencies: 230 | ansi-styles "^4.0.0" 231 | string-width "^4.1.0" 232 | strip-ansi "^6.0.0" 233 | 234 | wrap-ansi@^8.1.0: 235 | version "8.1.0" 236 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 237 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== 238 | dependencies: 239 | ansi-styles "^6.1.0" 240 | string-width "^5.0.1" 241 | strip-ansi "^7.0.1" 242 | --------------------------------------------------------------------------------