├── .gitignore ├── README.md ├── jsconfig.json ├── lib └── dbConnect.js ├── model └── ShortUrl.js ├── next.config.js ├── package.json ├── postcss.config.js ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico └── website.png ├── src ├── components │ ├── DesktopModal.js │ ├── Features.js │ ├── GetLink.js │ ├── Hero.js │ ├── MobileModal.js │ ├── Navbar.js │ ├── SecurityForm.js │ ├── ShortLinks.js │ └── UseWindowSize.js ├── pages │ ├── 404.js │ ├── [url].js │ ├── _app.js │ ├── _document.js │ ├── api │ │ ├── create-shortlink.js │ │ ├── getclicks.js │ │ └── redirect.js │ └── index.js ├── redux │ ├── reducers │ │ ├── bottomSheet.js │ │ ├── getUrl.js │ │ └── localStorage.js │ └── store.js └── styles │ └── globals.css ├── tailwind.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Securelink](https://securelink.vercel.app/)- Securely Share Your Links with Custom Access Controls 🔗🔐 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ## Introduction 10 | 11 | SecureLink is a link shortener that gives you full control over your links. You can customize your short links according to your preferences, protect them with a password to keep them secure, and delete them automatically after a single view to enhance security. You can also limit the number of clicks on your link for added security, set an expiration time for your links, and encrypt your destination link before saving it to the server for enhanced privacy. 12 | 13 | 14 | 15 | ## Features 16 | - Customize your short links according to your preferences 17 | - Protect your links with a password to keep them secure 18 | - Delete the link automatically after a single view to enhance security 19 | - Limit the number of clicks on your link for added security 20 | - Set an expiration time for your links, after which they will become inactive 21 | - Encrypt your destination link before saving it to the server for enhanced privacy 22 | 23 | 24 | 25 | ## Usage 26 | 1. Enter the destination link you want to shorten in the input box. 27 | 28 | 2. You can enter your custom path name like 'github' or 'twitter', or you can generate a random path name by clicking on the "randomize" button. 29 | 30 | 3. You can choose other additional options for extra security of your sharable link like: 31 | - **Password** : You can make your link protected and add a password. It will decrypt your destination URL so no one can access it without a password. 32 | - **View once**: You can turn on this feature to make the user view the link only once. After that, the link will be destroyed automatically and no one can access it again. 33 | - **Click limit**: You can set a limit on the number of clicks to avoid misuse of your link. 34 | - **Expiration time**: You can set an expiration time limit up to 30 minutes after which the link will be destroyed automatically. 35 | 36 | 37 | 4. After adding all these, click on the "Generate link" button. It will take 3-5 seconds, and after that, you will see all your generated links in the featured section. (Non-working links destroy automatically after their expire time.) 38 | 39 | 5. Copy the generated short link and share it with anyone you want. 40 | 41 | 42 | ## Try it out 43 | Visit [securelink.vercel.app](https://securelink.vercel.app/) and start securing your links today! 44 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /lib/dbConnect.js: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | 3 | const connectMongo = async () => mongoose.connect(process.env.NEXT_PUBLIC_MONGO_URI); 4 | 5 | export default connectMongo -------------------------------------------------------------------------------- /model/ShortUrl.js: -------------------------------------------------------------------------------- 1 | import mongoose from 'mongoose'; 2 | 3 | const shortUrlSchema = new mongoose.Schema({ 4 | destinationUrl: { 5 | type: String, 6 | required: true, 7 | unique: true, 8 | }, 9 | shortUrl: { 10 | type: String, 11 | required: true, 12 | unique: true, 13 | }, 14 | password: { 15 | type: String, 16 | }, 17 | protection: { 18 | type: Boolean, 19 | default: false, 20 | }, 21 | clickCount: { 22 | type: Number, 23 | default: 0 24 | }, 25 | readCount: { 26 | type: Number, 27 | default: 20 28 | }, 29 | viewOnce: { 30 | type: Boolean, 31 | default: false, 32 | }, 33 | isopen: { 34 | type: Boolean, 35 | default: false, 36 | }, 37 | expiresAt: { 38 | type: Date, 39 | default: Date.now() + 5 * 60 * 1000, // 5 minutes in milliseconds 40 | index: { expires: 0 } 41 | } 42 | }); 43 | 44 | const ShortUrl = mongoose.models.ShortUrl || mongoose.model('ShortUrl', shortUrlSchema); 45 | 46 | export default ShortUrl; 47 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "link-shortner", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@reduxjs/toolkit": "^1.9.3", 13 | "axios": "^1.3.4", 14 | "bcrypt": "^5.1.0", 15 | "crypto-js": "^4.1.1", 16 | "express-validator": "^6.15.0", 17 | "focus-trap-react": "^10.1.1", 18 | "framer-motion": "^10.5.0", 19 | "mongoose": "^7.0.1", 20 | "nanoid": "^4.0.1", 21 | "next": "13.2.4", 22 | "prop-types": "^15.8.1", 23 | "react": "18.2.0", 24 | "react-dom": "18.2.0", 25 | "react-hot-toast": "^2.4.0", 26 | "react-icons": "^4.8.0", 27 | "react-modal-sheet": "^1.10.1", 28 | "react-redux": "^8.0.5", 29 | "shortid": "^2.2.16" 30 | }, 31 | "devDependencies": { 32 | "autoprefixer": "^10.4.14", 33 | "postcss": "^8.4.21", 34 | "tailwindcss": "^3.2.7" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/favicon.ico -------------------------------------------------------------------------------- /public/website.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sujjeee/securelink/3460fe108cf1f1bafd665489751b682cb1326c8c/public/website.png -------------------------------------------------------------------------------- /src/components/DesktopModal.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import SecurityForm from './SecurityForm' 3 | 4 | const DesktopModal = () => { 5 | return ( 6 |
7 |
8 |
9 |
10 |
11 |

12 | Secure Your Link! 13 |

14 | 15 |
16 |
17 |
18 |
19 |
20 | ) 21 | } 22 | 23 | export default DesktopModal -------------------------------------------------------------------------------- /src/components/Features.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { BiEdit, BiLock } from 'react-icons/bi' 3 | import { AiOutlineEyeInvisible, AiOutlineCloudServer, AiOutlineFieldTime } from 'react-icons/ai' 4 | import { HiCursorClick } from 'react-icons/hi' 5 | 6 | const Features = () => { 7 | return ( 8 |
9 |
10 |
11 |
12 |

13 | 14 |

15 | 16 |

17 | Customize your short links according to your preferences. 18 |

19 |
20 |
21 |
22 |
23 |
24 |
25 |

26 | 27 |

28 | 29 |

30 | Protect your links with a password to keep them secure. 31 |

32 |
33 |
34 |
35 |
36 |
37 |
38 |

39 | 40 |

41 | 42 |

43 | Delete the link automatically after a single view to enhance security. 44 |

45 |
46 |
47 |
48 |
49 |
50 |
51 |

52 | 53 |

54 | 55 |

56 | Limit the number of clicks on your link for added security. 57 |

58 |
59 |
60 |
61 |
62 |
63 |
64 |

65 | 66 |

67 | 68 |

69 | Set an expiration time for your links, after which they will become inactive. 70 |

71 |
72 |
73 |
74 |
75 |
76 |
77 |

78 | 79 |

80 | 81 |

82 | Encrypt your destination link before saving it to the server for enhanced privacy. 83 |

84 |
85 |
86 |
87 |
88 | ) 89 | } 90 | 91 | export default Features -------------------------------------------------------------------------------- /src/components/GetLink.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { TbShieldLock } from 'react-icons/tb' 3 | import DesktopModal from './DesktopModal' 4 | import MobileModal from './MobileModal' 5 | import useWindowSize from './UseWindowSize' 6 | import { useDispatch, useSelector } from 'react-redux' 7 | import { toggle } from '@/redux/reducers/bottomSheet' 8 | import { setUrl } from '@/redux/reducers/getUrl' 9 | 10 | 11 | const GetLink = () => { 12 | const [newUrl, setNewUrl] = useState('') 13 | 14 | // getting value form redux 15 | const isToggled = useSelector((state) => state.bottomSheet); 16 | 17 | const dispatch = useDispatch(); 18 | 19 | // checking screen ratio 20 | const { isMobile, isDesktop } = useWindowSize(); 21 | 22 | const handleBottomSheet = async (e) => { 23 | dispatch(toggle()) 24 | dispatch(setUrl(newUrl)) 25 | } 26 | const setChange = (event) => { 27 | setNewUrl(event.target.value); 28 | } 29 | 30 | return ( 31 | <> 32 |
33 | 42 | 43 | 51 |
52 | 53 | 54 |
55 | {isMobile && } 56 | {isToggled && (isDesktop && 57 |
58 |
59 | )} 60 |
61 | 62 | 63 | ) 64 | } 65 | 66 | export default GetLink -------------------------------------------------------------------------------- /src/components/Hero.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Link from 'next/link'; 3 | import { ImTwitter } from 'react-icons/im'; 4 | 5 | const Hero = () => { 6 | return ( 7 |
8 |
9 | 13 | Introducing SecureLink 14 | 15 |
16 |

17 | Securely Share Your Links with Custom Access Controls 18 | 19 |

20 |

21 | SecureLink is a link shortener that gives you full control over your links. You can set a password, a read count limit and a one-time open option for your links. 22 |

23 |
24 | ) 25 | } 26 | 27 | export default Hero -------------------------------------------------------------------------------- /src/components/MobileModal.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Sheet from 'react-modal-sheet'; 3 | import { useDispatch } from 'react-redux'; 4 | import { toggle } from '@/redux/reducers/bottomSheet'; 5 | import SecurityForm from './SecurityForm'; 6 | 7 | 8 | const MobileModal = ({ openModal }) => { 9 | const dispatch = useDispatch(); 10 | 11 | return ( 12 |
13 | dispatch(toggle())} 16 | detent="content-height" > 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | ) 27 | } 28 | 29 | export default MobileModal -------------------------------------------------------------------------------- /src/components/Navbar.js: -------------------------------------------------------------------------------- 1 | import Link from 'next/link' 2 | import React from 'react' 3 | import { AiFillGithub, AiOutlineTwitter } from 'react-icons/ai' 4 | import { TbShieldLock } from 'react-icons/tb' 5 | 6 | const Navbar = () => { 7 | 8 | return ( 9 | 44 | ) 45 | } 46 | 47 | export default Navbar -------------------------------------------------------------------------------- /src/components/SecurityForm.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react' 2 | import { RxShuffle } from 'react-icons/rx' 3 | import { AiOutlineLink, AiOutlineEyeInvisible, AiOutlineEye } from 'react-icons/ai' 4 | import axios from 'axios'; 5 | import { useDispatch, useSelector } from 'react-redux'; 6 | import { toggle } from '@/redux/reducers/bottomSheet'; 7 | import { addLink } from '@/redux/reducers/localStorage'; 8 | import shortid from 'shortid'; 9 | import { toast, Toaster } from 'react-hot-toast'; 10 | import useWindowSize from './UseWindowSize'; 11 | 12 | const SecurityForm = () => { 13 | const userUrl = useSelector(state => state.getUrl); 14 | const dispatch = useDispatch(); 15 | 16 | const { isMobile } = useWindowSize(); 17 | const [showPassword, setShowPassword] = useState(false) 18 | const [showLoader, setShowLoader] = useState(false) 19 | 20 | const [urlData, setUrlData] = useState({ 21 | originalUrl: userUrl, 22 | shortId: "", 23 | protection: false, 24 | password: "", 25 | viewOnce: false, 26 | readCount: 50, 27 | expiresAt: 5 28 | }) 29 | const { originalUrl, shortId, protection, password, viewOnce, readCount, expiresAt } = urlData 30 | const setChanges = (e) => { 31 | const { name, value, checked } = e.target; 32 | if (name === "protection" || name === "viewOnce") { 33 | setUrlData({ 34 | ...urlData, 35 | [name]: checked, 36 | password: checked ? password : null 37 | }); 38 | } else { 39 | setUrlData({ 40 | ...urlData, 41 | [name]: value 42 | }); 43 | } 44 | } 45 | 46 | 47 | const genRandom = () => { 48 | setUrlData(prevUrlData => { 49 | return { 50 | ...prevUrlData, 51 | shortId: shortid.generate() 52 | } 53 | }); 54 | } 55 | 56 | const handleFormSubmit = async (e) => { 57 | e.preventDefault(); 58 | if (protection && !password) { 59 | alert('Please enter a password for the protected URL.'); 60 | return; 61 | } 62 | 63 | try { 64 | setShowLoader(true); 65 | const res = await axios.post('/api/create-shortlink', { originalUrl, shortId, protection, password, viewOnce, readCount, expiresAt }); 66 | 67 | if (res) { 68 | setTimeout(() => { 69 | setShowLoader(false); 70 | dispatch(toggle()) 71 | window.scrollTo({ 72 | top: document.getElementById('generated_links').offsetTop - 200, 73 | behavior: 'smooth' 74 | }); 75 | 76 | toast.success("Link generated successfully"); 77 | const link = { shortId: res.data.shortUrl, expiresAt: res.data.expiresAt }; 78 | dispatch(addLink(link)); 79 | 80 | // Get the existing links array from the local storage 81 | const existingLinks = JSON.parse(localStorage.getItem("secure-links")) || []; 82 | 83 | // Add the new link to the array 84 | existingLinks.push(link); 85 | 86 | // Store the updated array in the local storage 87 | localStorage.setItem("secure-links", JSON.stringify(existingLinks)); 88 | 89 | }, 2000); 90 | } 91 | } catch (error) { 92 | console.error(error) 93 | setShowLoader(false) 94 | toast.error("Invalid entry") 95 | } 96 | 97 | }; 98 | return ( 99 |
100 |
101 | 102 |
103 |
104 |
105 | 110 |
111 |
112 | 123 |
124 |
125 |
126 |
127 | 128 | 135 |
136 |
137 | 138 | 139 | 140 | 150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 | Optional 158 |
159 |
160 |
161 |
162 |

Password Protection

163 | 177 |
178 | {protection && 179 |
180 | 189 | 196 |
197 | } 198 |
199 |
200 |
201 |

View only once

202 | 217 |
218 |
219 |
220 |
221 |

Read Count

222 |
223 |
224 | 234 |
235 |
236 |
237 |
238 |

Expires in (minutes)

239 |
240 |
241 | 251 |
252 |
253 |
254 |
255 | 272 | {isMobile && } 273 |
274 |
275 |
276 | ) 277 | } 278 | 279 | export default SecurityForm -------------------------------------------------------------------------------- /src/components/ShortLinks.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { MdContentCopy } from 'react-icons/md' 3 | import { AiOutlineRise, AiOutlineLink } from 'react-icons/ai' 4 | import useWindowSize from './UseWindowSize'; 5 | import { toast, Toaster } from 'react-hot-toast'; 6 | 7 | const ShortLinks = ({ shortedLinks }) => { 8 | const { isMobile, isDesktop } = useWindowSize(); 9 | return ( 10 | 11 | 54 | 55 | ) 56 | } 57 | 58 | export default ShortLinks -------------------------------------------------------------------------------- /src/components/UseWindowSize.js: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export default function useWindowSize() { 4 | const [windowSize, setWindowSize] = useState({ 5 | width: undefined, 6 | height: undefined, 7 | }); 8 | 9 | useEffect(() => { 10 | const handleResize = () => { 11 | setWindowSize({ 12 | width: window.innerWidth, 13 | height: window.innerHeight, 14 | }); 15 | }; 16 | 17 | window.addEventListener("resize", handleResize); 18 | handleResize(); 19 | 20 | return () => window.removeEventListener("resize", handleResize); 21 | }, []); 22 | 23 | const isMobile = typeof windowSize?.width === "number" && windowSize?.width < 768; 24 | const isDesktop = typeof windowSize?.width === "number" && windowSize?.width >= 768; 25 | 26 | return { windowSize, isMobile, isDesktop }; 27 | } 28 | -------------------------------------------------------------------------------- /src/pages/404.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const notFound = () => { 4 | return ( 5 |
6 |
7 |

You are lost!

8 |
9 | Go back home 10 |
11 |
12 |
13 | ) 14 | } 15 | 16 | export default notFound -------------------------------------------------------------------------------- /src/pages/[url].js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import React, { useState } from 'react'; 3 | import CryptoJS from 'crypto-js' 4 | 5 | export async function getServerSideProps(context) { 6 | const { url } = context.params; 7 | const hostName = context.req.headers.host; 8 | 9 | // if you want to use in localhost then turn 'https' to 'http' 10 | const response = await fetch(`https://${hostName}/api/redirect?link=https://${hostName}/${url}`); 11 | const data = await response.json(); 12 | 13 | if (data.success === true) { 14 | if (data.protection === true) { 15 | return { 16 | props: { 17 | requiresPassword: true, 18 | shortUrl: `https://${hostName}/${url}`, 19 | }, 20 | }; 21 | } else { 22 | const encryptedString = data.destinationUrl 23 | const decryptedName = CryptoJS.AES.decrypt(encryptedString, process.env.NEXT_PUBLIC_NEXTAUTH_KEY).toString(CryptoJS.enc.Utf8) 24 | return { 25 | redirect: { 26 | destination: decryptedName, 27 | permanent: false, 28 | }, 29 | }; 30 | } 31 | } else { 32 | return { 33 | notFound: true, 34 | }; 35 | } 36 | } 37 | 38 | 39 | export default function Page({ shortUrl }) { 40 | 41 | const [password, setPassword] = useState(''); 42 | 43 | async function handleSubmit(event) { 44 | event.preventDefault(); 45 | 46 | try { 47 | const response = await axios.post('/api/redirect', { 48 | password, 49 | shortUrl, 50 | }); 51 | 52 | if (response.data.success === true) { 53 | const encryptUrl = response.data.destinationUrl 54 | var decryptUrl = CryptoJS.AES.decrypt(encryptUrl, process.env.NEXT_PUBLIC_NEXTAUTH_KEY).toString(CryptoJS.enc.Utf8); 55 | window.location.href = decryptUrl 56 | } 57 | } catch (error) { 58 | console.error('error:', error); 59 | alert("worng cred!") 60 | } 61 | } 62 | 63 | function handleChange(event) { 64 | setPassword(event.target.value); 65 | } 66 | 67 | return ( 68 |
69 |
70 |
71 |

Password Required

72 |

This link is password protected. Please enter the password to view it.

73 |
74 |
75 |
76 | 77 |
78 | 79 |
80 |
81 | 84 |
85 |
86 |
87 | ); 88 | } 89 | 90 | -------------------------------------------------------------------------------- /src/pages/_app.js: -------------------------------------------------------------------------------- 1 | import { store } from '@/redux/store' 2 | import '@/styles/globals.css' 3 | import Script from 'next/script' 4 | import { Provider } from 'react-redux' 5 | 6 | 7 | export default function App({ Component, pageProps }) { 8 | return ( 9 | <> 10 | {/* Global Site Tag (gtag.js) - Google Analytics */} 11 | 25 | 26 |
27 | 28 |
29 |
30 | 31 | ) 32 | } 33 | -------------------------------------------------------------------------------- /src/pages/_document.js: -------------------------------------------------------------------------------- 1 | import { Html, Head, Main, NextScript } from 'next/document' 2 | 3 | export default function Document() { 4 | return ( 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /src/pages/api/create-shortlink.js: -------------------------------------------------------------------------------- 1 | import connectMongo from '../../../lib/dbConnect'; 2 | import ShortUrl from '../../../model/ShortUrl'; 3 | import CryptoJS from 'crypto-js'; 4 | import { validationResult, check } from 'express-validator'; 5 | import bcrypt from 'bcrypt'; 6 | 7 | async function createShortLink(req, res) { 8 | try { 9 | // connect to mongodb 10 | await connectMongo(); 11 | 12 | // Validating the API request body 13 | const validationRules = [ 14 | check('originalUrl') 15 | .notEmpty() 16 | .withMessage('Destination URL is required') 17 | .isURL() 18 | .withMessage('Destination URL is invalid'), 19 | check('shortId') 20 | .notEmpty() 21 | .withMessage('Short URL is required'), 22 | check('protection') 23 | .optional() 24 | .isBoolean() 25 | .withMessage('Protection should be a boolean value'), 26 | check('password') 27 | .optional() 28 | .custom((value, { req }) => { 29 | if (req.body.protection && !value) { 30 | throw new Error('Password is required for protected URL'); 31 | } 32 | return true; 33 | }), 34 | check('viewOnce') 35 | .optional() 36 | .isBoolean() 37 | .withMessage('View Once should be a boolean value'), 38 | check('readCount') 39 | .optional() 40 | .notEmpty() 41 | .withMessage('Read Count is required') 42 | .isInt({ min: 1, max: 100 }) 43 | .withMessage('Read Count should be an integer value and should be between 1 and 30'), 44 | check('expiresAt') 45 | .optional() 46 | .notEmpty() 47 | .withMessage('Expires time is required') 48 | .isInt({ min: 1, max: 30 }) 49 | .withMessage('Expires time should be an integer value and should be between 1 and 30'), 50 | ]; 51 | 52 | await Promise.all(validationRules.map((validation) => validation.run(req))); 53 | 54 | // Checking for errors in req body 55 | const errors = validationResult(req); 56 | if (!errors.isEmpty()) { 57 | return res.status(422).json({ errors: errors.array() }); 58 | } 59 | 60 | const { originalUrl, shortId, protection, password, viewOnce, readCount, expiresAt } = req.body; 61 | 62 | // hashing password using bcrypt.js 63 | let passwordHash = null; 64 | if (protection) { 65 | if (!password) { 66 | return res.status(400).json({ error: 'Password is required for protected URL' }); 67 | } 68 | passwordHash = await bcrypt.hash(password, 10); 69 | } 70 | 71 | // converting the date taken by user in minutes to ISO format 72 | const expirationTime = expiresAt ? new Date(Date.now() + expiresAt * 60 * 1000) : new Date(Date.now() + 5 * 60 * 1000); 73 | 74 | let url = await ShortUrl.findOne({ originalUrl }); 75 | 76 | // creating field to database 77 | if (!url) { 78 | 79 | // if you want to use in localhost then turn 'https' to 'http' 80 | const checkShortId = await ShortUrl.findOne({ shortUrl: `https://${req.headers.host}/${shortId}` }); 81 | if (checkShortId) { 82 | return res.status(409).json({ success: false, message: 'Short URL is already taken' }); 83 | } 84 | 85 | const shortUrl = `https://${req.headers.host}/${shortId}`; 86 | const destinationUrl = CryptoJS.AES.encrypt(originalUrl, process.env.NEXT_PUBLIC_NEXTAUTH_KEY).toString(); 87 | 88 | url = await ShortUrl.create({ 89 | destinationUrl, 90 | shortUrl, 91 | password: passwordHash, 92 | protection, 93 | viewOnce, 94 | clickCount: 0, 95 | open: false, 96 | expiresAt: expirationTime, 97 | readCount, 98 | }); 99 | } 100 | 101 | res.status(200).json({ success: true, shortUrl: url.shortUrl, expiresAt: url.expiresAt }); 102 | } catch (error) { 103 | console.error(error); 104 | res.status(500).json({ success: false, message: 'Internal server error' }); 105 | } 106 | } 107 | 108 | export default createShortLink; 109 | -------------------------------------------------------------------------------- /src/pages/api/getclicks.js: -------------------------------------------------------------------------------- 1 | import connectMongo from '../../../lib/dbConnect'; 2 | import ShortUrl from '../../../model/ShortUrl'; 3 | 4 | export default async function handler(req, res) { 5 | try { 6 | await connectMongo(); 7 | 8 | if (req.method === 'GET' && req.query.link) { 9 | const { link } = req.query; 10 | 11 | const url = await ShortUrl.findOne( 12 | { shortUrl: link }, 13 | ); 14 | 15 | if (!url) { 16 | res.status(404).json({ success: false, message: 'Url Not Found!' }); 17 | return; 18 | } 19 | 20 | res.status(200).json({ success: true, clicksCounts: url.clickCount }); 21 | } 22 | } catch (error) { 23 | console.error(error); 24 | res.status(500).json({ success: false, message: 'Internal Server Error' }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/pages/api/redirect.js: -------------------------------------------------------------------------------- 1 | import connectMongo from '../../../lib/dbConnect'; 2 | import ShortUrl from '../../../model/ShortUrl'; 3 | import bcrypt from 'bcrypt'; 4 | 5 | export default async function handler(req, res) { 6 | try { 7 | await connectMongo(); 8 | 9 | if (req.method === 'GET' && req.query.link) { 10 | const { link } = req.query; 11 | 12 | const url = await ShortUrl.findOneAndUpdate( 13 | { shortUrl: link }, 14 | { $inc: { clickCount: 1 } }, 15 | { new: true } 16 | ); 17 | 18 | if (url.isopen || url.clickCount >= url.readCount) { 19 | await ShortUrl.deleteOne({ _id: url._id }); 20 | res.status(404).json({ success: false, message: 'Url Not Found!' }); 21 | return; 22 | } 23 | 24 | if (url.protection) { 25 | res.status(200).json({ success: true, protection: url.protection }); 26 | return; 27 | } 28 | 29 | if (url.viewOnce && !url.protection) { 30 | await ShortUrl.findOneAndUpdate({ _id: url._id }, { $set: { isopen: true } }); 31 | } 32 | 33 | res.status(200).json({ success: true, destinationUrl: url.destinationUrl, protection: url.protection }); 34 | } else if (req.method === 'POST' && req.body.shortUrl && req.body.password) { 35 | const { shortUrl, password } = req.body; 36 | 37 | const url = await ShortUrl.findOne({ shortUrl }); 38 | 39 | if (!url) { 40 | res.status(404).json({ success: false, message: 'Url Not Found!' }); 41 | return; 42 | } 43 | 44 | if (url.isopen || url.clickCount >= url.readCount) { 45 | await ShortUrl.deleteOne({ _id: url._id }); 46 | res.status(404).json({ success: false, message: 'Url Not Found!' }); 47 | return; 48 | } 49 | 50 | const checkPass = await bcrypt.compare(password, url.password); 51 | 52 | if (checkPass) { 53 | if (url.viewOnce) { 54 | await ShortUrl.findOneAndUpdate({ _id: url._id }, { $set: { isopen: true } }, { new: true }); 55 | } 56 | res.status(200).json({ success: true, destinationUrl: url.destinationUrl }); 57 | } else { 58 | res.status(401).json({ success: false, message: 'Unauthorized' }); 59 | } 60 | } else { 61 | res.status(400).json({ success: false, message: 'Bad Request' }); 62 | } 63 | } catch (error) { 64 | console.error(error); 65 | res.status(500).json({ success: false, message: 'Internal Server Error' }); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from 'react' 2 | import { useSelector } from 'react-redux'; 3 | import Features from '@/components/Features'; 4 | import GetLink from '@/components/GetLink'; 5 | import Hero from '@/components/Hero'; 6 | import Navbar from '@/components/Navbar'; 7 | import ShortLinks from '@/components/ShortLinks'; 8 | import Head from 'next/head'; 9 | 10 | const Home = () => { 11 | 12 | let description = "SecureLink helps you protect your links online with custom settings and features."; 13 | let ogimage = "https://securelink.vercel.app/website.png"; 14 | let sitename = "SecureLink"; 15 | let title = "SecureLink - Link Shortener with Security Features"; 16 | 17 | const [urls, setUrls] = useState([]); 18 | const [filterUrls, setFilterUrls] = useState([]) 19 | const localUrl = useSelector(state => state.localStorage); 20 | 21 | const gitUrl = { 22 | shortId: "https://securelink.vercel.app/github" 23 | } 24 | 25 | const fetchData = async (urls) => { 26 | try { 27 | const updatedUrls = await Promise.all( 28 | urls.map(async (url) => { 29 | const response = await fetch(`/api/getclicks?link=${url.shortId}`); 30 | const data = await response.json(); 31 | return { ...url, clicks: data.clicksCounts }; 32 | }) 33 | ); 34 | setUrls(updatedUrls); 35 | } catch (error) { 36 | console.log(error); 37 | } 38 | }; 39 | 40 | useEffect(() => { 41 | try { 42 | const genratedUrls = JSON.parse(localStorage.getItem("secure-links")); 43 | if (genratedUrls) { 44 | const currentTime = new Date().getTime(); 45 | const filteredUrls = genratedUrls.filter( 46 | (link) => new Date(link.expiresAt).getTime() > currentTime 47 | ); 48 | localStorage.setItem("secure-links", JSON.stringify(filteredUrls)); 49 | setFilterUrls(filteredUrls); 50 | } 51 | } catch (error) { 52 | console.log(error); 53 | } 54 | }, [localUrl]); 55 | 56 | useEffect(() => { 57 | if (filterUrls.length > 0) { 58 | fetchData(filterUrls); 59 | } 60 | }, [filterUrls]); 61 | 62 | return ( 63 | <> 64 | 65 | SecureLinks 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 |
86 |
87 | 88 |
89 | 90 | 91 |
92 |
93 |

94 | Generated links 95 |

96 | 97 |
98 |
99 | 100 | {urls.map((url, index) => ( 101 |
102 | 103 |
104 | ))} 105 | 106 |
107 |
108 |
109 |
110 |

111 | Powerful Access Control 112 |

113 | 114 |
115 |
116 | 117 |
118 |
119 |
120 | Protect your links now! 121 |
122 |
123 | 124 | ) 125 | } 126 | 127 | export default Home -------------------------------------------------------------------------------- /src/redux/reducers/bottomSheet.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit' 2 | 3 | const initialState = false 4 | 5 | const bottomSheetSlice = createSlice({ 6 | name: 'bottomSheet', 7 | initialState, 8 | reducers: { 9 | toggle(state) { 10 | return !state 11 | }, 12 | }, 13 | }) 14 | 15 | export const { toggle } = bottomSheetSlice.actions 16 | export default bottomSheetSlice.reducer -------------------------------------------------------------------------------- /src/redux/reducers/getUrl.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | 3 | const initialState = ''; 4 | 5 | const getUrlSlice = createSlice({ 6 | name: 'getUrl', 7 | initialState, 8 | reducers: { 9 | setUrl(state, action) { 10 | return action.payload; 11 | }, 12 | }, 13 | }); 14 | 15 | export const { setUrl } = getUrlSlice.actions; 16 | export default getUrlSlice.reducer; 17 | -------------------------------------------------------------------------------- /src/redux/reducers/localStorage.js: -------------------------------------------------------------------------------- 1 | import { createSlice } from '@reduxjs/toolkit'; 2 | 3 | const initialState = []; 4 | 5 | const localStorageSlice = createSlice({ 6 | name: 'localStorage', 7 | initialState, 8 | reducers: { 9 | addLink: (state, action) => { 10 | state.push(action.payload); 11 | } 12 | }, 13 | }); 14 | 15 | export const { addLink } = localStorageSlice.actions; 16 | export default localStorageSlice.reducer; 17 | -------------------------------------------------------------------------------- /src/redux/store.js: -------------------------------------------------------------------------------- 1 | import { configureStore } from '@reduxjs/toolkit' 2 | import bottomSheetReducer from './reducers/bottomSheet' 3 | import getUrlReducer from './reducers/getUrl' 4 | import localStorageReducer from './reducers/localStorage' 5 | 6 | 7 | export const store = configureStore({ 8 | reducer: { 9 | bottomSheet: bottomSheetReducer, 10 | getUrl: getUrlReducer, 11 | localStorage: localStorageReducer 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body{ 6 | background-color: #111113 7 | } 8 | /* Hide scrollbar for #pop-up element for all browsers */ 9 | #pop-up::-webkit-scrollbar { 10 | display: none; 11 | } 12 | 13 | /* Hide scrollbar for #pop-up element for IE, Edge, and Firefox */ 14 | #pop-up { 15 | -ms-overflow-style: none; /* IE and Edge */ 16 | scrollbar-width: none; /* Firefox */ 17 | } -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{js,ts,jsx,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.12.1", "@babel/runtime@^7.9.2": 6 | version "7.21.0" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" 8 | integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== 9 | dependencies: 10 | regenerator-runtime "^0.13.11" 11 | 12 | "@emotion/is-prop-valid@^0.8.2": 13 | version "0.8.8" 14 | resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" 15 | integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== 16 | dependencies: 17 | "@emotion/memoize" "0.7.4" 18 | 19 | "@emotion/memoize@0.7.4": 20 | version "0.7.4" 21 | resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" 22 | integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== 23 | 24 | "@mapbox/node-pre-gyp@^1.0.10": 25 | version "1.0.10" 26 | resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" 27 | integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== 28 | dependencies: 29 | detect-libc "^2.0.0" 30 | https-proxy-agent "^5.0.0" 31 | make-dir "^3.1.0" 32 | node-fetch "^2.6.7" 33 | nopt "^5.0.0" 34 | npmlog "^5.0.1" 35 | rimraf "^3.0.2" 36 | semver "^7.3.5" 37 | tar "^6.1.11" 38 | 39 | "@next/env@13.2.4": 40 | version "13.2.4" 41 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.2.4.tgz#8b763700262b2445140a44a8c8d088cef676dbae" 42 | integrity sha512-+Mq3TtpkeeKFZanPturjcXt+KHfKYnLlX6jMLyCrmpq6OOs4i1GqBOAauSkii9QeKCMTYzGppar21JU57b/GEA== 43 | 44 | "@next/swc-android-arm-eabi@13.2.4": 45 | version "13.2.4" 46 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.2.4.tgz#758d0403771e549f9cee71cbabc0cb16a6c947c0" 47 | integrity sha512-DWlalTSkLjDU11MY11jg17O1gGQzpRccM9Oes2yTqj2DpHndajrXHGxj9HGtJ+idq2k7ImUdJVWS2h2l/EDJOw== 48 | 49 | "@next/swc-android-arm64@13.2.4": 50 | version "13.2.4" 51 | resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-13.2.4.tgz#834d586523045110d5602e0c8aae9028835ac427" 52 | integrity sha512-sRavmUImUCf332Gy+PjIfLkMhiRX1Ez4SI+3vFDRs1N5eXp+uNzjFUK/oLMMOzk6KFSkbiK/3Wt8+dHQR/flNg== 53 | 54 | "@next/swc-darwin-arm64@13.2.4": 55 | version "13.2.4" 56 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.2.4.tgz#5006fca179a36ef3a24d293abadec7438dbb48c6" 57 | integrity sha512-S6vBl+OrInP47TM3LlYx65betocKUUlTZDDKzTiRDbsRESeyIkBtZ6Qi5uT2zQs4imqllJznVjFd1bXLx3Aa6A== 58 | 59 | "@next/swc-darwin-x64@13.2.4": 60 | version "13.2.4" 61 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.2.4.tgz#6549c7c04322766acc3264ccdb3e1b43fcaf7946" 62 | integrity sha512-a6LBuoYGcFOPGd4o8TPo7wmv5FnMr+Prz+vYHopEDuhDoMSHOnC+v+Ab4D7F0NMZkvQjEJQdJS3rqgFhlZmKlw== 63 | 64 | "@next/swc-freebsd-x64@13.2.4": 65 | version "13.2.4" 66 | resolved "https://registry.yarnpkg.com/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.2.4.tgz#0bbe28979e3e868debc2cc06e45e186ce195b7f4" 67 | integrity sha512-kkbzKVZGPaXRBPisoAQkh3xh22r+TD+5HwoC5bOkALraJ0dsOQgSMAvzMXKsN3tMzJUPS0tjtRf1cTzrQ0I5vQ== 68 | 69 | "@next/swc-linux-arm-gnueabihf@13.2.4": 70 | version "13.2.4" 71 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.2.4.tgz#1d28d2203f5a7427d6e7119d7bcb5fc40959fb3e" 72 | integrity sha512-7qA1++UY0fjprqtjBZaOA6cas/7GekpjVsZn/0uHvquuITFCdKGFCsKNBx3S0Rpxmx6WYo0GcmhNRM9ru08BGg== 73 | 74 | "@next/swc-linux-arm64-gnu@13.2.4": 75 | version "13.2.4" 76 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.2.4.tgz#eb26448190948cdf4c44b8f34110a3ecea32f1d0" 77 | integrity sha512-xzYZdAeq883MwXgcwc72hqo/F/dwUxCukpDOkx/j1HTq/J0wJthMGjinN9wH5bPR98Mfeh1MZJ91WWPnZOedOg== 78 | 79 | "@next/swc-linux-arm64-musl@13.2.4": 80 | version "13.2.4" 81 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.2.4.tgz#c4227c0acd94a420bb14924820710e6284d234d3" 82 | integrity sha512-8rXr3WfmqSiYkb71qzuDP6I6R2T2tpkmf83elDN8z783N9nvTJf2E7eLx86wu2OJCi4T05nuxCsh4IOU3LQ5xw== 83 | 84 | "@next/swc-linux-x64-gnu@13.2.4": 85 | version "13.2.4" 86 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.2.4.tgz#6bcb540944ee9b0209b33bfc23b240c2044dfc3e" 87 | integrity sha512-Ngxh51zGSlYJ4EfpKG4LI6WfquulNdtmHg1yuOYlaAr33KyPJp4HeN/tivBnAHcZkoNy0hh/SbwDyCnz5PFJQQ== 88 | 89 | "@next/swc-linux-x64-musl@13.2.4": 90 | version "13.2.4" 91 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.2.4.tgz#ce21e43251eaf09a09df39372b2c3e38028c30ff" 92 | integrity sha512-gOvwIYoSxd+j14LOcvJr+ekd9fwYT1RyMAHOp7znA10+l40wkFiMONPLWiZuHxfRk+Dy7YdNdDh3ImumvL6VwA== 93 | 94 | "@next/swc-win32-arm64-msvc@13.2.4": 95 | version "13.2.4" 96 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.2.4.tgz#68220063d8e5e082f5465498675640dedb670ff1" 97 | integrity sha512-q3NJzcfClgBm4HvdcnoEncmztxrA5GXqKeiZ/hADvC56pwNALt3ngDC6t6qr1YW9V/EPDxCYeaX4zYxHciW4Dw== 98 | 99 | "@next/swc-win32-ia32-msvc@13.2.4": 100 | version "13.2.4" 101 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.2.4.tgz#7c120ab54a081be9566df310bed834f168252990" 102 | integrity sha512-/eZ5ncmHUYtD2fc6EUmAIZlAJnVT2YmxDsKs1Ourx0ttTtvtma/WKlMV5NoUsyOez0f9ExLyOpeCoz5aj+MPXw== 103 | 104 | "@next/swc-win32-x64-msvc@13.2.4": 105 | version "13.2.4" 106 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.2.4.tgz#5abda92fe12b9829bf7951c4a221282c56041144" 107 | integrity sha512-0MffFmyv7tBLlji01qc0IaPP/LVExzvj7/R5x1Jph1bTAIj4Vu81yFQWHHQAP6r4ff9Ukj1mBK6MDNVXm7Tcvw== 108 | 109 | "@nodelib/fs.scandir@2.1.5": 110 | version "2.1.5" 111 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 112 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 113 | dependencies: 114 | "@nodelib/fs.stat" "2.0.5" 115 | run-parallel "^1.1.9" 116 | 117 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 118 | version "2.0.5" 119 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 120 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 121 | 122 | "@nodelib/fs.walk@^1.2.3": 123 | version "1.2.8" 124 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 125 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 126 | dependencies: 127 | "@nodelib/fs.scandir" "2.1.5" 128 | fastq "^1.6.0" 129 | 130 | "@react-aria/ssr@^3.4.1": 131 | version "3.5.0" 132 | resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.5.0.tgz#40c1270a75868185f72a88cafe37bd1392f690cb" 133 | integrity sha512-h0MJdSWOd1qObLnJ8mprU31wI8tmKFJMuwT22MpWq6psisOOZaga6Ml4u6Ee6M6duWWISjXvqO4Sb/J0PBA+nQ== 134 | dependencies: 135 | "@swc/helpers" "^0.4.14" 136 | 137 | "@react-aria/utils@3.14.2": 138 | version "3.14.2" 139 | resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.14.2.tgz#3a8d0d14abab4bb1095e101ee44dc5e3e43e6217" 140 | integrity sha512-3nr5gsAf/J/W+6Tu4NF3Q7m+1mXjfpXESh7TPa6UR6v3tVDTsJVMrITg2BkHN1jM8xELcl2ZxyUffOWqOXzWuA== 141 | dependencies: 142 | "@react-aria/ssr" "^3.4.1" 143 | "@react-stately/utils" "^3.5.2" 144 | "@react-types/shared" "^3.16.0" 145 | "@swc/helpers" "^0.4.14" 146 | clsx "^1.1.1" 147 | 148 | "@react-stately/utils@^3.5.2": 149 | version "3.6.0" 150 | resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.6.0.tgz#f273e7fcb348254347d2e88c8f0c45571060c207" 151 | integrity sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q== 152 | dependencies: 153 | "@swc/helpers" "^0.4.14" 154 | 155 | "@react-types/shared@^3.16.0": 156 | version "3.17.0" 157 | resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.17.0.tgz#b7c5e318664aadb315d305a27dd2a209d1837d95" 158 | integrity sha512-1SNZ/RhVrrQ1e6yE0bPV7d5Sfp+Uv0dfUEhwF9MAu2v5msu7AMewnsiojKNA0QA6Ing1gpDLjHCxtayQfuxqcg== 159 | 160 | "@reduxjs/toolkit@^1.9.3": 161 | version "1.9.3" 162 | resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.3.tgz#27e1a33072b5a312e4f7fa19247fec160bbb2df9" 163 | integrity sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg== 164 | dependencies: 165 | immer "^9.0.16" 166 | redux "^4.2.0" 167 | redux-thunk "^2.4.2" 168 | reselect "^4.1.7" 169 | 170 | "@swc/helpers@0.4.14", "@swc/helpers@^0.4.14": 171 | version "0.4.14" 172 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" 173 | integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== 174 | dependencies: 175 | tslib "^2.4.0" 176 | 177 | "@types/hoist-non-react-statics@^3.3.1": 178 | version "3.3.1" 179 | resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" 180 | integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== 181 | dependencies: 182 | "@types/react" "*" 183 | hoist-non-react-statics "^3.3.0" 184 | 185 | "@types/node@*": 186 | version "18.15.3" 187 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" 188 | integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== 189 | 190 | "@types/prop-types@*": 191 | version "15.7.5" 192 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 193 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 194 | 195 | "@types/react@*": 196 | version "18.0.28" 197 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.28.tgz#accaeb8b86f4908057ad629a26635fe641480065" 198 | integrity sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew== 199 | dependencies: 200 | "@types/prop-types" "*" 201 | "@types/scheduler" "*" 202 | csstype "^3.0.2" 203 | 204 | "@types/scheduler@*": 205 | version "0.16.2" 206 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" 207 | integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== 208 | 209 | "@types/use-sync-external-store@^0.0.3": 210 | version "0.0.3" 211 | resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" 212 | integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== 213 | 214 | "@types/webidl-conversions@*": 215 | version "7.0.0" 216 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" 217 | integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog== 218 | 219 | "@types/whatwg-url@^8.2.1": 220 | version "8.2.2" 221 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" 222 | integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== 223 | dependencies: 224 | "@types/node" "*" 225 | "@types/webidl-conversions" "*" 226 | 227 | abbrev@1: 228 | version "1.1.1" 229 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 230 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 231 | 232 | acorn-node@^1.8.2: 233 | version "1.8.2" 234 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 235 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 236 | dependencies: 237 | acorn "^7.0.0" 238 | acorn-walk "^7.0.0" 239 | xtend "^4.0.2" 240 | 241 | acorn-walk@^7.0.0: 242 | version "7.2.0" 243 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" 244 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 245 | 246 | acorn@^7.0.0: 247 | version "7.4.1" 248 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 249 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 250 | 251 | agent-base@6: 252 | version "6.0.2" 253 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 254 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 255 | dependencies: 256 | debug "4" 257 | 258 | ansi-regex@^5.0.1: 259 | version "5.0.1" 260 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 261 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 262 | 263 | anymatch@~3.1.2: 264 | version "3.1.3" 265 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 266 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 267 | dependencies: 268 | normalize-path "^3.0.0" 269 | picomatch "^2.0.4" 270 | 271 | "aproba@^1.0.3 || ^2.0.0": 272 | version "2.0.0" 273 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" 274 | integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== 275 | 276 | are-we-there-yet@^2.0.0: 277 | version "2.0.0" 278 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" 279 | integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== 280 | dependencies: 281 | delegates "^1.0.0" 282 | readable-stream "^3.6.0" 283 | 284 | arg@^5.0.2: 285 | version "5.0.2" 286 | resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" 287 | integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== 288 | 289 | asynckit@^0.4.0: 290 | version "0.4.0" 291 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 292 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 293 | 294 | autoprefixer@^10.4.14: 295 | version "10.4.14" 296 | resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" 297 | integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== 298 | dependencies: 299 | browserslist "^4.21.5" 300 | caniuse-lite "^1.0.30001464" 301 | fraction.js "^4.2.0" 302 | normalize-range "^0.1.2" 303 | picocolors "^1.0.0" 304 | postcss-value-parser "^4.2.0" 305 | 306 | axios@^1.3.4: 307 | version "1.3.4" 308 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" 309 | integrity sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ== 310 | dependencies: 311 | follow-redirects "^1.15.0" 312 | form-data "^4.0.0" 313 | proxy-from-env "^1.1.0" 314 | 315 | balanced-match@^1.0.0: 316 | version "1.0.2" 317 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 318 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 319 | 320 | bcrypt@^5.1.0: 321 | version "5.1.0" 322 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.1.0.tgz#bbb27665dbc400480a524d8991ac7434e8529e17" 323 | integrity sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q== 324 | dependencies: 325 | "@mapbox/node-pre-gyp" "^1.0.10" 326 | node-addon-api "^5.0.0" 327 | 328 | binary-extensions@^2.0.0: 329 | version "2.2.0" 330 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 331 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 332 | 333 | brace-expansion@^1.1.7: 334 | version "1.1.11" 335 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 336 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 337 | dependencies: 338 | balanced-match "^1.0.0" 339 | concat-map "0.0.1" 340 | 341 | braces@^3.0.2, braces@~3.0.2: 342 | version "3.0.2" 343 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 344 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 345 | dependencies: 346 | fill-range "^7.0.1" 347 | 348 | browserslist@^4.21.5: 349 | version "4.21.5" 350 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 351 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 352 | dependencies: 353 | caniuse-lite "^1.0.30001449" 354 | electron-to-chromium "^1.4.284" 355 | node-releases "^2.0.8" 356 | update-browserslist-db "^1.0.10" 357 | 358 | bson@^5.0.1: 359 | version "5.0.1" 360 | resolved "https://registry.yarnpkg.com/bson/-/bson-5.0.1.tgz#4cd3eeeabf6652ef0d6ab600f9a18212d39baac3" 361 | integrity sha512-y09gBGusgHtinMon/GVbv1J6FrXhnr/+6hqLlSmEFzkz6PodqF6TxjyvfvY3AfO+oG1mgUtbC86xSbOlwvM62Q== 362 | 363 | camelcase-css@^2.0.1: 364 | version "2.0.1" 365 | resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 366 | integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 367 | 368 | caniuse-lite@^1.0.30001406: 369 | version "1.0.30001466" 370 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz#c1e6197c540392e09709ecaa9e3e403428c53375" 371 | integrity sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w== 372 | 373 | caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: 374 | version "1.0.30001467" 375 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001467.tgz#1afc9c16ed61f50dd87139da87ca43a3e0051c77" 376 | integrity sha512-cEdN/5e+RPikvl9AHm4uuLXxeCNq8rFsQ+lPHTfe/OtypP3WwnVVbjn+6uBV7PaFL6xUFzTh+sSCOz1rKhcO+Q== 377 | 378 | chokidar@^3.5.3: 379 | version "3.5.3" 380 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 381 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 382 | dependencies: 383 | anymatch "~3.1.2" 384 | braces "~3.0.2" 385 | glob-parent "~5.1.2" 386 | is-binary-path "~2.1.0" 387 | is-glob "~4.0.1" 388 | normalize-path "~3.0.0" 389 | readdirp "~3.6.0" 390 | optionalDependencies: 391 | fsevents "~2.3.2" 392 | 393 | chownr@^2.0.0: 394 | version "2.0.0" 395 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" 396 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== 397 | 398 | client-only@0.0.1: 399 | version "0.0.1" 400 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1" 401 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA== 402 | 403 | clsx@^1.1.1: 404 | version "1.2.1" 405 | resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" 406 | integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== 407 | 408 | color-name@^1.1.4: 409 | version "1.1.4" 410 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 411 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 412 | 413 | color-support@^1.1.2: 414 | version "1.1.3" 415 | resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" 416 | integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== 417 | 418 | combined-stream@^1.0.8: 419 | version "1.0.8" 420 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 421 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 422 | dependencies: 423 | delayed-stream "~1.0.0" 424 | 425 | concat-map@0.0.1: 426 | version "0.0.1" 427 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 428 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 429 | 430 | console-control-strings@^1.0.0, console-control-strings@^1.1.0: 431 | version "1.1.0" 432 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 433 | integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== 434 | 435 | crypto-js@^4.1.1: 436 | version "4.1.1" 437 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" 438 | integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== 439 | 440 | cssesc@^3.0.0: 441 | version "3.0.0" 442 | resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" 443 | integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 444 | 445 | csstype@^3.0.2: 446 | version "3.1.1" 447 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" 448 | integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== 449 | 450 | debug@4, debug@4.x: 451 | version "4.3.4" 452 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 453 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 454 | dependencies: 455 | ms "2.1.2" 456 | 457 | defined@^1.0.0: 458 | version "1.0.1" 459 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" 460 | integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== 461 | 462 | delayed-stream@~1.0.0: 463 | version "1.0.0" 464 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 465 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 466 | 467 | delegates@^1.0.0: 468 | version "1.0.0" 469 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 470 | integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== 471 | 472 | detect-libc@^2.0.0: 473 | version "2.0.1" 474 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" 475 | integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== 476 | 477 | detective@^5.2.1: 478 | version "5.2.1" 479 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" 480 | integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== 481 | dependencies: 482 | acorn-node "^1.8.2" 483 | defined "^1.0.0" 484 | minimist "^1.2.6" 485 | 486 | didyoumean@^1.2.2: 487 | version "1.2.2" 488 | resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" 489 | integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== 490 | 491 | dlv@^1.1.3: 492 | version "1.1.3" 493 | resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" 494 | integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== 495 | 496 | electron-to-chromium@^1.4.284: 497 | version "1.4.332" 498 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.332.tgz#b981fcf61587abe03c24b301b2cfbdcc2b70e8a5" 499 | integrity sha512-c1Vbv5tuUlBFp0mb3mCIjw+REEsgthRgNE8BlbEDKmvzb8rxjcVki6OkQP83vLN34s0XCxpSkq7AZNep1a6xhw== 500 | 501 | emoji-regex@^8.0.0: 502 | version "8.0.0" 503 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 504 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 505 | 506 | escalade@^3.1.1: 507 | version "3.1.1" 508 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 509 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 510 | 511 | express-validator@^6.15.0: 512 | version "6.15.0" 513 | resolved "https://registry.yarnpkg.com/express-validator/-/express-validator-6.15.0.tgz#5e4601428960b0d66f5f4ae09cb32ed2077374a4" 514 | integrity sha512-r05VYoBL3i2pswuehoFSy+uM8NBuVaY7avp5qrYjQBDzagx2Z5A77FZqPT8/gNLF3HopWkIzaTFaC4JysWXLqg== 515 | dependencies: 516 | lodash "^4.17.21" 517 | validator "^13.9.0" 518 | 519 | fast-glob@^3.2.12: 520 | version "3.2.12" 521 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" 522 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 523 | dependencies: 524 | "@nodelib/fs.stat" "^2.0.2" 525 | "@nodelib/fs.walk" "^1.2.3" 526 | glob-parent "^5.1.2" 527 | merge2 "^1.3.0" 528 | micromatch "^4.0.4" 529 | 530 | fastq@^1.6.0: 531 | version "1.15.0" 532 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" 533 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 534 | dependencies: 535 | reusify "^1.0.4" 536 | 537 | fill-range@^7.0.1: 538 | version "7.0.1" 539 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 540 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 541 | dependencies: 542 | to-regex-range "^5.0.1" 543 | 544 | focus-trap-react@^10.1.1: 545 | version "10.1.1" 546 | resolved "https://registry.yarnpkg.com/focus-trap-react/-/focus-trap-react-10.1.1.tgz#c14e150076827905b7b32b9d02d6d97534dfaa99" 547 | integrity sha512-OtLeSIQPKFzMzbLHkGtfZYwGLMhTRHd3CDhfyd0DDx8tvXzlgpseClDiuiKoiIHZtdjsbXTfTmUuuLKaxrwSyQ== 548 | dependencies: 549 | focus-trap "^7.4.0" 550 | tabbable "^6.1.1" 551 | 552 | focus-trap@^7.4.0: 553 | version "7.4.0" 554 | resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.4.0.tgz#20f760a497f593b01d2e446168009c1f12ab0385" 555 | integrity sha512-yI7FwUqU4TVb+7t6PaQ3spT/42r/KLEi8mtdGoQo2li/kFzmu9URmalTvw7xCCJtSOyhBxscvEAmvjeN9iHARg== 556 | dependencies: 557 | tabbable "^6.1.1" 558 | 559 | follow-redirects@^1.15.0: 560 | version "1.15.2" 561 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 562 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 563 | 564 | form-data@^4.0.0: 565 | version "4.0.0" 566 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 567 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 568 | dependencies: 569 | asynckit "^0.4.0" 570 | combined-stream "^1.0.8" 571 | mime-types "^2.1.12" 572 | 573 | fraction.js@^4.2.0: 574 | version "4.2.0" 575 | resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" 576 | integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== 577 | 578 | framer-motion@^10.5.0: 579 | version "10.5.0" 580 | resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-10.5.0.tgz#0519193acdd60669ec27fde948a389d8e1f5251b" 581 | integrity sha512-84Gh6Ct+KCk82YOnS7oq68IMlqcyaejrj2Xtxmh+CPOi7gqa1SZORZYWMJujQ2Qw0YRM2j1xQQdQo/+BtoQicQ== 582 | dependencies: 583 | tslib "^2.4.0" 584 | optionalDependencies: 585 | "@emotion/is-prop-valid" "^0.8.2" 586 | 587 | fs-minipass@^2.0.0: 588 | version "2.1.0" 589 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" 590 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== 591 | dependencies: 592 | minipass "^3.0.0" 593 | 594 | fs.realpath@^1.0.0: 595 | version "1.0.0" 596 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 597 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 598 | 599 | fsevents@~2.3.2: 600 | version "2.3.2" 601 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 602 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 603 | 604 | function-bind@^1.1.1: 605 | version "1.1.1" 606 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 607 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 608 | 609 | gauge@^3.0.0: 610 | version "3.0.2" 611 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" 612 | integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== 613 | dependencies: 614 | aproba "^1.0.3 || ^2.0.0" 615 | color-support "^1.1.2" 616 | console-control-strings "^1.0.0" 617 | has-unicode "^2.0.1" 618 | object-assign "^4.1.1" 619 | signal-exit "^3.0.0" 620 | string-width "^4.2.3" 621 | strip-ansi "^6.0.1" 622 | wide-align "^1.1.2" 623 | 624 | glob-parent@^5.1.2, glob-parent@~5.1.2: 625 | version "5.1.2" 626 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 627 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 628 | dependencies: 629 | is-glob "^4.0.1" 630 | 631 | glob-parent@^6.0.2: 632 | version "6.0.2" 633 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 634 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 635 | dependencies: 636 | is-glob "^4.0.3" 637 | 638 | glob@^7.1.3: 639 | version "7.2.3" 640 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 641 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 642 | dependencies: 643 | fs.realpath "^1.0.0" 644 | inflight "^1.0.4" 645 | inherits "2" 646 | minimatch "^3.1.1" 647 | once "^1.3.0" 648 | path-is-absolute "^1.0.0" 649 | 650 | goober@^2.1.10: 651 | version "2.1.12" 652 | resolved "https://registry.yarnpkg.com/goober/-/goober-2.1.12.tgz#6c1645314ac9a68fe76408e1f502c63df8a39042" 653 | integrity sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q== 654 | 655 | has-unicode@^2.0.1: 656 | version "2.0.1" 657 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 658 | integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== 659 | 660 | has@^1.0.3: 661 | version "1.0.3" 662 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 663 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 664 | dependencies: 665 | function-bind "^1.1.1" 666 | 667 | hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: 668 | version "3.3.2" 669 | resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" 670 | integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== 671 | dependencies: 672 | react-is "^16.7.0" 673 | 674 | https-proxy-agent@^5.0.0: 675 | version "5.0.1" 676 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 677 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 678 | dependencies: 679 | agent-base "6" 680 | debug "4" 681 | 682 | immer@^9.0.16: 683 | version "9.0.19" 684 | resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b" 685 | integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ== 686 | 687 | inflight@^1.0.4: 688 | version "1.0.6" 689 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 690 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 691 | dependencies: 692 | once "^1.3.0" 693 | wrappy "1" 694 | 695 | inherits@2, inherits@^2.0.3: 696 | version "2.0.4" 697 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 698 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 699 | 700 | ip@^2.0.0: 701 | version "2.0.0" 702 | resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" 703 | integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== 704 | 705 | is-binary-path@~2.1.0: 706 | version "2.1.0" 707 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 708 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 709 | dependencies: 710 | binary-extensions "^2.0.0" 711 | 712 | is-core-module@^2.9.0: 713 | version "2.11.0" 714 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 715 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 716 | dependencies: 717 | has "^1.0.3" 718 | 719 | is-extglob@^2.1.1: 720 | version "2.1.1" 721 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 722 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 723 | 724 | is-fullwidth-code-point@^3.0.0: 725 | version "3.0.0" 726 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 727 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 728 | 729 | is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 730 | version "4.0.3" 731 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 732 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 733 | dependencies: 734 | is-extglob "^2.1.1" 735 | 736 | is-number@^7.0.0: 737 | version "7.0.0" 738 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 739 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 740 | 741 | "js-tokens@^3.0.0 || ^4.0.0": 742 | version "4.0.0" 743 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 744 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 745 | 746 | kareem@2.5.1: 747 | version "2.5.1" 748 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.5.1.tgz#7b8203e11819a8e77a34b3517d3ead206764d15d" 749 | integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA== 750 | 751 | lilconfig@^2.0.5, lilconfig@^2.0.6: 752 | version "2.1.0" 753 | resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" 754 | integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== 755 | 756 | lodash@^4.17.21: 757 | version "4.17.21" 758 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 759 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 760 | 761 | loose-envify@^1.1.0, loose-envify@^1.4.0: 762 | version "1.4.0" 763 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 764 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 765 | dependencies: 766 | js-tokens "^3.0.0 || ^4.0.0" 767 | 768 | lru-cache@^6.0.0: 769 | version "6.0.0" 770 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 771 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 772 | dependencies: 773 | yallist "^4.0.0" 774 | 775 | make-dir@^3.1.0: 776 | version "3.1.0" 777 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 778 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 779 | dependencies: 780 | semver "^6.0.0" 781 | 782 | memory-pager@^1.0.2: 783 | version "1.5.0" 784 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 785 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 786 | 787 | merge2@^1.3.0: 788 | version "1.4.1" 789 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 790 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 791 | 792 | micromatch@^4.0.4, micromatch@^4.0.5: 793 | version "4.0.5" 794 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 795 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 796 | dependencies: 797 | braces "^3.0.2" 798 | picomatch "^2.3.1" 799 | 800 | mime-db@1.52.0: 801 | version "1.52.0" 802 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 803 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 804 | 805 | mime-types@^2.1.12: 806 | version "2.1.35" 807 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 808 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 809 | dependencies: 810 | mime-db "1.52.0" 811 | 812 | minimatch@^3.1.1: 813 | version "3.1.2" 814 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 815 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 816 | dependencies: 817 | brace-expansion "^1.1.7" 818 | 819 | minimist@^1.2.6: 820 | version "1.2.8" 821 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 822 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 823 | 824 | minipass@^3.0.0: 825 | version "3.3.6" 826 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" 827 | integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== 828 | dependencies: 829 | yallist "^4.0.0" 830 | 831 | minipass@^4.0.0: 832 | version "4.2.5" 833 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" 834 | integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== 835 | 836 | minizlib@^2.1.1: 837 | version "2.1.2" 838 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" 839 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== 840 | dependencies: 841 | minipass "^3.0.0" 842 | yallist "^4.0.0" 843 | 844 | mkdirp@^1.0.3: 845 | version "1.0.4" 846 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 847 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 848 | 849 | mongodb-connection-string-url@^2.6.0: 850 | version "2.6.0" 851 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" 852 | integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== 853 | dependencies: 854 | "@types/whatwg-url" "^8.2.1" 855 | whatwg-url "^11.0.0" 856 | 857 | mongodb@5.1.0: 858 | version "5.1.0" 859 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-5.1.0.tgz#e551f9e496777bde9173e51d16c163ab2c805b9d" 860 | integrity sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw== 861 | dependencies: 862 | bson "^5.0.1" 863 | mongodb-connection-string-url "^2.6.0" 864 | socks "^2.7.1" 865 | optionalDependencies: 866 | saslprep "^1.0.3" 867 | 868 | mongoose@^7.0.1: 869 | version "7.0.1" 870 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-7.0.1.tgz#9afc737d10b3920c2c9b77ac5ac77fd6ff828d3d" 871 | integrity sha512-fxm2bPRG457Hb8RLwN8cMCokK8HNem/7g+qp5SrHC7Pt4Z4jqn1+/3cuc8W7uqehKDWEtpirggI7uw08x2ZIjQ== 872 | dependencies: 873 | bson "^5.0.1" 874 | kareem "2.5.1" 875 | mongodb "5.1.0" 876 | mpath "0.9.0" 877 | mquery "5.0.0" 878 | ms "2.1.3" 879 | sift "16.0.1" 880 | 881 | mpath@0.9.0: 882 | version "0.9.0" 883 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" 884 | integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== 885 | 886 | mquery@5.0.0: 887 | version "5.0.0" 888 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-5.0.0.tgz#a95be5dfc610b23862df34a47d3e5d60e110695d" 889 | integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg== 890 | dependencies: 891 | debug "4.x" 892 | 893 | ms@2.1.2: 894 | version "2.1.2" 895 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 896 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 897 | 898 | ms@2.1.3: 899 | version "2.1.3" 900 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 901 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 902 | 903 | nanoid@^2.1.0: 904 | version "2.1.11" 905 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.11.tgz#ec24b8a758d591561531b4176a01e3ab4f0f0280" 906 | integrity sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA== 907 | 908 | nanoid@^3.3.4: 909 | version "3.3.4" 910 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" 911 | integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== 912 | 913 | nanoid@^4.0.1: 914 | version "4.0.1" 915 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.1.tgz#398d7ccfdbf9faf2231b2ca7e8fff5dbca6a509b" 916 | integrity sha512-udKGtCCUafD3nQtJg9wBhRP3KMbPglUsgV5JVsXhvyBs/oefqb4sqMEhKBBgqZncYowu58p1prsZQBYvAj/Gww== 917 | 918 | next@13.2.4: 919 | version "13.2.4" 920 | resolved "https://registry.yarnpkg.com/next/-/next-13.2.4.tgz#2363330392b0f7da02ab41301f60857ffa7f67d6" 921 | integrity sha512-g1I30317cThkEpvzfXujf0O4wtaQHtDCLhlivwlTJ885Ld+eOgcz7r3TGQzeU+cSRoNHtD8tsJgzxVdYojFssw== 922 | dependencies: 923 | "@next/env" "13.2.4" 924 | "@swc/helpers" "0.4.14" 925 | caniuse-lite "^1.0.30001406" 926 | postcss "8.4.14" 927 | styled-jsx "5.1.1" 928 | optionalDependencies: 929 | "@next/swc-android-arm-eabi" "13.2.4" 930 | "@next/swc-android-arm64" "13.2.4" 931 | "@next/swc-darwin-arm64" "13.2.4" 932 | "@next/swc-darwin-x64" "13.2.4" 933 | "@next/swc-freebsd-x64" "13.2.4" 934 | "@next/swc-linux-arm-gnueabihf" "13.2.4" 935 | "@next/swc-linux-arm64-gnu" "13.2.4" 936 | "@next/swc-linux-arm64-musl" "13.2.4" 937 | "@next/swc-linux-x64-gnu" "13.2.4" 938 | "@next/swc-linux-x64-musl" "13.2.4" 939 | "@next/swc-win32-arm64-msvc" "13.2.4" 940 | "@next/swc-win32-ia32-msvc" "13.2.4" 941 | "@next/swc-win32-x64-msvc" "13.2.4" 942 | 943 | node-addon-api@^5.0.0: 944 | version "5.1.0" 945 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" 946 | integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== 947 | 948 | node-fetch@^2.6.7: 949 | version "2.6.9" 950 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" 951 | integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== 952 | dependencies: 953 | whatwg-url "^5.0.0" 954 | 955 | node-releases@^2.0.8: 956 | version "2.0.10" 957 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" 958 | integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== 959 | 960 | nopt@^5.0.0: 961 | version "5.0.0" 962 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" 963 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== 964 | dependencies: 965 | abbrev "1" 966 | 967 | normalize-path@^3.0.0, normalize-path@~3.0.0: 968 | version "3.0.0" 969 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 970 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 971 | 972 | normalize-range@^0.1.2: 973 | version "0.1.2" 974 | resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 975 | integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 976 | 977 | npmlog@^5.0.1: 978 | version "5.0.1" 979 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" 980 | integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== 981 | dependencies: 982 | are-we-there-yet "^2.0.0" 983 | console-control-strings "^1.1.0" 984 | gauge "^3.0.0" 985 | set-blocking "^2.0.0" 986 | 987 | object-assign@^4.1.1: 988 | version "4.1.1" 989 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 990 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 991 | 992 | object-hash@^3.0.0: 993 | version "3.0.0" 994 | resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" 995 | integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== 996 | 997 | once@^1.3.0: 998 | version "1.4.0" 999 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1000 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 1001 | dependencies: 1002 | wrappy "1" 1003 | 1004 | path-is-absolute@^1.0.0: 1005 | version "1.0.1" 1006 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1007 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 1008 | 1009 | path-parse@^1.0.7: 1010 | version "1.0.7" 1011 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1012 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1013 | 1014 | picocolors@^1.0.0: 1015 | version "1.0.0" 1016 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1017 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1018 | 1019 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 1020 | version "2.3.1" 1021 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1022 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1023 | 1024 | pify@^2.3.0: 1025 | version "2.3.0" 1026 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1027 | integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== 1028 | 1029 | postcss-import@^14.1.0: 1030 | version "14.1.0" 1031 | resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-14.1.0.tgz#a7333ffe32f0b8795303ee9e40215dac922781f0" 1032 | integrity sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw== 1033 | dependencies: 1034 | postcss-value-parser "^4.0.0" 1035 | read-cache "^1.0.0" 1036 | resolve "^1.1.7" 1037 | 1038 | postcss-js@^4.0.0: 1039 | version "4.0.1" 1040 | resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" 1041 | integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== 1042 | dependencies: 1043 | camelcase-css "^2.0.1" 1044 | 1045 | postcss-load-config@^3.1.4: 1046 | version "3.1.4" 1047 | resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" 1048 | integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== 1049 | dependencies: 1050 | lilconfig "^2.0.5" 1051 | yaml "^1.10.2" 1052 | 1053 | postcss-nested@6.0.0: 1054 | version "6.0.0" 1055 | resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.0.tgz#1572f1984736578f360cffc7eb7dca69e30d1735" 1056 | integrity sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w== 1057 | dependencies: 1058 | postcss-selector-parser "^6.0.10" 1059 | 1060 | postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11: 1061 | version "6.0.11" 1062 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" 1063 | integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== 1064 | dependencies: 1065 | cssesc "^3.0.0" 1066 | util-deprecate "^1.0.2" 1067 | 1068 | postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: 1069 | version "4.2.0" 1070 | resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 1071 | integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 1072 | 1073 | postcss@8.4.14: 1074 | version "8.4.14" 1075 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" 1076 | integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== 1077 | dependencies: 1078 | nanoid "^3.3.4" 1079 | picocolors "^1.0.0" 1080 | source-map-js "^1.0.2" 1081 | 1082 | postcss@^8.0.9, postcss@^8.4.21: 1083 | version "8.4.21" 1084 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" 1085 | integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== 1086 | dependencies: 1087 | nanoid "^3.3.4" 1088 | picocolors "^1.0.0" 1089 | source-map-js "^1.0.2" 1090 | 1091 | prop-types@^15.8.1: 1092 | version "15.8.1" 1093 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 1094 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1095 | dependencies: 1096 | loose-envify "^1.4.0" 1097 | object-assign "^4.1.1" 1098 | react-is "^16.13.1" 1099 | 1100 | proxy-from-env@^1.1.0: 1101 | version "1.1.0" 1102 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 1103 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 1104 | 1105 | punycode@^2.1.1: 1106 | version "2.3.0" 1107 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" 1108 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== 1109 | 1110 | queue-microtask@^1.2.2: 1111 | version "1.2.3" 1112 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 1113 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1114 | 1115 | quick-lru@^5.1.1: 1116 | version "5.1.1" 1117 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 1118 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 1119 | 1120 | react-dom@18.2.0: 1121 | version "18.2.0" 1122 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 1123 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 1124 | dependencies: 1125 | loose-envify "^1.1.0" 1126 | scheduler "^0.23.0" 1127 | 1128 | react-hot-toast@^2.4.0: 1129 | version "2.4.0" 1130 | resolved "https://registry.yarnpkg.com/react-hot-toast/-/react-hot-toast-2.4.0.tgz#b91e7a4c1b6e3068fc599d3d83b4fb48668ae51d" 1131 | integrity sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA== 1132 | dependencies: 1133 | goober "^2.1.10" 1134 | 1135 | react-icons@^4.8.0: 1136 | version "4.8.0" 1137 | resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.8.0.tgz#621e900caa23b912f737e41be57f27f6b2bff445" 1138 | integrity sha512-N6+kOLcihDiAnj5Czu637waJqSnwlMNROzVZMhfX68V/9bu9qHaMIJC4UdozWoOk57gahFCNHwVvWzm0MTzRjg== 1139 | 1140 | react-is@^16.13.1, react-is@^16.7.0: 1141 | version "16.13.1" 1142 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 1143 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1144 | 1145 | react-is@^18.0.0: 1146 | version "18.2.0" 1147 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" 1148 | integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== 1149 | 1150 | react-modal-sheet@^1.10.1: 1151 | version "1.10.1" 1152 | resolved "https://registry.yarnpkg.com/react-modal-sheet/-/react-modal-sheet-1.10.1.tgz#969bd825b8ec8d57728bf901a07bf305b526e514" 1153 | integrity sha512-ZeFgkDL4fOKjDab1zWPjGBmL0FtA7hRtodZafT21X1uRRCP2rXJMNrETSyQKvffdXw/CaB2gYa/i0EWK8mMpuQ== 1154 | dependencies: 1155 | "@react-aria/utils" "3.14.2" 1156 | 1157 | react-redux@^8.0.5: 1158 | version "8.0.5" 1159 | resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.0.5.tgz#e5fb8331993a019b8aaf2e167a93d10af469c7bd" 1160 | integrity sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw== 1161 | dependencies: 1162 | "@babel/runtime" "^7.12.1" 1163 | "@types/hoist-non-react-statics" "^3.3.1" 1164 | "@types/use-sync-external-store" "^0.0.3" 1165 | hoist-non-react-statics "^3.3.2" 1166 | react-is "^18.0.0" 1167 | use-sync-external-store "^1.0.0" 1168 | 1169 | react@18.2.0: 1170 | version "18.2.0" 1171 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 1172 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 1173 | dependencies: 1174 | loose-envify "^1.1.0" 1175 | 1176 | read-cache@^1.0.0: 1177 | version "1.0.0" 1178 | resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" 1179 | integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== 1180 | dependencies: 1181 | pify "^2.3.0" 1182 | 1183 | readable-stream@^3.6.0: 1184 | version "3.6.2" 1185 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" 1186 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== 1187 | dependencies: 1188 | inherits "^2.0.3" 1189 | string_decoder "^1.1.1" 1190 | util-deprecate "^1.0.1" 1191 | 1192 | readdirp@~3.6.0: 1193 | version "3.6.0" 1194 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1195 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1196 | dependencies: 1197 | picomatch "^2.2.1" 1198 | 1199 | redux-thunk@^2.4.2: 1200 | version "2.4.2" 1201 | resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.4.2.tgz#b9d05d11994b99f7a91ea223e8b04cf0afa5ef3b" 1202 | integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== 1203 | 1204 | redux@^4.2.0: 1205 | version "4.2.1" 1206 | resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" 1207 | integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== 1208 | dependencies: 1209 | "@babel/runtime" "^7.9.2" 1210 | 1211 | regenerator-runtime@^0.13.11: 1212 | version "0.13.11" 1213 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1214 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1215 | 1216 | reselect@^4.1.7: 1217 | version "4.1.7" 1218 | resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.7.tgz#56480d9ff3d3188970ee2b76527bd94a95567a42" 1219 | integrity sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A== 1220 | 1221 | resolve@^1.1.7, resolve@^1.22.1: 1222 | version "1.22.1" 1223 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1224 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1225 | dependencies: 1226 | is-core-module "^2.9.0" 1227 | path-parse "^1.0.7" 1228 | supports-preserve-symlinks-flag "^1.0.0" 1229 | 1230 | reusify@^1.0.4: 1231 | version "1.0.4" 1232 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1233 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1234 | 1235 | rimraf@^3.0.2: 1236 | version "3.0.2" 1237 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1238 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1239 | dependencies: 1240 | glob "^7.1.3" 1241 | 1242 | run-parallel@^1.1.9: 1243 | version "1.2.0" 1244 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 1245 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1246 | dependencies: 1247 | queue-microtask "^1.2.2" 1248 | 1249 | safe-buffer@~5.2.0: 1250 | version "5.2.1" 1251 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1252 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1253 | 1254 | saslprep@^1.0.3: 1255 | version "1.0.3" 1256 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 1257 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 1258 | dependencies: 1259 | sparse-bitfield "^3.0.3" 1260 | 1261 | scheduler@^0.23.0: 1262 | version "0.23.0" 1263 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 1264 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 1265 | dependencies: 1266 | loose-envify "^1.1.0" 1267 | 1268 | semver@^6.0.0: 1269 | version "6.3.0" 1270 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1271 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1272 | 1273 | semver@^7.3.5: 1274 | version "7.3.8" 1275 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" 1276 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 1277 | dependencies: 1278 | lru-cache "^6.0.0" 1279 | 1280 | set-blocking@^2.0.0: 1281 | version "2.0.0" 1282 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1283 | integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== 1284 | 1285 | shortid@^2.2.16: 1286 | version "2.2.16" 1287 | resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.16.tgz#b742b8f0cb96406fd391c76bfc18a67a57fe5608" 1288 | integrity sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g== 1289 | dependencies: 1290 | nanoid "^2.1.0" 1291 | 1292 | sift@16.0.1: 1293 | version "16.0.1" 1294 | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.1.tgz#e9c2ccc72191585008cf3e36fc447b2d2633a053" 1295 | integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ== 1296 | 1297 | signal-exit@^3.0.0: 1298 | version "3.0.7" 1299 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1300 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1301 | 1302 | smart-buffer@^4.2.0: 1303 | version "4.2.0" 1304 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 1305 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 1306 | 1307 | socks@^2.7.1: 1308 | version "2.7.1" 1309 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" 1310 | integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== 1311 | dependencies: 1312 | ip "^2.0.0" 1313 | smart-buffer "^4.2.0" 1314 | 1315 | source-map-js@^1.0.2: 1316 | version "1.0.2" 1317 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1318 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1319 | 1320 | sparse-bitfield@^3.0.3: 1321 | version "3.0.3" 1322 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 1323 | integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== 1324 | dependencies: 1325 | memory-pager "^1.0.2" 1326 | 1327 | "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: 1328 | version "4.2.3" 1329 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1330 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1331 | dependencies: 1332 | emoji-regex "^8.0.0" 1333 | is-fullwidth-code-point "^3.0.0" 1334 | strip-ansi "^6.0.1" 1335 | 1336 | string_decoder@^1.1.1: 1337 | version "1.3.0" 1338 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1339 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1340 | dependencies: 1341 | safe-buffer "~5.2.0" 1342 | 1343 | strip-ansi@^6.0.1: 1344 | version "6.0.1" 1345 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1346 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1347 | dependencies: 1348 | ansi-regex "^5.0.1" 1349 | 1350 | styled-jsx@5.1.1: 1351 | version "5.1.1" 1352 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f" 1353 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw== 1354 | dependencies: 1355 | client-only "0.0.1" 1356 | 1357 | supports-preserve-symlinks-flag@^1.0.0: 1358 | version "1.0.0" 1359 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1360 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1361 | 1362 | tabbable@^6.1.1: 1363 | version "6.1.1" 1364 | resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.1.1.tgz#40cfead5ed11be49043f04436ef924c8890186a0" 1365 | integrity sha512-4kl5w+nCB44EVRdO0g/UGoOp3vlwgycUVtkk/7DPyeLZUCuNFFKCFG6/t/DgHLrUPHjrZg6s5tNm+56Q2B0xyg== 1366 | 1367 | tailwindcss@^3.2.7: 1368 | version "3.2.7" 1369 | resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.2.7.tgz#5936dd08c250b05180f0944500c01dce19188c07" 1370 | integrity sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ== 1371 | dependencies: 1372 | arg "^5.0.2" 1373 | chokidar "^3.5.3" 1374 | color-name "^1.1.4" 1375 | detective "^5.2.1" 1376 | didyoumean "^1.2.2" 1377 | dlv "^1.1.3" 1378 | fast-glob "^3.2.12" 1379 | glob-parent "^6.0.2" 1380 | is-glob "^4.0.3" 1381 | lilconfig "^2.0.6" 1382 | micromatch "^4.0.5" 1383 | normalize-path "^3.0.0" 1384 | object-hash "^3.0.0" 1385 | picocolors "^1.0.0" 1386 | postcss "^8.0.9" 1387 | postcss-import "^14.1.0" 1388 | postcss-js "^4.0.0" 1389 | postcss-load-config "^3.1.4" 1390 | postcss-nested "6.0.0" 1391 | postcss-selector-parser "^6.0.11" 1392 | postcss-value-parser "^4.2.0" 1393 | quick-lru "^5.1.1" 1394 | resolve "^1.22.1" 1395 | 1396 | tar@^6.1.11: 1397 | version "6.1.13" 1398 | resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" 1399 | integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== 1400 | dependencies: 1401 | chownr "^2.0.0" 1402 | fs-minipass "^2.0.0" 1403 | minipass "^4.0.0" 1404 | minizlib "^2.1.1" 1405 | mkdirp "^1.0.3" 1406 | yallist "^4.0.0" 1407 | 1408 | to-regex-range@^5.0.1: 1409 | version "5.0.1" 1410 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1411 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1412 | dependencies: 1413 | is-number "^7.0.0" 1414 | 1415 | tr46@^3.0.0: 1416 | version "3.0.0" 1417 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 1418 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1419 | dependencies: 1420 | punycode "^2.1.1" 1421 | 1422 | tr46@~0.0.3: 1423 | version "0.0.3" 1424 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1425 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1426 | 1427 | tslib@^2.4.0: 1428 | version "2.5.0" 1429 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" 1430 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== 1431 | 1432 | update-browserslist-db@^1.0.10: 1433 | version "1.0.10" 1434 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 1435 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 1436 | dependencies: 1437 | escalade "^3.1.1" 1438 | picocolors "^1.0.0" 1439 | 1440 | use-sync-external-store@^1.0.0: 1441 | version "1.2.0" 1442 | resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" 1443 | integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== 1444 | 1445 | util-deprecate@^1.0.1, util-deprecate@^1.0.2: 1446 | version "1.0.2" 1447 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1448 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 1449 | 1450 | validator@^13.9.0: 1451 | version "13.9.0" 1452 | resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" 1453 | integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== 1454 | 1455 | webidl-conversions@^3.0.0: 1456 | version "3.0.1" 1457 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1458 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1459 | 1460 | webidl-conversions@^7.0.0: 1461 | version "7.0.0" 1462 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 1463 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1464 | 1465 | whatwg-url@^11.0.0: 1466 | version "11.0.0" 1467 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 1468 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 1469 | dependencies: 1470 | tr46 "^3.0.0" 1471 | webidl-conversions "^7.0.0" 1472 | 1473 | whatwg-url@^5.0.0: 1474 | version "5.0.0" 1475 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1476 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1477 | dependencies: 1478 | tr46 "~0.0.3" 1479 | webidl-conversions "^3.0.0" 1480 | 1481 | wide-align@^1.1.2: 1482 | version "1.1.5" 1483 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" 1484 | integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== 1485 | dependencies: 1486 | string-width "^1.0.2 || 2 || 3 || 4" 1487 | 1488 | wrappy@1: 1489 | version "1.0.2" 1490 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1491 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1492 | 1493 | xtend@^4.0.2: 1494 | version "4.0.2" 1495 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 1496 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 1497 | 1498 | yallist@^4.0.0: 1499 | version "4.0.0" 1500 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1501 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1502 | 1503 | yaml@^1.10.2: 1504 | version "1.10.2" 1505 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" 1506 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 1507 | --------------------------------------------------------------------------------