├── .gitignore ├── index.html ├── package.json ├── public └── vite.svg ├── src ├── App.css ├── App.jsx ├── api │ └── index.js ├── assets │ ├── CSV.png │ ├── csv.png │ ├── fonts │ │ ├── Poppins-Bold.ttf │ │ └── Poppins-Regular.ttf │ ├── loader_blue.svg │ ├── loader_white.svg │ └── react.svg ├── components │ ├── File.jsx │ └── styles │ │ └── fileItem.module.css ├── gx │ ├── signals │ │ ├── files.js │ │ └── loading.js │ └── store │ │ └── index.js ├── index.css ├── main.jsx └── utils │ └── index.js ├── vite.config.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | .CSV 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "csv-annotator-front", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@dilane3/gx": "^1.2.6", 13 | "axios": "^1.3.5", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0" 16 | }, 17 | "devDependencies": { 18 | "@types/react": "^18.0.28", 19 | "@types/react-dom": "^18.0.11", 20 | "@vitejs/plugin-react": "^3.1.0", 21 | "vite": "^4.2.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "PoppinsRegular"; 3 | src: url("./assets/fonts/Poppins-Regular.ttf"); 4 | } 5 | 6 | @font-face { 7 | font-family: "PoppinsBold"; 8 | src: url("./assets/fonts/Poppins-Bold.ttf"); 9 | } 10 | 11 | #root { 12 | max-width: 1280px; 13 | margin: 0; 14 | text-align: center; 15 | } 16 | 17 | .App { 18 | width: 100vw; 19 | } 20 | 21 | .logo { 22 | height: 6em; 23 | padding: 1.5em; 24 | will-change: filter; 25 | transition: filter 300ms; 26 | } 27 | .logo:hover { 28 | filter: drop-shadow(0 0 2em #646cffaa); 29 | } 30 | .logo.react:hover { 31 | filter: drop-shadow(0 0 2em #61dafbaa); 32 | } 33 | 34 | @keyframes logo-spin { 35 | from { 36 | transform: rotate(0deg); 37 | } 38 | to { 39 | transform: rotate(360deg); 40 | } 41 | } 42 | 43 | @media (prefers-reduced-motion: no-preference) { 44 | a:nth-of-type(2) .logo { 45 | animation: logo-spin infinite 20s linear; 46 | } 47 | } 48 | 49 | .card { 50 | padding: 2em; 51 | } 52 | 53 | .read-the-docs { 54 | color: #888; 55 | } 56 | 57 | .header { 58 | width: calc(100vw - 400px); 59 | height: 80px; 60 | display: flex; 61 | flex-direction: row; 62 | padding: 0 200px; 63 | justify-content: space-between; 64 | align-items: center; 65 | } 66 | 67 | .header span { 68 | font-size: 20px; 69 | font-family: "PoppinsBold"; 70 | } 71 | 72 | .main { 73 | width: calc(100vw - 400px); 74 | height: calc(100vh - 80px); 75 | display: flex; 76 | flex-direction: column; 77 | justify-content: flex-start; 78 | align-items: center; 79 | padding: 0 200px; 80 | } 81 | 82 | .main__title { 83 | max-width: 800px; 84 | margin-top: 40px; 85 | display: flex; 86 | flex-direction: column; 87 | justify-content: center; 88 | align-items: center; 89 | } 90 | 91 | .main__title h1 { 92 | font-size: 40px; 93 | font-weight: 600; 94 | font-family: "PoppinsBold"; 95 | } 96 | 97 | .main__title span { 98 | color: var(--color-primary); 99 | } 100 | 101 | .main__title p { 102 | font-size: 1.3rem; 103 | } 104 | 105 | .main__upload { 106 | width: 100%; 107 | min-height: 100px; 108 | margin-top: 20px; 109 | } 110 | 111 | .main__uploader { 112 | width: calc(100% - 20px); 113 | height: 60px; 114 | border-radius: 10px; 115 | background-color: var(--color-text); 116 | display: flex; 117 | flex-direction: row; 118 | justify-content: space-between; 119 | align-items: center; 120 | padding: 0 10px; 121 | } 122 | 123 | .main__chrono { 124 | width: 100px; 125 | padding: 10px 20px 5px 20px; 126 | background-color: var(--color-text); 127 | color: var(--color-text-dark); 128 | font-family: "PoppinsRegular"; 129 | font-size: 1rem; 130 | margin: 0 auto; 131 | border-radius: 10px 10px 0 0; 132 | } 133 | 134 | .upload__btn { 135 | display: flex; 136 | flex-direction: row; 137 | justify-content: space-between; 138 | align-items: center; 139 | width: 200px; 140 | background-color: rgb(207, 207, 207); 141 | color: rgb(82, 82, 82); 142 | font-family: "PoppinsRegular"; 143 | transition: all 0.2s; 144 | } 145 | 146 | .upload__btn.active { 147 | background-color: var(--color-primary); 148 | color: #fff; 149 | font-family: "PoppinsBold"; 150 | } 151 | 152 | .upload__btn.active svg { 153 | fill: var(--color-text); 154 | } 155 | 156 | .upload__btn svg { 157 | fill: rgb(82, 82, 82); 158 | } 159 | 160 | .main__results { 161 | background-color: var(--color-primary); 162 | display: flex; 163 | align-items: center; 164 | } 165 | 166 | .main__results span { 167 | margin-left: 20px; 168 | } 169 | 170 | .main__results svg path { 171 | fill: var(--color-text); 172 | } 173 | 174 | .main__uploader__title { 175 | position: relative; 176 | font-family: "PoppinsRegular"; 177 | color: var(--color-text-dark); 178 | background-color: var(--color-text); 179 | border: 1px solid #888; 180 | cursor: pointer; 181 | display: flex; 182 | flex-direction: row; 183 | justify-content: space-between; 184 | align-items: center; 185 | width: 180px; 186 | transition: all 0.3s; 187 | } 188 | 189 | .main__uploader__title:hover { 190 | background-color: #eee; 191 | } 192 | 193 | .main__uploader__title > svg path { 194 | fill: var(--color-primary); 195 | } 196 | 197 | .badge { 198 | position: absolute; 199 | top: -5px; 200 | right: -10px; 201 | padding: 2px 7px; 202 | border-radius: 3px; 203 | background-color: rgb(238, 108, 108); 204 | color: var(--color-text); 205 | font-size: 10px; 206 | } 207 | 208 | .main__files { 209 | width: calc(100%); 210 | max-height: 400px; 211 | height: auto; 212 | margin: 10px 0 20px 0; 213 | overflow-y: auto; 214 | overflow-x: hidden; 215 | } 216 | 217 | .tips { 218 | color: var(--color-text-dark); 219 | } 220 | 221 | @media screen and (max-width: 1100px) { 222 | .header, 223 | .main { 224 | padding: 0 100px; 225 | width: calc(100vw - 200px); 226 | } 227 | } 228 | 229 | @media screen and (max-width: 768px) { 230 | .header, 231 | .main { 232 | padding: 0 50px; 233 | width: calc(100vw - 100px); 234 | } 235 | 236 | .upload__btn, 237 | .main__uploader__title { 238 | width: auto; 239 | padding: 10px; 240 | } 241 | 242 | .tips { 243 | font-size: 12px; 244 | } 245 | } 246 | 247 | @media screen and (max-width: 600px) { 248 | .tips { 249 | display: none; 250 | } 251 | } 252 | 253 | @media screen and (max-width: 576px) { 254 | .header, 255 | .main { 256 | padding: 0 20px; 257 | width: calc(100vw - 40px); 258 | } 259 | 260 | .main__uploader { 261 | height: auto; 262 | flex-direction: column; 263 | justify-content: flex-start; 264 | align-items: center; 265 | padding: 10px; 266 | } 267 | 268 | .main__uploader button, 269 | .main__uploader a { 270 | width: 100%; 271 | display: flex; 272 | flex-direction: row; 273 | justify-content: center; 274 | } 275 | 276 | .main__uploader button svg { 277 | margin: 0 10px; 278 | } 279 | 280 | .main__uploader button span { 281 | margin: 0; 282 | } 283 | 284 | .main__uploader button:not(:last-child), 285 | .main__uploader a { 286 | margin-bottom: 10px; 287 | } 288 | 289 | .main__title h1 { 290 | font-size: 30px; 291 | font-weight: 600; 292 | font-family: "PoppinsBold"; 293 | } 294 | 295 | .main__title p { 296 | font-size: 1.2rem; 297 | } 298 | } 299 | 300 | @media screen and (max-width: 480px) { 301 | .header, 302 | .main { 303 | padding: 0 20px; 304 | width: calc(100vw - 40px); 305 | } 306 | } -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import reactLogo from "./assets/react.svg"; 3 | import viteLogo from "/vite.svg"; 4 | import loaderBlue from "./assets/loader_blue.svg"; 5 | import loaderWhite from "./assets/loader_white.svg"; 6 | import "./App.css"; 7 | import { FileItem } from "./components/File"; 8 | import { useActions, useSignal } from "@dilane3/gx"; 9 | import { useRef } from "react"; 10 | import { annotateCsv } from "./api"; 11 | import { instance } from "./api"; 12 | import { formatTime } from "./utils"; 13 | import { downloadBaseUrl } from "./utils"; 14 | 15 | function App() { 16 | // Global state 17 | const files = useSignal("files"); 18 | const { loading, finished, link } = useSignal("loading"); 19 | 20 | // Global actions 21 | const { addFiles } = useActions("files"); 22 | const { start, stop, setLink } = useActions("loading"); 23 | 24 | // Local state 25 | const [zip, setZip] = useState(null); 26 | const [counter, setCounter] = useState(0); 27 | 28 | // Ref section 29 | const inputRef = useRef(); 30 | 31 | // UseEffect section 32 | useEffect(() => { 33 | let timer; 34 | 35 | if (loading) { 36 | timer = setInterval(() => { 37 | setCounter((prev) => prev + 1); 38 | }, 1000); 39 | } 40 | 41 | return () => clearInterval(timer); 42 | }, [loading]); 43 | 44 | // Some functions 45 | const handleOpenFolder = () => { 46 | if (!loading && inputRef.current) inputRef.current.click(); 47 | }; 48 | 49 | const handleFileSelected = (event) => { 50 | // Add files to global state 51 | addFiles(event.target.files); 52 | 53 | // Empty files into input tag 54 | // inputRef.current.files; 55 | }; 56 | 57 | const handleSubmit = async () => { 58 | if (files.length === 0) return; 59 | 60 | // Start loading 61 | start(); 62 | setCounter(0); 63 | 64 | const { data } = await annotateCsv(files); 65 | 66 | console.log(data) 67 | 68 | if (data) { 69 | // Set link to download 70 | setLink(data.link); 71 | } 72 | 73 | // Stop loading 74 | stop(); 75 | }; 76 | 77 | const handleDownload = async (link) => { 78 | if (!finished) return; 79 | 80 | // Download file with custom name 81 | const { data } = await instance.get(`/static/${link}`, { 82 | responseType: "blob", 83 | headers: { 84 | "Access-Control-Allow-Origin": "*", 85 | }, 86 | }); 87 | 88 | // Create a blob link to download 89 | const urlToDownload = window.URL.createObjectURL(new Blob([data])); 90 | 91 | const filename = link.split("/").pop(); 92 | 93 | console.log({ urlToDownload }); 94 | 95 | // Add link to download 96 | setZip({ 97 | url: urlToDownload, 98 | name: filename, 99 | }); 100 | }; 101 | 102 | return ( 103 |
104 |
105 | .CSV 106 |
107 | 108 |
109 |
110 |

111 | Welcome to CSV ANNOTATOR 112 |

113 | 114 |

Upload yours clean CSV files and let us do the rest.

115 |
116 | 117 |
118 |
{formatTime(counter)}
119 |
120 | 128 | 129 | 151 | 152 | {finished && link !== null ? ( 153 | 154 | 176 | 177 | ) : ( 178 | 179 | Use Ctrl or Shift to select many files 180 | 181 | )} 182 | 183 | 197 |
198 | 199 |
200 | {files.map((file, index) => ( 201 | 202 | ))} 203 |
204 |
205 |
206 | 207 | 208 |
209 | ); 210 | } 211 | 212 | export default App; 213 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | // export const instance = axios.create({ 4 | // baseURL: "http://localhost:5000", 5 | // timeout: 86400000, 6 | // }); 7 | 8 | export const instance = axios.create({ 9 | baseURL: "https://csv-annotator.onrender.com", 10 | timeout: 86400000, 11 | }); 12 | 13 | export const annotateCsv = async (files) => { 14 | const formData = new FormData(); 15 | 16 | try { 17 | files.forEach((file) => { 18 | formData.append("image", file); 19 | }); 20 | 21 | const response = await instance.post("/api/annotation", formData, { 22 | headers: { 23 | "Content-Type": "multipart/form-data", 24 | "Access-Control-Allow-Origin": "*", 25 | }, 26 | }); 27 | 28 | if (response.status === 200) { 29 | return { data: response.data }; 30 | } else { 31 | return { error: "Something went wrong" }; 32 | } 33 | } catch (err) { 34 | console.log(err); 35 | 36 | return { error: "Something went wrong" }; 37 | } 38 | }; 39 | -------------------------------------------------------------------------------- /src/assets/CSV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dilane3/csv-annotator-web/f7e24f7459d61f76720a4d9b9503cdc6dc34511b/src/assets/CSV.png -------------------------------------------------------------------------------- /src/assets/csv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dilane3/csv-annotator-web/f7e24f7459d61f76720a4d9b9503cdc6dc34511b/src/assets/csv.png -------------------------------------------------------------------------------- /src/assets/fonts/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dilane3/csv-annotator-web/f7e24f7459d61f76720a4d9b9503cdc6dc34511b/src/assets/fonts/Poppins-Bold.ttf -------------------------------------------------------------------------------- /src/assets/fonts/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dilane3/csv-annotator-web/f7e24f7459d61f76720a4d9b9503cdc6dc34511b/src/assets/fonts/Poppins-Regular.ttf -------------------------------------------------------------------------------- /src/assets/loader_blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/loader_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/File.jsx: -------------------------------------------------------------------------------- 1 | import styles from "./styles/fileItem.module.css"; 2 | import csvLogo from "../assets/csv.png"; 3 | import { useAction, useSignal } from "@dilane3/gx"; 4 | import { formatSize } from "../utils"; 5 | 6 | export const FileItem = ({ file }) => { 7 | // Global action 8 | const removeFile = useAction("files", "removeFile"); 9 | 10 | // Global state 11 | const { loading } = useSignal("loading"); 12 | 13 | // Some logic 14 | const handleDelete = () => { 15 | if (!loading) { 16 | removeFile(file.name); 17 | } 18 | }; 19 | 20 | return ( 21 |
22 |
23 | 24 | 25 | {file.name} 26 |
27 | 28 |
29 | {formatSize(file.size)} 30 | 31 | 36 | 37 | 38 |
39 |
40 | ); 41 | }; 42 | -------------------------------------------------------------------------------- /src/components/styles/fileItem.module.css: -------------------------------------------------------------------------------- 1 | .file__item { 2 | width: calc(100% - 40px); 3 | height: 60px; 4 | display: flex; 5 | flex-direction: row; 6 | justify-content: space-between; 7 | align-items: center; 8 | background-color: var(--color-text); 9 | padding: 0 20px; 10 | } 11 | 12 | .file__item:not(:last-child) { 13 | border-bottom: 1px solid rgb(184, 184, 184); 14 | } 15 | 16 | .file__info { 17 | display: flex; 18 | align-items: center; 19 | justify-content: flex-start; 20 | } 21 | 22 | .file__image { 23 | object-fit: contain; 24 | } 25 | 26 | .file__name { 27 | font-size: 0.9rem; 28 | font-family: "PoppinsRegular"; 29 | color: var(--color-text-dark); 30 | margin-left: 10px; 31 | } 32 | 33 | .file__controls { 34 | width: 300px; 35 | display: flex; 36 | align-items: center; 37 | justify-content: space-between; 38 | } 39 | 40 | .file__controls svg { 41 | fill: rgb(252, 124, 124); 42 | width: 30px; 43 | height: 30px; 44 | transition: fill 0.2s; 45 | } 46 | 47 | .file__controls svg:hover { 48 | fill: rgb(243, 83, 83); 49 | } 50 | 51 | .file__size { 52 | font-size: 0.9rem; 53 | font-family: "PoppinsRegular"; 54 | color: rgb(99, 99, 99); 55 | } 56 | 57 | 58 | @media screen and (max-width: 768px) { 59 | .file__item { 60 | width: calc(100% - 20px); 61 | padding: 0 10px; 62 | } 63 | 64 | .file__controls { 65 | width: 200px; 66 | } 67 | } 68 | 69 | @media screen and (max-width: 576px) { 70 | .file__controls { 71 | width: 100px; 72 | } 73 | } -------------------------------------------------------------------------------- /src/gx/signals/files.js: -------------------------------------------------------------------------------- 1 | import { createSignal } from "@dilane3/gx"; 2 | 3 | const fileSignal = createSignal({ 4 | name: "files", 5 | state: [], 6 | actions: { 7 | addFiles: (state, payload) => { 8 | const files = [...state]; 9 | 10 | for (let file of payload) { 11 | const fileExtensionCorrect = file.name.split(".").pop() === "csv"; 12 | 13 | if (fileExtensionCorrect && !files.map((f) => f.name).includes(file.name)) { 14 | files.push(file); 15 | } 16 | } 17 | 18 | return files; 19 | }, 20 | removeFile: (state, payload) => { 21 | return state.filter((file) => file.name !== payload); 22 | }, 23 | }, 24 | }); 25 | 26 | export default fileSignal; 27 | -------------------------------------------------------------------------------- /src/gx/signals/loading.js: -------------------------------------------------------------------------------- 1 | import { createSignal } from "@dilane3/gx"; 2 | 3 | const loadingSignal = createSignal({ 4 | name: "loading", 5 | state: { 6 | loading: false, 7 | finished: false, 8 | link: null, 9 | }, 10 | actions: { 11 | stop: (state) => ({ ...state, loading: false, finished: true }), 12 | start: (state) => ({ ...state, loading: true, finished: false }), 13 | setLink: (state, payload) => ({ ...state, link: payload }), 14 | }, 15 | }); 16 | 17 | export default loadingSignal; 18 | -------------------------------------------------------------------------------- /src/gx/store/index.js: -------------------------------------------------------------------------------- 1 | import { createStore } from "@dilane3/gx"; 2 | import fileSignal from "../signals/files"; 3 | import loadingSignal from "../signals/loading"; 4 | 5 | export default createStore([fileSignal, loadingSignal]); 6 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | --color-primary: #535bf2; 10 | --color-text: rgba(255, 255, 255, 0.87); 11 | --color-text-dark: #1a1a1a; 12 | 13 | font-synthesis: none; 14 | text-rendering: optimizeLegibility; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | -webkit-text-size-adjust: 100%; 18 | } 19 | 20 | a { 21 | font-weight: 500; 22 | color: #646cff; 23 | text-decoration: inherit; 24 | } 25 | a:hover { 26 | color: #535bf2; 27 | } 28 | 29 | body { 30 | margin: 0; 31 | display: flex; 32 | min-width: 320px; 33 | min-height: 100vh; 34 | /* overflow-x: hidden; */ 35 | } 36 | 37 | h1 { 38 | font-size: 3.2em; 39 | line-height: 1.1; 40 | margin: 0 10px; 41 | } 42 | 43 | button { 44 | border-radius: 8px; 45 | border: 1px solid transparent; 46 | padding: 0.6em 1.2em; 47 | font-size: 1em; 48 | font-weight: 500; 49 | font-family: inherit; 50 | background-color: #1a1a1a; 51 | cursor: pointer; 52 | transition: all 0.25s; 53 | } 54 | button.active:hover { 55 | background-color: #646cff; 56 | } 57 | button:focus, 58 | button:focus-visible { 59 | outline: 4px auto -webkit-focus-ring-color; 60 | } 61 | 62 | @media (prefers-color-scheme: light) { 63 | :root { 64 | color: #213547; 65 | background-color: #ffffff; 66 | } 67 | a:hover { 68 | color: #747bff; 69 | } 70 | button { 71 | background-color: #f9f9f9; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/main.jsx: -------------------------------------------------------------------------------- 1 | import GXProvider from "@dilane3/gx"; 2 | import React from "react"; 3 | import ReactDOM from "react-dom/client"; 4 | import App from "./App"; 5 | import store from "./gx/store"; 6 | import "./index.css"; 7 | 8 | ReactDOM.createRoot(document.getElementById("root")).render( 9 | 10 | 11 | 12 | ); 13 | -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | export const formatSize = (size) => { 2 | if (size < 1000) return `${size} o`; 3 | if (size < 10000) return `${Math.floor((size / 1024) * 100) / 100} Ko`; 4 | }; 5 | 6 | export const formatTime = (time) => { 7 | let remainingTime = time; 8 | 9 | const hours = Math.floor(remainingTime / 3600); 10 | remainingTime -= hours * 3600; 11 | 12 | const minutes = Math.floor(remainingTime / 60); 13 | remainingTime -= minutes * 60; 14 | 15 | const seconds = remainingTime; 16 | 17 | const hourstoString = hours < 10 ? `0${hours}` : `${hours}`; 18 | const minutestoString = minutes < 10 ? `0${minutes}` : `${minutes}`; 19 | const secondstoString = seconds < 10 ? `0${seconds}` : `${seconds}`; 20 | 21 | return `${hourstoString}:${minutestoString}:${secondstoString}`; 22 | } 23 | 24 | // export const downloadBaseUrl = "http://localhost:5000/static"; 25 | export const downloadBaseUrl = "https://csv-annotator.onrender.com/static"; -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.2.0": 6 | version "2.2.1" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" 8 | integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.3.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": 14 | version "7.21.4" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" 16 | integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.21.4": 21 | version "7.21.4" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" 23 | integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== 24 | 25 | "@babel/core@^7.20.12": 26 | version "7.21.4" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" 28 | integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== 29 | dependencies: 30 | "@ampproject/remapping" "^2.2.0" 31 | "@babel/code-frame" "^7.21.4" 32 | "@babel/generator" "^7.21.4" 33 | "@babel/helper-compilation-targets" "^7.21.4" 34 | "@babel/helper-module-transforms" "^7.21.2" 35 | "@babel/helpers" "^7.21.0" 36 | "@babel/parser" "^7.21.4" 37 | "@babel/template" "^7.20.7" 38 | "@babel/traverse" "^7.21.4" 39 | "@babel/types" "^7.21.4" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.2" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.21.4": 47 | version "7.21.4" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" 49 | integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== 50 | dependencies: 51 | "@babel/types" "^7.21.4" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | "@jridgewell/trace-mapping" "^0.3.17" 54 | jsesc "^2.5.1" 55 | 56 | "@babel/helper-compilation-targets@^7.21.4": 57 | version "7.21.4" 58 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" 59 | integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== 60 | dependencies: 61 | "@babel/compat-data" "^7.21.4" 62 | "@babel/helper-validator-option" "^7.21.0" 63 | browserslist "^4.21.3" 64 | lru-cache "^5.1.1" 65 | semver "^6.3.0" 66 | 67 | "@babel/helper-environment-visitor@^7.18.9": 68 | version "7.18.9" 69 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 70 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 71 | 72 | "@babel/helper-function-name@^7.21.0": 73 | version "7.21.0" 74 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" 75 | integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== 76 | dependencies: 77 | "@babel/template" "^7.20.7" 78 | "@babel/types" "^7.21.0" 79 | 80 | "@babel/helper-hoist-variables@^7.18.6": 81 | version "7.18.6" 82 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 83 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 84 | dependencies: 85 | "@babel/types" "^7.18.6" 86 | 87 | "@babel/helper-module-imports@^7.18.6": 88 | version "7.21.4" 89 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" 90 | integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== 91 | dependencies: 92 | "@babel/types" "^7.21.4" 93 | 94 | "@babel/helper-module-transforms@^7.21.2": 95 | version "7.21.2" 96 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" 97 | integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== 98 | dependencies: 99 | "@babel/helper-environment-visitor" "^7.18.9" 100 | "@babel/helper-module-imports" "^7.18.6" 101 | "@babel/helper-simple-access" "^7.20.2" 102 | "@babel/helper-split-export-declaration" "^7.18.6" 103 | "@babel/helper-validator-identifier" "^7.19.1" 104 | "@babel/template" "^7.20.7" 105 | "@babel/traverse" "^7.21.2" 106 | "@babel/types" "^7.21.2" 107 | 108 | "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2": 109 | version "7.20.2" 110 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 111 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 112 | 113 | "@babel/helper-simple-access@^7.20.2": 114 | version "7.20.2" 115 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 116 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 117 | dependencies: 118 | "@babel/types" "^7.20.2" 119 | 120 | "@babel/helper-split-export-declaration@^7.18.6": 121 | version "7.18.6" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 123 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 124 | dependencies: 125 | "@babel/types" "^7.18.6" 126 | 127 | "@babel/helper-string-parser@^7.19.4": 128 | version "7.19.4" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 130 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 131 | 132 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 133 | version "7.19.1" 134 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 135 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 136 | 137 | "@babel/helper-validator-option@^7.21.0": 138 | version "7.21.0" 139 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" 140 | integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== 141 | 142 | "@babel/helpers@^7.21.0": 143 | version "7.21.0" 144 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" 145 | integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== 146 | dependencies: 147 | "@babel/template" "^7.20.7" 148 | "@babel/traverse" "^7.21.0" 149 | "@babel/types" "^7.21.0" 150 | 151 | "@babel/highlight@^7.18.6": 152 | version "7.18.6" 153 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 154 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 155 | dependencies: 156 | "@babel/helper-validator-identifier" "^7.18.6" 157 | chalk "^2.0.0" 158 | js-tokens "^4.0.0" 159 | 160 | "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": 161 | version "7.21.4" 162 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" 163 | integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== 164 | 165 | "@babel/plugin-transform-react-jsx-self@^7.18.6": 166 | version "7.21.0" 167 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz#ec98d4a9baafc5a1eb398da4cf94afbb40254a54" 168 | integrity sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA== 169 | dependencies: 170 | "@babel/helper-plugin-utils" "^7.20.2" 171 | 172 | "@babel/plugin-transform-react-jsx-source@^7.19.6": 173 | version "7.19.6" 174 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz#88578ae8331e5887e8ce28e4c9dc83fb29da0b86" 175 | integrity sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ== 176 | dependencies: 177 | "@babel/helper-plugin-utils" "^7.19.0" 178 | 179 | "@babel/template@^7.20.7": 180 | version "7.20.7" 181 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" 182 | integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== 183 | dependencies: 184 | "@babel/code-frame" "^7.18.6" 185 | "@babel/parser" "^7.20.7" 186 | "@babel/types" "^7.20.7" 187 | 188 | "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": 189 | version "7.21.4" 190 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" 191 | integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== 192 | dependencies: 193 | "@babel/code-frame" "^7.21.4" 194 | "@babel/generator" "^7.21.4" 195 | "@babel/helper-environment-visitor" "^7.18.9" 196 | "@babel/helper-function-name" "^7.21.0" 197 | "@babel/helper-hoist-variables" "^7.18.6" 198 | "@babel/helper-split-export-declaration" "^7.18.6" 199 | "@babel/parser" "^7.21.4" 200 | "@babel/types" "^7.21.4" 201 | debug "^4.1.0" 202 | globals "^11.1.0" 203 | 204 | "@babel/types@^7.18.6", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4": 205 | version "7.21.4" 206 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" 207 | integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== 208 | dependencies: 209 | "@babel/helper-string-parser" "^7.19.4" 210 | "@babel/helper-validator-identifier" "^7.19.1" 211 | to-fast-properties "^2.0.0" 212 | 213 | "@dilane3/gx@^1.2.6": 214 | version "1.2.6" 215 | resolved "https://registry.yarnpkg.com/@dilane3/gx/-/gx-1.2.6.tgz#1f51976856e65892377ca2de781bc6bad4570a60" 216 | integrity sha512-2svz9YX651q9PbDosXpElP8TRsXEw8NT1mmQm0IJIBEqCkJYtmyNG/7E6UnWpW8gN7Zcftl05n73608U68B0hQ== 217 | 218 | "@esbuild/android-arm64@0.17.16": 219 | version "0.17.16" 220 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz#7b18cab5f4d93e878306196eed26b6d960c12576" 221 | integrity sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q== 222 | 223 | "@esbuild/android-arm@0.17.16": 224 | version "0.17.16" 225 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.16.tgz#5c47f6a7c2cada6ed4b4d4e72d8c66e76d812812" 226 | integrity sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw== 227 | 228 | "@esbuild/android-x64@0.17.16": 229 | version "0.17.16" 230 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.16.tgz#8686a6e98359071ffd5312046551943e7244c51a" 231 | integrity sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow== 232 | 233 | "@esbuild/darwin-arm64@0.17.16": 234 | version "0.17.16" 235 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz#aa79fbf447630ca0696a596beba962a775bbf394" 236 | integrity sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA== 237 | 238 | "@esbuild/darwin-x64@0.17.16": 239 | version "0.17.16" 240 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz#d5d68ee510507104da7e7503224c647c957e163e" 241 | integrity sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ== 242 | 243 | "@esbuild/freebsd-arm64@0.17.16": 244 | version "0.17.16" 245 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz#b00b4cc8c2e424907cfe3a607384ab24794edd52" 246 | integrity sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA== 247 | 248 | "@esbuild/freebsd-x64@0.17.16": 249 | version "0.17.16" 250 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz#84af4430a07730b50bbc945a90cf7036c1853b76" 251 | integrity sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g== 252 | 253 | "@esbuild/linux-arm64@0.17.16": 254 | version "0.17.16" 255 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz#35571d15de6272c862d9ce6341372fb3cef0f266" 256 | integrity sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA== 257 | 258 | "@esbuild/linux-arm@0.17.16": 259 | version "0.17.16" 260 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz#b65c7cd5b0eadd08f91aab66b9dda81b6a4b2a70" 261 | integrity sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw== 262 | 263 | "@esbuild/linux-ia32@0.17.16": 264 | version "0.17.16" 265 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz#673a68cb251ce44a00a6422ada29064c5a1cd2c0" 266 | integrity sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA== 267 | 268 | "@esbuild/linux-loong64@0.17.16": 269 | version "0.17.16" 270 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz#477e2da34ab46ffdbf4740fa6441e80045249385" 271 | integrity sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ== 272 | 273 | "@esbuild/linux-mips64el@0.17.16": 274 | version "0.17.16" 275 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz#e1e9687bbdaa831d7c34edc9278200982c1a4bf4" 276 | integrity sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA== 277 | 278 | "@esbuild/linux-ppc64@0.17.16": 279 | version "0.17.16" 280 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz#2f19075d63622987e86e83a4b7866cd57b796c60" 281 | integrity sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q== 282 | 283 | "@esbuild/linux-riscv64@0.17.16": 284 | version "0.17.16" 285 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz#bbf40a38f03ba2434fe69b5ceeec5d13c742b329" 286 | integrity sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA== 287 | 288 | "@esbuild/linux-s390x@0.17.16": 289 | version "0.17.16" 290 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz#d2b8c0779ccd2b7917cdf0fab8831a468e0f9c01" 291 | integrity sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw== 292 | 293 | "@esbuild/linux-x64@0.17.16": 294 | version "0.17.16" 295 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz#da48b39cfdc1b12a74976625f583f031eac43590" 296 | integrity sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g== 297 | 298 | "@esbuild/netbsd-x64@0.17.16": 299 | version "0.17.16" 300 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz#ddef985aed37cc81908d2573b66c0299dbc49037" 301 | integrity sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA== 302 | 303 | "@esbuild/openbsd-x64@0.17.16": 304 | version "0.17.16" 305 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz#85035bf89efd66e9068bc72aa6bb85a2c317d090" 306 | integrity sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew== 307 | 308 | "@esbuild/sunos-x64@0.17.16": 309 | version "0.17.16" 310 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz#16338ecab854cb2d831cc9ee9cc21ef69566e1f3" 311 | integrity sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag== 312 | 313 | "@esbuild/win32-arm64@0.17.16": 314 | version "0.17.16" 315 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz#423f46bb744aff897a5f74435469e1ef4952e343" 316 | integrity sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg== 317 | 318 | "@esbuild/win32-ia32@0.17.16": 319 | version "0.17.16" 320 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz#1978be5b192c7063bd2c8d5960eb213e1964740e" 321 | integrity sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA== 322 | 323 | "@esbuild/win32-x64@0.17.16": 324 | version "0.17.16" 325 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz#260f19b0a3300d22c3a3f52722c671dc561edaa3" 326 | integrity sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg== 327 | 328 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 329 | version "0.3.3" 330 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 331 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 332 | dependencies: 333 | "@jridgewell/set-array" "^1.0.1" 334 | "@jridgewell/sourcemap-codec" "^1.4.10" 335 | "@jridgewell/trace-mapping" "^0.3.9" 336 | 337 | "@jridgewell/resolve-uri@3.1.0": 338 | version "3.1.0" 339 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 340 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 341 | 342 | "@jridgewell/set-array@^1.0.1": 343 | version "1.1.2" 344 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 345 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 346 | 347 | "@jridgewell/sourcemap-codec@1.4.14": 348 | version "1.4.14" 349 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 350 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 351 | 352 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": 353 | version "1.4.15" 354 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 355 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 356 | 357 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": 358 | version "0.3.18" 359 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 360 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 361 | dependencies: 362 | "@jridgewell/resolve-uri" "3.1.0" 363 | "@jridgewell/sourcemap-codec" "1.4.14" 364 | 365 | "@types/prop-types@*": 366 | version "15.7.5" 367 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" 368 | integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== 369 | 370 | "@types/react-dom@^18.0.11": 371 | version "18.0.11" 372 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.11.tgz#321351c1459bc9ca3d216aefc8a167beec334e33" 373 | integrity sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw== 374 | dependencies: 375 | "@types/react" "*" 376 | 377 | "@types/react@*", "@types/react@^18.0.28": 378 | version "18.0.35" 379 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.35.tgz#192061cb1044fe01f2d3a94272cd35dd50502741" 380 | integrity sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag== 381 | dependencies: 382 | "@types/prop-types" "*" 383 | "@types/scheduler" "*" 384 | csstype "^3.0.2" 385 | 386 | "@types/scheduler@*": 387 | version "0.16.3" 388 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" 389 | integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== 390 | 391 | "@vitejs/plugin-react@^3.1.0": 392 | version "3.1.0" 393 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz#d1091f535eab8b83d6e74034d01e27d73c773240" 394 | integrity sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g== 395 | dependencies: 396 | "@babel/core" "^7.20.12" 397 | "@babel/plugin-transform-react-jsx-self" "^7.18.6" 398 | "@babel/plugin-transform-react-jsx-source" "^7.19.6" 399 | magic-string "^0.27.0" 400 | react-refresh "^0.14.0" 401 | 402 | ansi-styles@^3.2.1: 403 | version "3.2.1" 404 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 405 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 406 | dependencies: 407 | color-convert "^1.9.0" 408 | 409 | asynckit@^0.4.0: 410 | version "0.4.0" 411 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 412 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 413 | 414 | axios@^1.3.5: 415 | version "1.3.5" 416 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.5.tgz#e07209b39a0d11848e3e341fa087acd71dadc542" 417 | integrity sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw== 418 | dependencies: 419 | follow-redirects "^1.15.0" 420 | form-data "^4.0.0" 421 | proxy-from-env "^1.1.0" 422 | 423 | browserslist@^4.21.3: 424 | version "4.21.5" 425 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" 426 | integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== 427 | dependencies: 428 | caniuse-lite "^1.0.30001449" 429 | electron-to-chromium "^1.4.284" 430 | node-releases "^2.0.8" 431 | update-browserslist-db "^1.0.10" 432 | 433 | caniuse-lite@^1.0.30001449: 434 | version "1.0.30001478" 435 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz#0ef8a1cf8b16be47a0f9fc4ecfc952232724b32a" 436 | integrity sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw== 437 | 438 | chalk@^2.0.0: 439 | version "2.4.2" 440 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 441 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 442 | dependencies: 443 | ansi-styles "^3.2.1" 444 | escape-string-regexp "^1.0.5" 445 | supports-color "^5.3.0" 446 | 447 | color-convert@^1.9.0: 448 | version "1.9.3" 449 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 450 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 451 | dependencies: 452 | color-name "1.1.3" 453 | 454 | color-name@1.1.3: 455 | version "1.1.3" 456 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 457 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 458 | 459 | combined-stream@^1.0.8: 460 | version "1.0.8" 461 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 462 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 463 | dependencies: 464 | delayed-stream "~1.0.0" 465 | 466 | convert-source-map@^1.7.0: 467 | version "1.9.0" 468 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 469 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 470 | 471 | csstype@^3.0.2: 472 | version "3.1.2" 473 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" 474 | integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== 475 | 476 | debug@^4.1.0: 477 | version "4.3.4" 478 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 479 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 480 | dependencies: 481 | ms "2.1.2" 482 | 483 | delayed-stream@~1.0.0: 484 | version "1.0.0" 485 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 486 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 487 | 488 | electron-to-chromium@^1.4.284: 489 | version "1.4.361" 490 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.361.tgz#010ddd5e623470ab9d1bf776b009d11c3669a4e3" 491 | integrity sha512-VocVwjPp05HUXzf3xmL0boRn5b0iyqC7amtDww84Jb1QJNPBc7F69gJyEeXRoriLBC4a5pSyckdllrXAg4mmRA== 492 | 493 | esbuild@^0.17.5: 494 | version "0.17.16" 495 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.16.tgz#5efec24a8ff29e0c157359f27e1b5532a728b720" 496 | integrity sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg== 497 | optionalDependencies: 498 | "@esbuild/android-arm" "0.17.16" 499 | "@esbuild/android-arm64" "0.17.16" 500 | "@esbuild/android-x64" "0.17.16" 501 | "@esbuild/darwin-arm64" "0.17.16" 502 | "@esbuild/darwin-x64" "0.17.16" 503 | "@esbuild/freebsd-arm64" "0.17.16" 504 | "@esbuild/freebsd-x64" "0.17.16" 505 | "@esbuild/linux-arm" "0.17.16" 506 | "@esbuild/linux-arm64" "0.17.16" 507 | "@esbuild/linux-ia32" "0.17.16" 508 | "@esbuild/linux-loong64" "0.17.16" 509 | "@esbuild/linux-mips64el" "0.17.16" 510 | "@esbuild/linux-ppc64" "0.17.16" 511 | "@esbuild/linux-riscv64" "0.17.16" 512 | "@esbuild/linux-s390x" "0.17.16" 513 | "@esbuild/linux-x64" "0.17.16" 514 | "@esbuild/netbsd-x64" "0.17.16" 515 | "@esbuild/openbsd-x64" "0.17.16" 516 | "@esbuild/sunos-x64" "0.17.16" 517 | "@esbuild/win32-arm64" "0.17.16" 518 | "@esbuild/win32-ia32" "0.17.16" 519 | "@esbuild/win32-x64" "0.17.16" 520 | 521 | escalade@^3.1.1: 522 | version "3.1.1" 523 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 524 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 525 | 526 | escape-string-regexp@^1.0.5: 527 | version "1.0.5" 528 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 529 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 530 | 531 | follow-redirects@^1.15.0: 532 | version "1.15.2" 533 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" 534 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== 535 | 536 | form-data@^4.0.0: 537 | version "4.0.0" 538 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 539 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 540 | dependencies: 541 | asynckit "^0.4.0" 542 | combined-stream "^1.0.8" 543 | mime-types "^2.1.12" 544 | 545 | fsevents@~2.3.2: 546 | version "2.3.2" 547 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 548 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 549 | 550 | function-bind@^1.1.1: 551 | version "1.1.1" 552 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 553 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 554 | 555 | gensync@^1.0.0-beta.2: 556 | version "1.0.0-beta.2" 557 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 558 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 559 | 560 | globals@^11.1.0: 561 | version "11.12.0" 562 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 563 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 564 | 565 | has-flag@^3.0.0: 566 | version "3.0.0" 567 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 568 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 569 | 570 | has@^1.0.3: 571 | version "1.0.3" 572 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 573 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 574 | dependencies: 575 | function-bind "^1.1.1" 576 | 577 | is-core-module@^2.11.0: 578 | version "2.12.0" 579 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.0.tgz#36ad62f6f73c8253fd6472517a12483cf03e7ec4" 580 | integrity sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ== 581 | dependencies: 582 | has "^1.0.3" 583 | 584 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 585 | version "4.0.0" 586 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 587 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 588 | 589 | jsesc@^2.5.1: 590 | version "2.5.2" 591 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 592 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 593 | 594 | json5@^2.2.2: 595 | version "2.2.3" 596 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 597 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 598 | 599 | loose-envify@^1.1.0: 600 | version "1.4.0" 601 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 602 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 603 | dependencies: 604 | js-tokens "^3.0.0 || ^4.0.0" 605 | 606 | lru-cache@^5.1.1: 607 | version "5.1.1" 608 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 609 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 610 | dependencies: 611 | yallist "^3.0.2" 612 | 613 | magic-string@^0.27.0: 614 | version "0.27.0" 615 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" 616 | integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== 617 | dependencies: 618 | "@jridgewell/sourcemap-codec" "^1.4.13" 619 | 620 | mime-db@1.52.0: 621 | version "1.52.0" 622 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 623 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 624 | 625 | mime-types@^2.1.12: 626 | version "2.1.35" 627 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 628 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 629 | dependencies: 630 | mime-db "1.52.0" 631 | 632 | ms@2.1.2: 633 | version "2.1.2" 634 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 635 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 636 | 637 | nanoid@^3.3.4: 638 | version "3.3.6" 639 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" 640 | integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== 641 | 642 | node-releases@^2.0.8: 643 | version "2.0.10" 644 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" 645 | integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== 646 | 647 | path-parse@^1.0.7: 648 | version "1.0.7" 649 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 650 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 651 | 652 | picocolors@^1.0.0: 653 | version "1.0.0" 654 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 655 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 656 | 657 | postcss@^8.4.21: 658 | version "8.4.21" 659 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" 660 | integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== 661 | dependencies: 662 | nanoid "^3.3.4" 663 | picocolors "^1.0.0" 664 | source-map-js "^1.0.2" 665 | 666 | proxy-from-env@^1.1.0: 667 | version "1.1.0" 668 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" 669 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== 670 | 671 | react-dom@^18.2.0: 672 | version "18.2.0" 673 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" 674 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== 675 | dependencies: 676 | loose-envify "^1.1.0" 677 | scheduler "^0.23.0" 678 | 679 | react-refresh@^0.14.0: 680 | version "0.14.0" 681 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" 682 | integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== 683 | 684 | react@^18.2.0: 685 | version "18.2.0" 686 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" 687 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== 688 | dependencies: 689 | loose-envify "^1.1.0" 690 | 691 | resolve@^1.22.1: 692 | version "1.22.2" 693 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 694 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 695 | dependencies: 696 | is-core-module "^2.11.0" 697 | path-parse "^1.0.7" 698 | supports-preserve-symlinks-flag "^1.0.0" 699 | 700 | rollup@^3.18.0: 701 | version "3.20.2" 702 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.20.2.tgz#f798c600317f216de2e4ad9f4d9ab30a89b690ff" 703 | integrity sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg== 704 | optionalDependencies: 705 | fsevents "~2.3.2" 706 | 707 | scheduler@^0.23.0: 708 | version "0.23.0" 709 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" 710 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== 711 | dependencies: 712 | loose-envify "^1.1.0" 713 | 714 | semver@^6.3.0: 715 | version "6.3.0" 716 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 717 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 718 | 719 | source-map-js@^1.0.2: 720 | version "1.0.2" 721 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 722 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 723 | 724 | supports-color@^5.3.0: 725 | version "5.5.0" 726 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 727 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 728 | dependencies: 729 | has-flag "^3.0.0" 730 | 731 | supports-preserve-symlinks-flag@^1.0.0: 732 | version "1.0.0" 733 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 734 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 735 | 736 | to-fast-properties@^2.0.0: 737 | version "2.0.0" 738 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 739 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 740 | 741 | update-browserslist-db@^1.0.10: 742 | version "1.0.10" 743 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 744 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 745 | dependencies: 746 | escalade "^3.1.1" 747 | picocolors "^1.0.0" 748 | 749 | vite@^4.2.0: 750 | version "4.2.1" 751 | resolved "https://registry.yarnpkg.com/vite/-/vite-4.2.1.tgz#6c2eb337b0dfd80a9ded5922163b94949d7fc254" 752 | integrity sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg== 753 | dependencies: 754 | esbuild "^0.17.5" 755 | postcss "^8.4.21" 756 | resolve "^1.22.1" 757 | rollup "^3.18.0" 758 | optionalDependencies: 759 | fsevents "~2.3.2" 760 | 761 | yallist@^3.0.2: 762 | version "3.1.1" 763 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 764 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 765 | --------------------------------------------------------------------------------