├── .eslintrc.cjs ├── .gitignore ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── bubble.wav ├── keyboard_stroke.wav ├── light-off.mp3 ├── light-on.mp3 └── typing-error.wav ├── src ├── App.tsx ├── assets │ └── react.svg ├── components │ ├── Caret.tsx │ ├── ChooseTime.tsx │ ├── DarkModeToggle.tsx │ ├── GenerateWords.tsx │ ├── RestartButton.tsx │ ├── Results.tsx │ └── UserTypings.tsx ├── hooks │ ├── useCountdownTimer.ts │ ├── useDarkMode.ts │ ├── useEngine.ts │ ├── useTypings.ts │ └── useWords.ts ├── index.css ├── main.tsx ├── utils │ └── helpers.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | "eslint:recommended", 6 | "plugin:@typescript-eslint/recommended", 7 | "plugin:react-hooks/recommended", 8 | ], 9 | ignorePatterns: ["dist", ".eslintrc.cjs"], 10 | parser: "@typescript-eslint/parser", 11 | plugins: ["react-refresh"], 12 | rules: { 13 | "react-refresh/only-export-components": [ 14 | "warn", 15 | { allowConstantExport: true }, 16 | ], 17 | "@typescript-eslint/no-unused-vars": [ 18 | "warn", 19 | { 20 | args: "none", 21 | ignoreRestSiblings: true, 22 | varsIgnorePattern: "^_", 23 | }, 24 | ], 25 | }, 26 | } 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Typing Speed 2 | 3 | **Typing Speed** is a lightweight and fun typing test game designed to help users improve their typing speed and accuracy. 4 | 5 | typing-speed 6 | 7 | 8 | ## Features 9 | 10 | 1. **Choose Test Time**: Users can select 30s, 60s, or 90s as the test duration. Once chosen, typing on the keyboard immediately starts the game. 11 | 12 | 2. **Real-time Accuracy Feedback**: Correct and incorrect letters and spaces are displayed in different colors to help users understand their current accuracy. 13 | 14 | 4. **Random Word Groups**: Once a word group is fully typed, a new group is randomly generated using `faker-js` for the next typing session. 15 | 16 | 5. **Countdown and Results**: A countdown timer is shown in the top-left corner, and when time runs out, users can see their results including WPM, accuracy percentage and total typed etc. 17 | 18 | 6. **Restart Button**: Clicking the "Restart" button allows users to start a new game. 19 | 20 | ## User Experience Design 21 | 22 | 1. **Tooltip Hints**: Hovering over the "Choose Time" button and the question mark icon displays helpful tooltip hints for users to understand the game rules. 23 | 24 | 2. **Dark/Light Mode**: The sun and moon icons in the top-right corner allow switching between dark and light modes. By default, it follows the system setting. 25 | 26 | 3. **Sound Effects**: Typing produces typing sound effects, and incorrect letters trigger error sounds. 27 | 28 | 4. **Animated Results**: The results gradually fade in using the Framer Motion library, enhancing visual appeal. 29 | 30 | ## How to Use 31 | 32 | To run Typing Speed locally, follow these steps: 33 | 34 | 1. Clone the repository: 35 | ```bash 36 | git clone https://github.com/Codefreyy/typing-speed-game.git 37 | ``` 38 | 39 | 2. Install dependencies: 40 | ```bash 41 | npm i 42 | ``` 43 | 44 | 3. Start the development server: 45 | ```bash 46 | npm run dev 47 | ``` 48 | 49 | 4. Open a browser and navigate to [http://localhost:3000](http://localhost:3000). 50 | 51 | ## Live Demo 52 | 53 | The game is deployed on Vercel. Try it out here: 54 | [https://joy-typing-speed-game.vercel.app/](https://joy-typing-speed-game.vercel.app/) 55 | 56 | ## Acknowledgments 57 | 58 | This game was initially inspired by the basic functionalities demonstrated in a [YouTube tutorial](https://www.youtube.com/watch?v=oc7BMlIU3VY). I have expanded on these foundations to enhance the game's features and user experience and fixed several bugs. The expansions include the customizable test durations, more typing speed measurement, and various user experience improvements such as tooltips, theme toggling, sounding effects. 59 | 60 | 61 | ## Contributions 62 | 63 | Contributions and suggestions are welcome! Feel free to submit issues or pull requests to help improve and expand this game. 64 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Typing Speed! 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-typing", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "react-typing", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "react": "^18.2.0", 12 | "react-dom": "^18.2.0", 13 | "react-hot-toast": "^2.4.1", 14 | "react-icons": "^5.0.1", 15 | "use-sound": "^4.0.1" 16 | }, 17 | "devDependencies": { 18 | "@faker-js/faker": "^8.4.1", 19 | "@types/react": "^18.2.66", 20 | "@types/react-dom": "^18.2.22", 21 | "@typescript-eslint/eslint-plugin": "^7.2.0", 22 | "@typescript-eslint/parser": "^7.2.0", 23 | "@vitejs/plugin-react": "^4.2.1", 24 | "autoprefixer": "^10.4.19", 25 | "eslint": "^8.57.0", 26 | "eslint-plugin-react-hooks": "^4.6.0", 27 | "eslint-plugin-react-refresh": "^0.4.6", 28 | "framer-motion": "^11.0.25", 29 | "postcss": "^8.4.38", 30 | "tailwindcss": "^3.4.3", 31 | "typescript": "^5.2.2", 32 | "vite": "^5.2.0" 33 | } 34 | }, 35 | "node_modules/@aashutoshrathi/word-wrap": { 36 | "version": "1.2.6", 37 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 38 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 39 | "dev": true, 40 | "engines": { 41 | "node": ">=0.10.0" 42 | } 43 | }, 44 | "node_modules/@alloc/quick-lru": { 45 | "version": "5.2.0", 46 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 47 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 48 | "dev": true, 49 | "engines": { 50 | "node": ">=10" 51 | }, 52 | "funding": { 53 | "url": "https://github.com/sponsors/sindresorhus" 54 | } 55 | }, 56 | "node_modules/@ampproject/remapping": { 57 | "version": "2.3.0", 58 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 59 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 60 | "dev": true, 61 | "dependencies": { 62 | "@jridgewell/gen-mapping": "^0.3.5", 63 | "@jridgewell/trace-mapping": "^0.3.24" 64 | }, 65 | "engines": { 66 | "node": ">=6.0.0" 67 | } 68 | }, 69 | "node_modules/@babel/code-frame": { 70 | "version": "7.24.2", 71 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", 72 | "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", 73 | "dev": true, 74 | "dependencies": { 75 | "@babel/highlight": "^7.24.2", 76 | "picocolors": "^1.0.0" 77 | }, 78 | "engines": { 79 | "node": ">=6.9.0" 80 | } 81 | }, 82 | "node_modules/@babel/compat-data": { 83 | "version": "7.24.4", 84 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", 85 | "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", 86 | "dev": true, 87 | "engines": { 88 | "node": ">=6.9.0" 89 | } 90 | }, 91 | "node_modules/@babel/core": { 92 | "version": "7.24.4", 93 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", 94 | "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", 95 | "dev": true, 96 | "dependencies": { 97 | "@ampproject/remapping": "^2.2.0", 98 | "@babel/code-frame": "^7.24.2", 99 | "@babel/generator": "^7.24.4", 100 | "@babel/helper-compilation-targets": "^7.23.6", 101 | "@babel/helper-module-transforms": "^7.23.3", 102 | "@babel/helpers": "^7.24.4", 103 | "@babel/parser": "^7.24.4", 104 | "@babel/template": "^7.24.0", 105 | "@babel/traverse": "^7.24.1", 106 | "@babel/types": "^7.24.0", 107 | "convert-source-map": "^2.0.0", 108 | "debug": "^4.1.0", 109 | "gensync": "^1.0.0-beta.2", 110 | "json5": "^2.2.3", 111 | "semver": "^6.3.1" 112 | }, 113 | "engines": { 114 | "node": ">=6.9.0" 115 | }, 116 | "funding": { 117 | "type": "opencollective", 118 | "url": "https://opencollective.com/babel" 119 | } 120 | }, 121 | "node_modules/@babel/core/node_modules/semver": { 122 | "version": "6.3.1", 123 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 124 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 125 | "dev": true, 126 | "bin": { 127 | "semver": "bin/semver.js" 128 | } 129 | }, 130 | "node_modules/@babel/generator": { 131 | "version": "7.24.4", 132 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", 133 | "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", 134 | "dev": true, 135 | "dependencies": { 136 | "@babel/types": "^7.24.0", 137 | "@jridgewell/gen-mapping": "^0.3.5", 138 | "@jridgewell/trace-mapping": "^0.3.25", 139 | "jsesc": "^2.5.1" 140 | }, 141 | "engines": { 142 | "node": ">=6.9.0" 143 | } 144 | }, 145 | "node_modules/@babel/helper-compilation-targets": { 146 | "version": "7.23.6", 147 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", 148 | "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", 149 | "dev": true, 150 | "dependencies": { 151 | "@babel/compat-data": "^7.23.5", 152 | "@babel/helper-validator-option": "^7.23.5", 153 | "browserslist": "^4.22.2", 154 | "lru-cache": "^5.1.1", 155 | "semver": "^6.3.1" 156 | }, 157 | "engines": { 158 | "node": ">=6.9.0" 159 | } 160 | }, 161 | "node_modules/@babel/helper-compilation-targets/node_modules/semver": { 162 | "version": "6.3.1", 163 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 164 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 165 | "dev": true, 166 | "bin": { 167 | "semver": "bin/semver.js" 168 | } 169 | }, 170 | "node_modules/@babel/helper-environment-visitor": { 171 | "version": "7.22.20", 172 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", 173 | "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", 174 | "dev": true, 175 | "engines": { 176 | "node": ">=6.9.0" 177 | } 178 | }, 179 | "node_modules/@babel/helper-function-name": { 180 | "version": "7.23.0", 181 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", 182 | "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", 183 | "dev": true, 184 | "dependencies": { 185 | "@babel/template": "^7.22.15", 186 | "@babel/types": "^7.23.0" 187 | }, 188 | "engines": { 189 | "node": ">=6.9.0" 190 | } 191 | }, 192 | "node_modules/@babel/helper-hoist-variables": { 193 | "version": "7.22.5", 194 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 195 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 196 | "dev": true, 197 | "dependencies": { 198 | "@babel/types": "^7.22.5" 199 | }, 200 | "engines": { 201 | "node": ">=6.9.0" 202 | } 203 | }, 204 | "node_modules/@babel/helper-module-imports": { 205 | "version": "7.24.3", 206 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", 207 | "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", 208 | "dev": true, 209 | "dependencies": { 210 | "@babel/types": "^7.24.0" 211 | }, 212 | "engines": { 213 | "node": ">=6.9.0" 214 | } 215 | }, 216 | "node_modules/@babel/helper-module-transforms": { 217 | "version": "7.23.3", 218 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", 219 | "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", 220 | "dev": true, 221 | "dependencies": { 222 | "@babel/helper-environment-visitor": "^7.22.20", 223 | "@babel/helper-module-imports": "^7.22.15", 224 | "@babel/helper-simple-access": "^7.22.5", 225 | "@babel/helper-split-export-declaration": "^7.22.6", 226 | "@babel/helper-validator-identifier": "^7.22.20" 227 | }, 228 | "engines": { 229 | "node": ">=6.9.0" 230 | }, 231 | "peerDependencies": { 232 | "@babel/core": "^7.0.0" 233 | } 234 | }, 235 | "node_modules/@babel/helper-plugin-utils": { 236 | "version": "7.24.0", 237 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", 238 | "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", 239 | "dev": true, 240 | "engines": { 241 | "node": ">=6.9.0" 242 | } 243 | }, 244 | "node_modules/@babel/helper-simple-access": { 245 | "version": "7.22.5", 246 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 247 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 248 | "dev": true, 249 | "dependencies": { 250 | "@babel/types": "^7.22.5" 251 | }, 252 | "engines": { 253 | "node": ">=6.9.0" 254 | } 255 | }, 256 | "node_modules/@babel/helper-split-export-declaration": { 257 | "version": "7.22.6", 258 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", 259 | "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", 260 | "dev": true, 261 | "dependencies": { 262 | "@babel/types": "^7.22.5" 263 | }, 264 | "engines": { 265 | "node": ">=6.9.0" 266 | } 267 | }, 268 | "node_modules/@babel/helper-string-parser": { 269 | "version": "7.24.1", 270 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", 271 | "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", 272 | "dev": true, 273 | "engines": { 274 | "node": ">=6.9.0" 275 | } 276 | }, 277 | "node_modules/@babel/helper-validator-identifier": { 278 | "version": "7.22.20", 279 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 280 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 281 | "dev": true, 282 | "engines": { 283 | "node": ">=6.9.0" 284 | } 285 | }, 286 | "node_modules/@babel/helper-validator-option": { 287 | "version": "7.23.5", 288 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", 289 | "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", 290 | "dev": true, 291 | "engines": { 292 | "node": ">=6.9.0" 293 | } 294 | }, 295 | "node_modules/@babel/helpers": { 296 | "version": "7.24.4", 297 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", 298 | "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", 299 | "dev": true, 300 | "dependencies": { 301 | "@babel/template": "^7.24.0", 302 | "@babel/traverse": "^7.24.1", 303 | "@babel/types": "^7.24.0" 304 | }, 305 | "engines": { 306 | "node": ">=6.9.0" 307 | } 308 | }, 309 | "node_modules/@babel/highlight": { 310 | "version": "7.24.2", 311 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", 312 | "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", 313 | "dev": true, 314 | "dependencies": { 315 | "@babel/helper-validator-identifier": "^7.22.20", 316 | "chalk": "^2.4.2", 317 | "js-tokens": "^4.0.0", 318 | "picocolors": "^1.0.0" 319 | }, 320 | "engines": { 321 | "node": ">=6.9.0" 322 | } 323 | }, 324 | "node_modules/@babel/parser": { 325 | "version": "7.24.4", 326 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", 327 | "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", 328 | "dev": true, 329 | "bin": { 330 | "parser": "bin/babel-parser.js" 331 | }, 332 | "engines": { 333 | "node": ">=6.0.0" 334 | } 335 | }, 336 | "node_modules/@babel/plugin-transform-react-jsx-self": { 337 | "version": "7.24.1", 338 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", 339 | "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", 340 | "dev": true, 341 | "dependencies": { 342 | "@babel/helper-plugin-utils": "^7.24.0" 343 | }, 344 | "engines": { 345 | "node": ">=6.9.0" 346 | }, 347 | "peerDependencies": { 348 | "@babel/core": "^7.0.0-0" 349 | } 350 | }, 351 | "node_modules/@babel/plugin-transform-react-jsx-source": { 352 | "version": "7.24.1", 353 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", 354 | "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", 355 | "dev": true, 356 | "dependencies": { 357 | "@babel/helper-plugin-utils": "^7.24.0" 358 | }, 359 | "engines": { 360 | "node": ">=6.9.0" 361 | }, 362 | "peerDependencies": { 363 | "@babel/core": "^7.0.0-0" 364 | } 365 | }, 366 | "node_modules/@babel/template": { 367 | "version": "7.24.0", 368 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", 369 | "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", 370 | "dev": true, 371 | "dependencies": { 372 | "@babel/code-frame": "^7.23.5", 373 | "@babel/parser": "^7.24.0", 374 | "@babel/types": "^7.24.0" 375 | }, 376 | "engines": { 377 | "node": ">=6.9.0" 378 | } 379 | }, 380 | "node_modules/@babel/traverse": { 381 | "version": "7.24.1", 382 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", 383 | "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", 384 | "dev": true, 385 | "dependencies": { 386 | "@babel/code-frame": "^7.24.1", 387 | "@babel/generator": "^7.24.1", 388 | "@babel/helper-environment-visitor": "^7.22.20", 389 | "@babel/helper-function-name": "^7.23.0", 390 | "@babel/helper-hoist-variables": "^7.22.5", 391 | "@babel/helper-split-export-declaration": "^7.22.6", 392 | "@babel/parser": "^7.24.1", 393 | "@babel/types": "^7.24.0", 394 | "debug": "^4.3.1", 395 | "globals": "^11.1.0" 396 | }, 397 | "engines": { 398 | "node": ">=6.9.0" 399 | } 400 | }, 401 | "node_modules/@babel/types": { 402 | "version": "7.24.0", 403 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", 404 | "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", 405 | "dev": true, 406 | "dependencies": { 407 | "@babel/helper-string-parser": "^7.23.4", 408 | "@babel/helper-validator-identifier": "^7.22.20", 409 | "to-fast-properties": "^2.0.0" 410 | }, 411 | "engines": { 412 | "node": ">=6.9.0" 413 | } 414 | }, 415 | "node_modules/@esbuild/aix-ppc64": { 416 | "version": "0.20.2", 417 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", 418 | "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", 419 | "cpu": [ 420 | "ppc64" 421 | ], 422 | "dev": true, 423 | "optional": true, 424 | "os": [ 425 | "aix" 426 | ], 427 | "engines": { 428 | "node": ">=12" 429 | } 430 | }, 431 | "node_modules/@esbuild/android-arm": { 432 | "version": "0.20.2", 433 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", 434 | "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", 435 | "cpu": [ 436 | "arm" 437 | ], 438 | "dev": true, 439 | "optional": true, 440 | "os": [ 441 | "android" 442 | ], 443 | "engines": { 444 | "node": ">=12" 445 | } 446 | }, 447 | "node_modules/@esbuild/android-arm64": { 448 | "version": "0.20.2", 449 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", 450 | "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", 451 | "cpu": [ 452 | "arm64" 453 | ], 454 | "dev": true, 455 | "optional": true, 456 | "os": [ 457 | "android" 458 | ], 459 | "engines": { 460 | "node": ">=12" 461 | } 462 | }, 463 | "node_modules/@esbuild/android-x64": { 464 | "version": "0.20.2", 465 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", 466 | "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", 467 | "cpu": [ 468 | "x64" 469 | ], 470 | "dev": true, 471 | "optional": true, 472 | "os": [ 473 | "android" 474 | ], 475 | "engines": { 476 | "node": ">=12" 477 | } 478 | }, 479 | "node_modules/@esbuild/darwin-arm64": { 480 | "version": "0.20.2", 481 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", 482 | "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", 483 | "cpu": [ 484 | "arm64" 485 | ], 486 | "dev": true, 487 | "optional": true, 488 | "os": [ 489 | "darwin" 490 | ], 491 | "engines": { 492 | "node": ">=12" 493 | } 494 | }, 495 | "node_modules/@esbuild/darwin-x64": { 496 | "version": "0.20.2", 497 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", 498 | "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", 499 | "cpu": [ 500 | "x64" 501 | ], 502 | "dev": true, 503 | "optional": true, 504 | "os": [ 505 | "darwin" 506 | ], 507 | "engines": { 508 | "node": ">=12" 509 | } 510 | }, 511 | "node_modules/@esbuild/freebsd-arm64": { 512 | "version": "0.20.2", 513 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", 514 | "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", 515 | "cpu": [ 516 | "arm64" 517 | ], 518 | "dev": true, 519 | "optional": true, 520 | "os": [ 521 | "freebsd" 522 | ], 523 | "engines": { 524 | "node": ">=12" 525 | } 526 | }, 527 | "node_modules/@esbuild/freebsd-x64": { 528 | "version": "0.20.2", 529 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", 530 | "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", 531 | "cpu": [ 532 | "x64" 533 | ], 534 | "dev": true, 535 | "optional": true, 536 | "os": [ 537 | "freebsd" 538 | ], 539 | "engines": { 540 | "node": ">=12" 541 | } 542 | }, 543 | "node_modules/@esbuild/linux-arm": { 544 | "version": "0.20.2", 545 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", 546 | "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", 547 | "cpu": [ 548 | "arm" 549 | ], 550 | "dev": true, 551 | "optional": true, 552 | "os": [ 553 | "linux" 554 | ], 555 | "engines": { 556 | "node": ">=12" 557 | } 558 | }, 559 | "node_modules/@esbuild/linux-arm64": { 560 | "version": "0.20.2", 561 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", 562 | "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", 563 | "cpu": [ 564 | "arm64" 565 | ], 566 | "dev": true, 567 | "optional": true, 568 | "os": [ 569 | "linux" 570 | ], 571 | "engines": { 572 | "node": ">=12" 573 | } 574 | }, 575 | "node_modules/@esbuild/linux-ia32": { 576 | "version": "0.20.2", 577 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", 578 | "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", 579 | "cpu": [ 580 | "ia32" 581 | ], 582 | "dev": true, 583 | "optional": true, 584 | "os": [ 585 | "linux" 586 | ], 587 | "engines": { 588 | "node": ">=12" 589 | } 590 | }, 591 | "node_modules/@esbuild/linux-loong64": { 592 | "version": "0.20.2", 593 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", 594 | "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", 595 | "cpu": [ 596 | "loong64" 597 | ], 598 | "dev": true, 599 | "optional": true, 600 | "os": [ 601 | "linux" 602 | ], 603 | "engines": { 604 | "node": ">=12" 605 | } 606 | }, 607 | "node_modules/@esbuild/linux-mips64el": { 608 | "version": "0.20.2", 609 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", 610 | "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", 611 | "cpu": [ 612 | "mips64el" 613 | ], 614 | "dev": true, 615 | "optional": true, 616 | "os": [ 617 | "linux" 618 | ], 619 | "engines": { 620 | "node": ">=12" 621 | } 622 | }, 623 | "node_modules/@esbuild/linux-ppc64": { 624 | "version": "0.20.2", 625 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", 626 | "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", 627 | "cpu": [ 628 | "ppc64" 629 | ], 630 | "dev": true, 631 | "optional": true, 632 | "os": [ 633 | "linux" 634 | ], 635 | "engines": { 636 | "node": ">=12" 637 | } 638 | }, 639 | "node_modules/@esbuild/linux-riscv64": { 640 | "version": "0.20.2", 641 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", 642 | "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", 643 | "cpu": [ 644 | "riscv64" 645 | ], 646 | "dev": true, 647 | "optional": true, 648 | "os": [ 649 | "linux" 650 | ], 651 | "engines": { 652 | "node": ">=12" 653 | } 654 | }, 655 | "node_modules/@esbuild/linux-s390x": { 656 | "version": "0.20.2", 657 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", 658 | "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", 659 | "cpu": [ 660 | "s390x" 661 | ], 662 | "dev": true, 663 | "optional": true, 664 | "os": [ 665 | "linux" 666 | ], 667 | "engines": { 668 | "node": ">=12" 669 | } 670 | }, 671 | "node_modules/@esbuild/linux-x64": { 672 | "version": "0.20.2", 673 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", 674 | "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", 675 | "cpu": [ 676 | "x64" 677 | ], 678 | "dev": true, 679 | "optional": true, 680 | "os": [ 681 | "linux" 682 | ], 683 | "engines": { 684 | "node": ">=12" 685 | } 686 | }, 687 | "node_modules/@esbuild/netbsd-x64": { 688 | "version": "0.20.2", 689 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", 690 | "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", 691 | "cpu": [ 692 | "x64" 693 | ], 694 | "dev": true, 695 | "optional": true, 696 | "os": [ 697 | "netbsd" 698 | ], 699 | "engines": { 700 | "node": ">=12" 701 | } 702 | }, 703 | "node_modules/@esbuild/openbsd-x64": { 704 | "version": "0.20.2", 705 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", 706 | "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", 707 | "cpu": [ 708 | "x64" 709 | ], 710 | "dev": true, 711 | "optional": true, 712 | "os": [ 713 | "openbsd" 714 | ], 715 | "engines": { 716 | "node": ">=12" 717 | } 718 | }, 719 | "node_modules/@esbuild/sunos-x64": { 720 | "version": "0.20.2", 721 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", 722 | "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", 723 | "cpu": [ 724 | "x64" 725 | ], 726 | "dev": true, 727 | "optional": true, 728 | "os": [ 729 | "sunos" 730 | ], 731 | "engines": { 732 | "node": ">=12" 733 | } 734 | }, 735 | "node_modules/@esbuild/win32-arm64": { 736 | "version": "0.20.2", 737 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", 738 | "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", 739 | "cpu": [ 740 | "arm64" 741 | ], 742 | "dev": true, 743 | "optional": true, 744 | "os": [ 745 | "win32" 746 | ], 747 | "engines": { 748 | "node": ">=12" 749 | } 750 | }, 751 | "node_modules/@esbuild/win32-ia32": { 752 | "version": "0.20.2", 753 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", 754 | "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", 755 | "cpu": [ 756 | "ia32" 757 | ], 758 | "dev": true, 759 | "optional": true, 760 | "os": [ 761 | "win32" 762 | ], 763 | "engines": { 764 | "node": ">=12" 765 | } 766 | }, 767 | "node_modules/@esbuild/win32-x64": { 768 | "version": "0.20.2", 769 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", 770 | "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", 771 | "cpu": [ 772 | "x64" 773 | ], 774 | "dev": true, 775 | "optional": true, 776 | "os": [ 777 | "win32" 778 | ], 779 | "engines": { 780 | "node": ">=12" 781 | } 782 | }, 783 | "node_modules/@eslint-community/eslint-utils": { 784 | "version": "4.4.0", 785 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 786 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 787 | "dev": true, 788 | "dependencies": { 789 | "eslint-visitor-keys": "^3.3.0" 790 | }, 791 | "engines": { 792 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 793 | }, 794 | "peerDependencies": { 795 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 796 | } 797 | }, 798 | "node_modules/@eslint-community/regexpp": { 799 | "version": "4.10.0", 800 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 801 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 802 | "dev": true, 803 | "engines": { 804 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 805 | } 806 | }, 807 | "node_modules/@eslint/eslintrc": { 808 | "version": "2.1.4", 809 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 810 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 811 | "dev": true, 812 | "dependencies": { 813 | "ajv": "^6.12.4", 814 | "debug": "^4.3.2", 815 | "espree": "^9.6.0", 816 | "globals": "^13.19.0", 817 | "ignore": "^5.2.0", 818 | "import-fresh": "^3.2.1", 819 | "js-yaml": "^4.1.0", 820 | "minimatch": "^3.1.2", 821 | "strip-json-comments": "^3.1.1" 822 | }, 823 | "engines": { 824 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 825 | }, 826 | "funding": { 827 | "url": "https://opencollective.com/eslint" 828 | } 829 | }, 830 | "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { 831 | "version": "1.1.11", 832 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 833 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 834 | "dev": true, 835 | "dependencies": { 836 | "balanced-match": "^1.0.0", 837 | "concat-map": "0.0.1" 838 | } 839 | }, 840 | "node_modules/@eslint/eslintrc/node_modules/globals": { 841 | "version": "13.24.0", 842 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 843 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 844 | "dev": true, 845 | "dependencies": { 846 | "type-fest": "^0.20.2" 847 | }, 848 | "engines": { 849 | "node": ">=8" 850 | }, 851 | "funding": { 852 | "url": "https://github.com/sponsors/sindresorhus" 853 | } 854 | }, 855 | "node_modules/@eslint/eslintrc/node_modules/minimatch": { 856 | "version": "3.1.2", 857 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 858 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 859 | "dev": true, 860 | "dependencies": { 861 | "brace-expansion": "^1.1.7" 862 | }, 863 | "engines": { 864 | "node": "*" 865 | } 866 | }, 867 | "node_modules/@eslint/js": { 868 | "version": "8.57.0", 869 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", 870 | "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 871 | "dev": true, 872 | "engines": { 873 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 874 | } 875 | }, 876 | "node_modules/@faker-js/faker": { 877 | "version": "8.4.1", 878 | "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz", 879 | "integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==", 880 | "dev": true, 881 | "funding": [ 882 | { 883 | "type": "opencollective", 884 | "url": "https://opencollective.com/fakerjs" 885 | } 886 | ], 887 | "engines": { 888 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0", 889 | "npm": ">=6.14.13" 890 | } 891 | }, 892 | "node_modules/@humanwhocodes/config-array": { 893 | "version": "0.11.14", 894 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 895 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 896 | "dev": true, 897 | "dependencies": { 898 | "@humanwhocodes/object-schema": "^2.0.2", 899 | "debug": "^4.3.1", 900 | "minimatch": "^3.0.5" 901 | }, 902 | "engines": { 903 | "node": ">=10.10.0" 904 | } 905 | }, 906 | "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { 907 | "version": "1.1.11", 908 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 909 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 910 | "dev": true, 911 | "dependencies": { 912 | "balanced-match": "^1.0.0", 913 | "concat-map": "0.0.1" 914 | } 915 | }, 916 | "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { 917 | "version": "3.1.2", 918 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 919 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 920 | "dev": true, 921 | "dependencies": { 922 | "brace-expansion": "^1.1.7" 923 | }, 924 | "engines": { 925 | "node": "*" 926 | } 927 | }, 928 | "node_modules/@humanwhocodes/module-importer": { 929 | "version": "1.0.1", 930 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 931 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 932 | "dev": true, 933 | "engines": { 934 | "node": ">=12.22" 935 | }, 936 | "funding": { 937 | "type": "github", 938 | "url": "https://github.com/sponsors/nzakas" 939 | } 940 | }, 941 | "node_modules/@humanwhocodes/object-schema": { 942 | "version": "2.0.3", 943 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", 944 | "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 945 | "dev": true 946 | }, 947 | "node_modules/@isaacs/cliui": { 948 | "version": "8.0.2", 949 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 950 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 951 | "dev": true, 952 | "dependencies": { 953 | "string-width": "^5.1.2", 954 | "string-width-cjs": "npm:string-width@^4.2.0", 955 | "strip-ansi": "^7.0.1", 956 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 957 | "wrap-ansi": "^8.1.0", 958 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 959 | }, 960 | "engines": { 961 | "node": ">=12" 962 | } 963 | }, 964 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 965 | "version": "6.0.1", 966 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 967 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 968 | "dev": true, 969 | "engines": { 970 | "node": ">=12" 971 | }, 972 | "funding": { 973 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 974 | } 975 | }, 976 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 977 | "version": "7.1.0", 978 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 979 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 980 | "dev": true, 981 | "dependencies": { 982 | "ansi-regex": "^6.0.1" 983 | }, 984 | "engines": { 985 | "node": ">=12" 986 | }, 987 | "funding": { 988 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 989 | } 990 | }, 991 | "node_modules/@jridgewell/gen-mapping": { 992 | "version": "0.3.5", 993 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 994 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 995 | "dev": true, 996 | "dependencies": { 997 | "@jridgewell/set-array": "^1.2.1", 998 | "@jridgewell/sourcemap-codec": "^1.4.10", 999 | "@jridgewell/trace-mapping": "^0.3.24" 1000 | }, 1001 | "engines": { 1002 | "node": ">=6.0.0" 1003 | } 1004 | }, 1005 | "node_modules/@jridgewell/resolve-uri": { 1006 | "version": "3.1.2", 1007 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 1008 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 1009 | "dev": true, 1010 | "engines": { 1011 | "node": ">=6.0.0" 1012 | } 1013 | }, 1014 | "node_modules/@jridgewell/set-array": { 1015 | "version": "1.2.1", 1016 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 1017 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 1018 | "dev": true, 1019 | "engines": { 1020 | "node": ">=6.0.0" 1021 | } 1022 | }, 1023 | "node_modules/@jridgewell/sourcemap-codec": { 1024 | "version": "1.4.15", 1025 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 1026 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 1027 | "dev": true 1028 | }, 1029 | "node_modules/@jridgewell/trace-mapping": { 1030 | "version": "0.3.25", 1031 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 1032 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "@jridgewell/resolve-uri": "^3.1.0", 1036 | "@jridgewell/sourcemap-codec": "^1.4.14" 1037 | } 1038 | }, 1039 | "node_modules/@nodelib/fs.scandir": { 1040 | "version": "2.1.5", 1041 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1042 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1043 | "dev": true, 1044 | "dependencies": { 1045 | "@nodelib/fs.stat": "2.0.5", 1046 | "run-parallel": "^1.1.9" 1047 | }, 1048 | "engines": { 1049 | "node": ">= 8" 1050 | } 1051 | }, 1052 | "node_modules/@nodelib/fs.stat": { 1053 | "version": "2.0.5", 1054 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1055 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1056 | "dev": true, 1057 | "engines": { 1058 | "node": ">= 8" 1059 | } 1060 | }, 1061 | "node_modules/@nodelib/fs.walk": { 1062 | "version": "1.2.8", 1063 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1064 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1065 | "dev": true, 1066 | "dependencies": { 1067 | "@nodelib/fs.scandir": "2.1.5", 1068 | "fastq": "^1.6.0" 1069 | }, 1070 | "engines": { 1071 | "node": ">= 8" 1072 | } 1073 | }, 1074 | "node_modules/@pkgjs/parseargs": { 1075 | "version": "0.11.0", 1076 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 1077 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 1078 | "dev": true, 1079 | "optional": true, 1080 | "engines": { 1081 | "node": ">=14" 1082 | } 1083 | }, 1084 | "node_modules/@rollup/rollup-android-arm-eabi": { 1085 | "version": "4.14.0", 1086 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.0.tgz", 1087 | "integrity": "sha512-jwXtxYbRt1V+CdQSy6Z+uZti7JF5irRKF8hlKfEnF/xJpcNGuuiZMBvuoYM+x9sr9iWGnzrlM0+9hvQ1kgkf1w==", 1088 | "cpu": [ 1089 | "arm" 1090 | ], 1091 | "dev": true, 1092 | "optional": true, 1093 | "os": [ 1094 | "android" 1095 | ] 1096 | }, 1097 | "node_modules/@rollup/rollup-android-arm64": { 1098 | "version": "4.14.0", 1099 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.0.tgz", 1100 | "integrity": "sha512-fI9nduZhCccjzlsA/OuAwtFGWocxA4gqXGTLvOyiF8d+8o0fZUeSztixkYjcGq1fGZY3Tkq4yRvHPFxU+jdZ9Q==", 1101 | "cpu": [ 1102 | "arm64" 1103 | ], 1104 | "dev": true, 1105 | "optional": true, 1106 | "os": [ 1107 | "android" 1108 | ] 1109 | }, 1110 | "node_modules/@rollup/rollup-darwin-arm64": { 1111 | "version": "4.14.0", 1112 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.0.tgz", 1113 | "integrity": "sha512-BcnSPRM76/cD2gQC+rQNGBN6GStBs2pl/FpweW8JYuz5J/IEa0Fr4AtrPv766DB/6b2MZ/AfSIOSGw3nEIP8SA==", 1114 | "cpu": [ 1115 | "arm64" 1116 | ], 1117 | "dev": true, 1118 | "optional": true, 1119 | "os": [ 1120 | "darwin" 1121 | ] 1122 | }, 1123 | "node_modules/@rollup/rollup-darwin-x64": { 1124 | "version": "4.14.0", 1125 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.0.tgz", 1126 | "integrity": "sha512-LDyFB9GRolGN7XI6955aFeI3wCdCUszFWumWU0deHA8VpR3nWRrjG6GtGjBrQxQKFevnUTHKCfPR4IvrW3kCgQ==", 1127 | "cpu": [ 1128 | "x64" 1129 | ], 1130 | "dev": true, 1131 | "optional": true, 1132 | "os": [ 1133 | "darwin" 1134 | ] 1135 | }, 1136 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 1137 | "version": "4.14.0", 1138 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.0.tgz", 1139 | "integrity": "sha512-ygrGVhQP47mRh0AAD0zl6QqCbNsf0eTo+vgwkY6LunBcg0f2Jv365GXlDUECIyoXp1kKwL5WW6rsO429DBY/bA==", 1140 | "cpu": [ 1141 | "arm" 1142 | ], 1143 | "dev": true, 1144 | "optional": true, 1145 | "os": [ 1146 | "linux" 1147 | ] 1148 | }, 1149 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 1150 | "version": "4.14.0", 1151 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.0.tgz", 1152 | "integrity": "sha512-x+uJ6MAYRlHGe9wi4HQjxpaKHPM3d3JjqqCkeC5gpnnI6OWovLdXTpfa8trjxPLnWKyBsSi5kne+146GAxFt4A==", 1153 | "cpu": [ 1154 | "arm64" 1155 | ], 1156 | "dev": true, 1157 | "optional": true, 1158 | "os": [ 1159 | "linux" 1160 | ] 1161 | }, 1162 | "node_modules/@rollup/rollup-linux-arm64-musl": { 1163 | "version": "4.14.0", 1164 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.0.tgz", 1165 | "integrity": "sha512-nrRw8ZTQKg6+Lttwqo6a2VxR9tOroa2m91XbdQ2sUUzHoedXlsyvY1fN4xWdqz8PKmf4orDwejxXHjh7YBGUCA==", 1166 | "cpu": [ 1167 | "arm64" 1168 | ], 1169 | "dev": true, 1170 | "optional": true, 1171 | "os": [ 1172 | "linux" 1173 | ] 1174 | }, 1175 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 1176 | "version": "4.14.0", 1177 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.0.tgz", 1178 | "integrity": "sha512-xV0d5jDb4aFu84XKr+lcUJ9y3qpIWhttO3Qev97z8DKLXR62LC3cXT/bMZXrjLF9X+P5oSmJTzAhqwUbY96PnA==", 1179 | "cpu": [ 1180 | "ppc64le" 1181 | ], 1182 | "dev": true, 1183 | "optional": true, 1184 | "os": [ 1185 | "linux" 1186 | ] 1187 | }, 1188 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1189 | "version": "4.14.0", 1190 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.0.tgz", 1191 | "integrity": "sha512-SDDhBQwZX6LPRoPYjAZWyL27LbcBo7WdBFWJi5PI9RPCzU8ijzkQn7tt8NXiXRiFMJCVpkuMkBf4OxSxVMizAw==", 1192 | "cpu": [ 1193 | "riscv64" 1194 | ], 1195 | "dev": true, 1196 | "optional": true, 1197 | "os": [ 1198 | "linux" 1199 | ] 1200 | }, 1201 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 1202 | "version": "4.14.0", 1203 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.0.tgz", 1204 | "integrity": "sha512-RxB/qez8zIDshNJDufYlTT0ZTVut5eCpAZ3bdXDU9yTxBzui3KhbGjROK2OYTTor7alM7XBhssgoO3CZ0XD3qA==", 1205 | "cpu": [ 1206 | "s390x" 1207 | ], 1208 | "dev": true, 1209 | "optional": true, 1210 | "os": [ 1211 | "linux" 1212 | ] 1213 | }, 1214 | "node_modules/@rollup/rollup-linux-x64-gnu": { 1215 | "version": "4.14.0", 1216 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.0.tgz", 1217 | "integrity": "sha512-C6y6z2eCNCfhZxT9u+jAM2Fup89ZjiG5pIzZIDycs1IwESviLxwkQcFRGLjnDrP+PT+v5i4YFvlcfAs+LnreXg==", 1218 | "cpu": [ 1219 | "x64" 1220 | ], 1221 | "dev": true, 1222 | "optional": true, 1223 | "os": [ 1224 | "linux" 1225 | ] 1226 | }, 1227 | "node_modules/@rollup/rollup-linux-x64-musl": { 1228 | "version": "4.14.0", 1229 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.0.tgz", 1230 | "integrity": "sha512-i0QwbHYfnOMYsBEyjxcwGu5SMIi9sImDVjDg087hpzXqhBSosxkE7gyIYFHgfFl4mr7RrXksIBZ4DoLoP4FhJg==", 1231 | "cpu": [ 1232 | "x64" 1233 | ], 1234 | "dev": true, 1235 | "optional": true, 1236 | "os": [ 1237 | "linux" 1238 | ] 1239 | }, 1240 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1241 | "version": "4.14.0", 1242 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.0.tgz", 1243 | "integrity": "sha512-Fq52EYb0riNHLBTAcL0cun+rRwyZ10S9vKzhGKKgeD+XbwunszSY0rVMco5KbOsTlwovP2rTOkiII/fQ4ih/zQ==", 1244 | "cpu": [ 1245 | "arm64" 1246 | ], 1247 | "dev": true, 1248 | "optional": true, 1249 | "os": [ 1250 | "win32" 1251 | ] 1252 | }, 1253 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1254 | "version": "4.14.0", 1255 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.0.tgz", 1256 | "integrity": "sha512-e/PBHxPdJ00O9p5Ui43+vixSgVf4NlLsmV6QneGERJ3lnjIua/kim6PRFe3iDueT1rQcgSkYP8ZBBXa/h4iPvw==", 1257 | "cpu": [ 1258 | "ia32" 1259 | ], 1260 | "dev": true, 1261 | "optional": true, 1262 | "os": [ 1263 | "win32" 1264 | ] 1265 | }, 1266 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1267 | "version": "4.14.0", 1268 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.0.tgz", 1269 | "integrity": "sha512-aGg7iToJjdklmxlUlJh/PaPNa4PmqHfyRMLunbL3eaMO0gp656+q1zOKkpJ/CVe9CryJv6tAN1HDoR8cNGzkag==", 1270 | "cpu": [ 1271 | "x64" 1272 | ], 1273 | "dev": true, 1274 | "optional": true, 1275 | "os": [ 1276 | "win32" 1277 | ] 1278 | }, 1279 | "node_modules/@types/babel__core": { 1280 | "version": "7.20.5", 1281 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1282 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "@babel/parser": "^7.20.7", 1286 | "@babel/types": "^7.20.7", 1287 | "@types/babel__generator": "*", 1288 | "@types/babel__template": "*", 1289 | "@types/babel__traverse": "*" 1290 | } 1291 | }, 1292 | "node_modules/@types/babel__generator": { 1293 | "version": "7.6.8", 1294 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", 1295 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", 1296 | "dev": true, 1297 | "dependencies": { 1298 | "@babel/types": "^7.0.0" 1299 | } 1300 | }, 1301 | "node_modules/@types/babel__template": { 1302 | "version": "7.4.4", 1303 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1304 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1305 | "dev": true, 1306 | "dependencies": { 1307 | "@babel/parser": "^7.1.0", 1308 | "@babel/types": "^7.0.0" 1309 | } 1310 | }, 1311 | "node_modules/@types/babel__traverse": { 1312 | "version": "7.20.5", 1313 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", 1314 | "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", 1315 | "dev": true, 1316 | "dependencies": { 1317 | "@babel/types": "^7.20.7" 1318 | } 1319 | }, 1320 | "node_modules/@types/estree": { 1321 | "version": "1.0.5", 1322 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 1323 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 1324 | "dev": true 1325 | }, 1326 | "node_modules/@types/json-schema": { 1327 | "version": "7.0.15", 1328 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 1329 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 1330 | "dev": true 1331 | }, 1332 | "node_modules/@types/prop-types": { 1333 | "version": "15.7.12", 1334 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", 1335 | "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", 1336 | "dev": true 1337 | }, 1338 | "node_modules/@types/react": { 1339 | "version": "18.2.74", 1340 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", 1341 | "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", 1342 | "dev": true, 1343 | "dependencies": { 1344 | "@types/prop-types": "*", 1345 | "csstype": "^3.0.2" 1346 | } 1347 | }, 1348 | "node_modules/@types/react-dom": { 1349 | "version": "18.2.24", 1350 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.24.tgz", 1351 | "integrity": "sha512-cN6upcKd8zkGy4HU9F1+/s98Hrp6D4MOcippK4PoE8OZRngohHZpbJn1GsaDLz87MqvHNoT13nHvNqM9ocRHZg==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "@types/react": "*" 1355 | } 1356 | }, 1357 | "node_modules/@types/semver": { 1358 | "version": "7.5.8", 1359 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", 1360 | "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", 1361 | "dev": true 1362 | }, 1363 | "node_modules/@typescript-eslint/eslint-plugin": { 1364 | "version": "7.5.0", 1365 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", 1366 | "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==", 1367 | "dev": true, 1368 | "dependencies": { 1369 | "@eslint-community/regexpp": "^4.5.1", 1370 | "@typescript-eslint/scope-manager": "7.5.0", 1371 | "@typescript-eslint/type-utils": "7.5.0", 1372 | "@typescript-eslint/utils": "7.5.0", 1373 | "@typescript-eslint/visitor-keys": "7.5.0", 1374 | "debug": "^4.3.4", 1375 | "graphemer": "^1.4.0", 1376 | "ignore": "^5.2.4", 1377 | "natural-compare": "^1.4.0", 1378 | "semver": "^7.5.4", 1379 | "ts-api-utils": "^1.0.1" 1380 | }, 1381 | "engines": { 1382 | "node": "^18.18.0 || >=20.0.0" 1383 | }, 1384 | "funding": { 1385 | "type": "opencollective", 1386 | "url": "https://opencollective.com/typescript-eslint" 1387 | }, 1388 | "peerDependencies": { 1389 | "@typescript-eslint/parser": "^7.0.0", 1390 | "eslint": "^8.56.0" 1391 | }, 1392 | "peerDependenciesMeta": { 1393 | "typescript": { 1394 | "optional": true 1395 | } 1396 | } 1397 | }, 1398 | "node_modules/@typescript-eslint/parser": { 1399 | "version": "7.5.0", 1400 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", 1401 | "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", 1402 | "dev": true, 1403 | "dependencies": { 1404 | "@typescript-eslint/scope-manager": "7.5.0", 1405 | "@typescript-eslint/types": "7.5.0", 1406 | "@typescript-eslint/typescript-estree": "7.5.0", 1407 | "@typescript-eslint/visitor-keys": "7.5.0", 1408 | "debug": "^4.3.4" 1409 | }, 1410 | "engines": { 1411 | "node": "^18.18.0 || >=20.0.0" 1412 | }, 1413 | "funding": { 1414 | "type": "opencollective", 1415 | "url": "https://opencollective.com/typescript-eslint" 1416 | }, 1417 | "peerDependencies": { 1418 | "eslint": "^8.56.0" 1419 | }, 1420 | "peerDependenciesMeta": { 1421 | "typescript": { 1422 | "optional": true 1423 | } 1424 | } 1425 | }, 1426 | "node_modules/@typescript-eslint/scope-manager": { 1427 | "version": "7.5.0", 1428 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", 1429 | "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", 1430 | "dev": true, 1431 | "dependencies": { 1432 | "@typescript-eslint/types": "7.5.0", 1433 | "@typescript-eslint/visitor-keys": "7.5.0" 1434 | }, 1435 | "engines": { 1436 | "node": "^18.18.0 || >=20.0.0" 1437 | }, 1438 | "funding": { 1439 | "type": "opencollective", 1440 | "url": "https://opencollective.com/typescript-eslint" 1441 | } 1442 | }, 1443 | "node_modules/@typescript-eslint/type-utils": { 1444 | "version": "7.5.0", 1445 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz", 1446 | "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==", 1447 | "dev": true, 1448 | "dependencies": { 1449 | "@typescript-eslint/typescript-estree": "7.5.0", 1450 | "@typescript-eslint/utils": "7.5.0", 1451 | "debug": "^4.3.4", 1452 | "ts-api-utils": "^1.0.1" 1453 | }, 1454 | "engines": { 1455 | "node": "^18.18.0 || >=20.0.0" 1456 | }, 1457 | "funding": { 1458 | "type": "opencollective", 1459 | "url": "https://opencollective.com/typescript-eslint" 1460 | }, 1461 | "peerDependencies": { 1462 | "eslint": "^8.56.0" 1463 | }, 1464 | "peerDependenciesMeta": { 1465 | "typescript": { 1466 | "optional": true 1467 | } 1468 | } 1469 | }, 1470 | "node_modules/@typescript-eslint/types": { 1471 | "version": "7.5.0", 1472 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", 1473 | "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", 1474 | "dev": true, 1475 | "engines": { 1476 | "node": "^18.18.0 || >=20.0.0" 1477 | }, 1478 | "funding": { 1479 | "type": "opencollective", 1480 | "url": "https://opencollective.com/typescript-eslint" 1481 | } 1482 | }, 1483 | "node_modules/@typescript-eslint/typescript-estree": { 1484 | "version": "7.5.0", 1485 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", 1486 | "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", 1487 | "dev": true, 1488 | "dependencies": { 1489 | "@typescript-eslint/types": "7.5.0", 1490 | "@typescript-eslint/visitor-keys": "7.5.0", 1491 | "debug": "^4.3.4", 1492 | "globby": "^11.1.0", 1493 | "is-glob": "^4.0.3", 1494 | "minimatch": "9.0.3", 1495 | "semver": "^7.5.4", 1496 | "ts-api-utils": "^1.0.1" 1497 | }, 1498 | "engines": { 1499 | "node": "^18.18.0 || >=20.0.0" 1500 | }, 1501 | "funding": { 1502 | "type": "opencollective", 1503 | "url": "https://opencollective.com/typescript-eslint" 1504 | }, 1505 | "peerDependenciesMeta": { 1506 | "typescript": { 1507 | "optional": true 1508 | } 1509 | } 1510 | }, 1511 | "node_modules/@typescript-eslint/utils": { 1512 | "version": "7.5.0", 1513 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", 1514 | "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", 1515 | "dev": true, 1516 | "dependencies": { 1517 | "@eslint-community/eslint-utils": "^4.4.0", 1518 | "@types/json-schema": "^7.0.12", 1519 | "@types/semver": "^7.5.0", 1520 | "@typescript-eslint/scope-manager": "7.5.0", 1521 | "@typescript-eslint/types": "7.5.0", 1522 | "@typescript-eslint/typescript-estree": "7.5.0", 1523 | "semver": "^7.5.4" 1524 | }, 1525 | "engines": { 1526 | "node": "^18.18.0 || >=20.0.0" 1527 | }, 1528 | "funding": { 1529 | "type": "opencollective", 1530 | "url": "https://opencollective.com/typescript-eslint" 1531 | }, 1532 | "peerDependencies": { 1533 | "eslint": "^8.56.0" 1534 | } 1535 | }, 1536 | "node_modules/@typescript-eslint/visitor-keys": { 1537 | "version": "7.5.0", 1538 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", 1539 | "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", 1540 | "dev": true, 1541 | "dependencies": { 1542 | "@typescript-eslint/types": "7.5.0", 1543 | "eslint-visitor-keys": "^3.4.1" 1544 | }, 1545 | "engines": { 1546 | "node": "^18.18.0 || >=20.0.0" 1547 | }, 1548 | "funding": { 1549 | "type": "opencollective", 1550 | "url": "https://opencollective.com/typescript-eslint" 1551 | } 1552 | }, 1553 | "node_modules/@ungap/structured-clone": { 1554 | "version": "1.2.0", 1555 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 1556 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 1557 | "dev": true 1558 | }, 1559 | "node_modules/@vitejs/plugin-react": { 1560 | "version": "4.2.1", 1561 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", 1562 | "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", 1563 | "dev": true, 1564 | "dependencies": { 1565 | "@babel/core": "^7.23.5", 1566 | "@babel/plugin-transform-react-jsx-self": "^7.23.3", 1567 | "@babel/plugin-transform-react-jsx-source": "^7.23.3", 1568 | "@types/babel__core": "^7.20.5", 1569 | "react-refresh": "^0.14.0" 1570 | }, 1571 | "engines": { 1572 | "node": "^14.18.0 || >=16.0.0" 1573 | }, 1574 | "peerDependencies": { 1575 | "vite": "^4.2.0 || ^5.0.0" 1576 | } 1577 | }, 1578 | "node_modules/acorn": { 1579 | "version": "8.11.3", 1580 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 1581 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 1582 | "dev": true, 1583 | "bin": { 1584 | "acorn": "bin/acorn" 1585 | }, 1586 | "engines": { 1587 | "node": ">=0.4.0" 1588 | } 1589 | }, 1590 | "node_modules/acorn-jsx": { 1591 | "version": "5.3.2", 1592 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1593 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1594 | "dev": true, 1595 | "peerDependencies": { 1596 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1597 | } 1598 | }, 1599 | "node_modules/ajv": { 1600 | "version": "6.12.6", 1601 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1602 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1603 | "dev": true, 1604 | "dependencies": { 1605 | "fast-deep-equal": "^3.1.1", 1606 | "fast-json-stable-stringify": "^2.0.0", 1607 | "json-schema-traverse": "^0.4.1", 1608 | "uri-js": "^4.2.2" 1609 | }, 1610 | "funding": { 1611 | "type": "github", 1612 | "url": "https://github.com/sponsors/epoberezkin" 1613 | } 1614 | }, 1615 | "node_modules/ansi-regex": { 1616 | "version": "5.0.1", 1617 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1618 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1619 | "dev": true, 1620 | "engines": { 1621 | "node": ">=8" 1622 | } 1623 | }, 1624 | "node_modules/ansi-styles": { 1625 | "version": "3.2.1", 1626 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1627 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1628 | "dev": true, 1629 | "dependencies": { 1630 | "color-convert": "^1.9.0" 1631 | }, 1632 | "engines": { 1633 | "node": ">=4" 1634 | } 1635 | }, 1636 | "node_modules/any-promise": { 1637 | "version": "1.3.0", 1638 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 1639 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 1640 | "dev": true 1641 | }, 1642 | "node_modules/anymatch": { 1643 | "version": "3.1.3", 1644 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1645 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1646 | "dev": true, 1647 | "dependencies": { 1648 | "normalize-path": "^3.0.0", 1649 | "picomatch": "^2.0.4" 1650 | }, 1651 | "engines": { 1652 | "node": ">= 8" 1653 | } 1654 | }, 1655 | "node_modules/arg": { 1656 | "version": "5.0.2", 1657 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1658 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 1659 | "dev": true 1660 | }, 1661 | "node_modules/argparse": { 1662 | "version": "2.0.1", 1663 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1664 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1665 | "dev": true 1666 | }, 1667 | "node_modules/array-union": { 1668 | "version": "2.1.0", 1669 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1670 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1671 | "dev": true, 1672 | "engines": { 1673 | "node": ">=8" 1674 | } 1675 | }, 1676 | "node_modules/autoprefixer": { 1677 | "version": "10.4.19", 1678 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", 1679 | "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", 1680 | "dev": true, 1681 | "funding": [ 1682 | { 1683 | "type": "opencollective", 1684 | "url": "https://opencollective.com/postcss/" 1685 | }, 1686 | { 1687 | "type": "tidelift", 1688 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1689 | }, 1690 | { 1691 | "type": "github", 1692 | "url": "https://github.com/sponsors/ai" 1693 | } 1694 | ], 1695 | "dependencies": { 1696 | "browserslist": "^4.23.0", 1697 | "caniuse-lite": "^1.0.30001599", 1698 | "fraction.js": "^4.3.7", 1699 | "normalize-range": "^0.1.2", 1700 | "picocolors": "^1.0.0", 1701 | "postcss-value-parser": "^4.2.0" 1702 | }, 1703 | "bin": { 1704 | "autoprefixer": "bin/autoprefixer" 1705 | }, 1706 | "engines": { 1707 | "node": "^10 || ^12 || >=14" 1708 | }, 1709 | "peerDependencies": { 1710 | "postcss": "^8.1.0" 1711 | } 1712 | }, 1713 | "node_modules/balanced-match": { 1714 | "version": "1.0.2", 1715 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1716 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1717 | "dev": true 1718 | }, 1719 | "node_modules/binary-extensions": { 1720 | "version": "2.3.0", 1721 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1722 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1723 | "dev": true, 1724 | "engines": { 1725 | "node": ">=8" 1726 | }, 1727 | "funding": { 1728 | "url": "https://github.com/sponsors/sindresorhus" 1729 | } 1730 | }, 1731 | "node_modules/brace-expansion": { 1732 | "version": "2.0.1", 1733 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1734 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1735 | "dev": true, 1736 | "dependencies": { 1737 | "balanced-match": "^1.0.0" 1738 | } 1739 | }, 1740 | "node_modules/braces": { 1741 | "version": "3.0.2", 1742 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1743 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1744 | "dev": true, 1745 | "dependencies": { 1746 | "fill-range": "^7.0.1" 1747 | }, 1748 | "engines": { 1749 | "node": ">=8" 1750 | } 1751 | }, 1752 | "node_modules/browserslist": { 1753 | "version": "4.23.0", 1754 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", 1755 | "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", 1756 | "dev": true, 1757 | "funding": [ 1758 | { 1759 | "type": "opencollective", 1760 | "url": "https://opencollective.com/browserslist" 1761 | }, 1762 | { 1763 | "type": "tidelift", 1764 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1765 | }, 1766 | { 1767 | "type": "github", 1768 | "url": "https://github.com/sponsors/ai" 1769 | } 1770 | ], 1771 | "dependencies": { 1772 | "caniuse-lite": "^1.0.30001587", 1773 | "electron-to-chromium": "^1.4.668", 1774 | "node-releases": "^2.0.14", 1775 | "update-browserslist-db": "^1.0.13" 1776 | }, 1777 | "bin": { 1778 | "browserslist": "cli.js" 1779 | }, 1780 | "engines": { 1781 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1782 | } 1783 | }, 1784 | "node_modules/callsites": { 1785 | "version": "3.1.0", 1786 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1787 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1788 | "dev": true, 1789 | "engines": { 1790 | "node": ">=6" 1791 | } 1792 | }, 1793 | "node_modules/camelcase-css": { 1794 | "version": "2.0.1", 1795 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1796 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1797 | "dev": true, 1798 | "engines": { 1799 | "node": ">= 6" 1800 | } 1801 | }, 1802 | "node_modules/caniuse-lite": { 1803 | "version": "1.0.30001606", 1804 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz", 1805 | "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==", 1806 | "dev": true, 1807 | "funding": [ 1808 | { 1809 | "type": "opencollective", 1810 | "url": "https://opencollective.com/browserslist" 1811 | }, 1812 | { 1813 | "type": "tidelift", 1814 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1815 | }, 1816 | { 1817 | "type": "github", 1818 | "url": "https://github.com/sponsors/ai" 1819 | } 1820 | ] 1821 | }, 1822 | "node_modules/chalk": { 1823 | "version": "2.4.2", 1824 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1825 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1826 | "dev": true, 1827 | "dependencies": { 1828 | "ansi-styles": "^3.2.1", 1829 | "escape-string-regexp": "^1.0.5", 1830 | "supports-color": "^5.3.0" 1831 | }, 1832 | "engines": { 1833 | "node": ">=4" 1834 | } 1835 | }, 1836 | "node_modules/chokidar": { 1837 | "version": "3.6.0", 1838 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1839 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1840 | "dev": true, 1841 | "dependencies": { 1842 | "anymatch": "~3.1.2", 1843 | "braces": "~3.0.2", 1844 | "glob-parent": "~5.1.2", 1845 | "is-binary-path": "~2.1.0", 1846 | "is-glob": "~4.0.1", 1847 | "normalize-path": "~3.0.0", 1848 | "readdirp": "~3.6.0" 1849 | }, 1850 | "engines": { 1851 | "node": ">= 8.10.0" 1852 | }, 1853 | "funding": { 1854 | "url": "https://paulmillr.com/funding/" 1855 | }, 1856 | "optionalDependencies": { 1857 | "fsevents": "~2.3.2" 1858 | } 1859 | }, 1860 | "node_modules/chokidar/node_modules/glob-parent": { 1861 | "version": "5.1.2", 1862 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1863 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1864 | "dev": true, 1865 | "dependencies": { 1866 | "is-glob": "^4.0.1" 1867 | }, 1868 | "engines": { 1869 | "node": ">= 6" 1870 | } 1871 | }, 1872 | "node_modules/color-convert": { 1873 | "version": "1.9.3", 1874 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1875 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1876 | "dev": true, 1877 | "dependencies": { 1878 | "color-name": "1.1.3" 1879 | } 1880 | }, 1881 | "node_modules/color-name": { 1882 | "version": "1.1.3", 1883 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1884 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1885 | "dev": true 1886 | }, 1887 | "node_modules/commander": { 1888 | "version": "4.1.1", 1889 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1890 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1891 | "dev": true, 1892 | "engines": { 1893 | "node": ">= 6" 1894 | } 1895 | }, 1896 | "node_modules/concat-map": { 1897 | "version": "0.0.1", 1898 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1899 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1900 | "dev": true 1901 | }, 1902 | "node_modules/convert-source-map": { 1903 | "version": "2.0.0", 1904 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1905 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1906 | "dev": true 1907 | }, 1908 | "node_modules/cross-spawn": { 1909 | "version": "7.0.3", 1910 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1911 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1912 | "dev": true, 1913 | "dependencies": { 1914 | "path-key": "^3.1.0", 1915 | "shebang-command": "^2.0.0", 1916 | "which": "^2.0.1" 1917 | }, 1918 | "engines": { 1919 | "node": ">= 8" 1920 | } 1921 | }, 1922 | "node_modules/cssesc": { 1923 | "version": "3.0.0", 1924 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1925 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1926 | "dev": true, 1927 | "bin": { 1928 | "cssesc": "bin/cssesc" 1929 | }, 1930 | "engines": { 1931 | "node": ">=4" 1932 | } 1933 | }, 1934 | "node_modules/csstype": { 1935 | "version": "3.1.3", 1936 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1937 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 1938 | }, 1939 | "node_modules/debug": { 1940 | "version": "4.3.4", 1941 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1942 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1943 | "dev": true, 1944 | "dependencies": { 1945 | "ms": "2.1.2" 1946 | }, 1947 | "engines": { 1948 | "node": ">=6.0" 1949 | }, 1950 | "peerDependenciesMeta": { 1951 | "supports-color": { 1952 | "optional": true 1953 | } 1954 | } 1955 | }, 1956 | "node_modules/deep-is": { 1957 | "version": "0.1.4", 1958 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1959 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1960 | "dev": true 1961 | }, 1962 | "node_modules/didyoumean": { 1963 | "version": "1.2.2", 1964 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1965 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1966 | "dev": true 1967 | }, 1968 | "node_modules/dir-glob": { 1969 | "version": "3.0.1", 1970 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1971 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1972 | "dev": true, 1973 | "dependencies": { 1974 | "path-type": "^4.0.0" 1975 | }, 1976 | "engines": { 1977 | "node": ">=8" 1978 | } 1979 | }, 1980 | "node_modules/dlv": { 1981 | "version": "1.1.3", 1982 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1983 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1984 | "dev": true 1985 | }, 1986 | "node_modules/doctrine": { 1987 | "version": "3.0.0", 1988 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1989 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1990 | "dev": true, 1991 | "dependencies": { 1992 | "esutils": "^2.0.2" 1993 | }, 1994 | "engines": { 1995 | "node": ">=6.0.0" 1996 | } 1997 | }, 1998 | "node_modules/eastasianwidth": { 1999 | "version": "0.2.0", 2000 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 2001 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 2002 | "dev": true 2003 | }, 2004 | "node_modules/electron-to-chromium": { 2005 | "version": "1.4.729", 2006 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.729.tgz", 2007 | "integrity": "sha512-bx7+5Saea/qu14kmPTDHQxkp2UnziG3iajUQu3BxFvCOnpAJdDbMV4rSl+EqFDkkpNNVUFlR1kDfpL59xfy1HA==", 2008 | "dev": true 2009 | }, 2010 | "node_modules/emoji-regex": { 2011 | "version": "9.2.2", 2012 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 2013 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 2014 | "dev": true 2015 | }, 2016 | "node_modules/esbuild": { 2017 | "version": "0.20.2", 2018 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", 2019 | "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", 2020 | "dev": true, 2021 | "hasInstallScript": true, 2022 | "bin": { 2023 | "esbuild": "bin/esbuild" 2024 | }, 2025 | "engines": { 2026 | "node": ">=12" 2027 | }, 2028 | "optionalDependencies": { 2029 | "@esbuild/aix-ppc64": "0.20.2", 2030 | "@esbuild/android-arm": "0.20.2", 2031 | "@esbuild/android-arm64": "0.20.2", 2032 | "@esbuild/android-x64": "0.20.2", 2033 | "@esbuild/darwin-arm64": "0.20.2", 2034 | "@esbuild/darwin-x64": "0.20.2", 2035 | "@esbuild/freebsd-arm64": "0.20.2", 2036 | "@esbuild/freebsd-x64": "0.20.2", 2037 | "@esbuild/linux-arm": "0.20.2", 2038 | "@esbuild/linux-arm64": "0.20.2", 2039 | "@esbuild/linux-ia32": "0.20.2", 2040 | "@esbuild/linux-loong64": "0.20.2", 2041 | "@esbuild/linux-mips64el": "0.20.2", 2042 | "@esbuild/linux-ppc64": "0.20.2", 2043 | "@esbuild/linux-riscv64": "0.20.2", 2044 | "@esbuild/linux-s390x": "0.20.2", 2045 | "@esbuild/linux-x64": "0.20.2", 2046 | "@esbuild/netbsd-x64": "0.20.2", 2047 | "@esbuild/openbsd-x64": "0.20.2", 2048 | "@esbuild/sunos-x64": "0.20.2", 2049 | "@esbuild/win32-arm64": "0.20.2", 2050 | "@esbuild/win32-ia32": "0.20.2", 2051 | "@esbuild/win32-x64": "0.20.2" 2052 | } 2053 | }, 2054 | "node_modules/escalade": { 2055 | "version": "3.1.2", 2056 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 2057 | "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 2058 | "dev": true, 2059 | "engines": { 2060 | "node": ">=6" 2061 | } 2062 | }, 2063 | "node_modules/escape-string-regexp": { 2064 | "version": "1.0.5", 2065 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2066 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 2067 | "dev": true, 2068 | "engines": { 2069 | "node": ">=0.8.0" 2070 | } 2071 | }, 2072 | "node_modules/eslint": { 2073 | "version": "8.57.0", 2074 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", 2075 | "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 2076 | "dev": true, 2077 | "dependencies": { 2078 | "@eslint-community/eslint-utils": "^4.2.0", 2079 | "@eslint-community/regexpp": "^4.6.1", 2080 | "@eslint/eslintrc": "^2.1.4", 2081 | "@eslint/js": "8.57.0", 2082 | "@humanwhocodes/config-array": "^0.11.14", 2083 | "@humanwhocodes/module-importer": "^1.0.1", 2084 | "@nodelib/fs.walk": "^1.2.8", 2085 | "@ungap/structured-clone": "^1.2.0", 2086 | "ajv": "^6.12.4", 2087 | "chalk": "^4.0.0", 2088 | "cross-spawn": "^7.0.2", 2089 | "debug": "^4.3.2", 2090 | "doctrine": "^3.0.0", 2091 | "escape-string-regexp": "^4.0.0", 2092 | "eslint-scope": "^7.2.2", 2093 | "eslint-visitor-keys": "^3.4.3", 2094 | "espree": "^9.6.1", 2095 | "esquery": "^1.4.2", 2096 | "esutils": "^2.0.2", 2097 | "fast-deep-equal": "^3.1.3", 2098 | "file-entry-cache": "^6.0.1", 2099 | "find-up": "^5.0.0", 2100 | "glob-parent": "^6.0.2", 2101 | "globals": "^13.19.0", 2102 | "graphemer": "^1.4.0", 2103 | "ignore": "^5.2.0", 2104 | "imurmurhash": "^0.1.4", 2105 | "is-glob": "^4.0.0", 2106 | "is-path-inside": "^3.0.3", 2107 | "js-yaml": "^4.1.0", 2108 | "json-stable-stringify-without-jsonify": "^1.0.1", 2109 | "levn": "^0.4.1", 2110 | "lodash.merge": "^4.6.2", 2111 | "minimatch": "^3.1.2", 2112 | "natural-compare": "^1.4.0", 2113 | "optionator": "^0.9.3", 2114 | "strip-ansi": "^6.0.1", 2115 | "text-table": "^0.2.0" 2116 | }, 2117 | "bin": { 2118 | "eslint": "bin/eslint.js" 2119 | }, 2120 | "engines": { 2121 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2122 | }, 2123 | "funding": { 2124 | "url": "https://opencollective.com/eslint" 2125 | } 2126 | }, 2127 | "node_modules/eslint-plugin-react-hooks": { 2128 | "version": "4.6.0", 2129 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", 2130 | "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", 2131 | "dev": true, 2132 | "engines": { 2133 | "node": ">=10" 2134 | }, 2135 | "peerDependencies": { 2136 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" 2137 | } 2138 | }, 2139 | "node_modules/eslint-plugin-react-refresh": { 2140 | "version": "0.4.6", 2141 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", 2142 | "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", 2143 | "dev": true, 2144 | "peerDependencies": { 2145 | "eslint": ">=7" 2146 | } 2147 | }, 2148 | "node_modules/eslint-scope": { 2149 | "version": "7.2.2", 2150 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 2151 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 2152 | "dev": true, 2153 | "dependencies": { 2154 | "esrecurse": "^4.3.0", 2155 | "estraverse": "^5.2.0" 2156 | }, 2157 | "engines": { 2158 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2159 | }, 2160 | "funding": { 2161 | "url": "https://opencollective.com/eslint" 2162 | } 2163 | }, 2164 | "node_modules/eslint-visitor-keys": { 2165 | "version": "3.4.3", 2166 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 2167 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 2168 | "dev": true, 2169 | "engines": { 2170 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2171 | }, 2172 | "funding": { 2173 | "url": "https://opencollective.com/eslint" 2174 | } 2175 | }, 2176 | "node_modules/eslint/node_modules/ansi-styles": { 2177 | "version": "4.3.0", 2178 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2179 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2180 | "dev": true, 2181 | "dependencies": { 2182 | "color-convert": "^2.0.1" 2183 | }, 2184 | "engines": { 2185 | "node": ">=8" 2186 | }, 2187 | "funding": { 2188 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2189 | } 2190 | }, 2191 | "node_modules/eslint/node_modules/brace-expansion": { 2192 | "version": "1.1.11", 2193 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2194 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2195 | "dev": true, 2196 | "dependencies": { 2197 | "balanced-match": "^1.0.0", 2198 | "concat-map": "0.0.1" 2199 | } 2200 | }, 2201 | "node_modules/eslint/node_modules/chalk": { 2202 | "version": "4.1.2", 2203 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2204 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2205 | "dev": true, 2206 | "dependencies": { 2207 | "ansi-styles": "^4.1.0", 2208 | "supports-color": "^7.1.0" 2209 | }, 2210 | "engines": { 2211 | "node": ">=10" 2212 | }, 2213 | "funding": { 2214 | "url": "https://github.com/chalk/chalk?sponsor=1" 2215 | } 2216 | }, 2217 | "node_modules/eslint/node_modules/color-convert": { 2218 | "version": "2.0.1", 2219 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2220 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2221 | "dev": true, 2222 | "dependencies": { 2223 | "color-name": "~1.1.4" 2224 | }, 2225 | "engines": { 2226 | "node": ">=7.0.0" 2227 | } 2228 | }, 2229 | "node_modules/eslint/node_modules/color-name": { 2230 | "version": "1.1.4", 2231 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2232 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2233 | "dev": true 2234 | }, 2235 | "node_modules/eslint/node_modules/escape-string-regexp": { 2236 | "version": "4.0.0", 2237 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2238 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2239 | "dev": true, 2240 | "engines": { 2241 | "node": ">=10" 2242 | }, 2243 | "funding": { 2244 | "url": "https://github.com/sponsors/sindresorhus" 2245 | } 2246 | }, 2247 | "node_modules/eslint/node_modules/globals": { 2248 | "version": "13.24.0", 2249 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 2250 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 2251 | "dev": true, 2252 | "dependencies": { 2253 | "type-fest": "^0.20.2" 2254 | }, 2255 | "engines": { 2256 | "node": ">=8" 2257 | }, 2258 | "funding": { 2259 | "url": "https://github.com/sponsors/sindresorhus" 2260 | } 2261 | }, 2262 | "node_modules/eslint/node_modules/has-flag": { 2263 | "version": "4.0.0", 2264 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2265 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2266 | "dev": true, 2267 | "engines": { 2268 | "node": ">=8" 2269 | } 2270 | }, 2271 | "node_modules/eslint/node_modules/minimatch": { 2272 | "version": "3.1.2", 2273 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2274 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2275 | "dev": true, 2276 | "dependencies": { 2277 | "brace-expansion": "^1.1.7" 2278 | }, 2279 | "engines": { 2280 | "node": "*" 2281 | } 2282 | }, 2283 | "node_modules/eslint/node_modules/supports-color": { 2284 | "version": "7.2.0", 2285 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2286 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2287 | "dev": true, 2288 | "dependencies": { 2289 | "has-flag": "^4.0.0" 2290 | }, 2291 | "engines": { 2292 | "node": ">=8" 2293 | } 2294 | }, 2295 | "node_modules/espree": { 2296 | "version": "9.6.1", 2297 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 2298 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 2299 | "dev": true, 2300 | "dependencies": { 2301 | "acorn": "^8.9.0", 2302 | "acorn-jsx": "^5.3.2", 2303 | "eslint-visitor-keys": "^3.4.1" 2304 | }, 2305 | "engines": { 2306 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 2307 | }, 2308 | "funding": { 2309 | "url": "https://opencollective.com/eslint" 2310 | } 2311 | }, 2312 | "node_modules/esquery": { 2313 | "version": "1.5.0", 2314 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 2315 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 2316 | "dev": true, 2317 | "dependencies": { 2318 | "estraverse": "^5.1.0" 2319 | }, 2320 | "engines": { 2321 | "node": ">=0.10" 2322 | } 2323 | }, 2324 | "node_modules/esrecurse": { 2325 | "version": "4.3.0", 2326 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2327 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2328 | "dev": true, 2329 | "dependencies": { 2330 | "estraverse": "^5.2.0" 2331 | }, 2332 | "engines": { 2333 | "node": ">=4.0" 2334 | } 2335 | }, 2336 | "node_modules/estraverse": { 2337 | "version": "5.3.0", 2338 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2339 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2340 | "dev": true, 2341 | "engines": { 2342 | "node": ">=4.0" 2343 | } 2344 | }, 2345 | "node_modules/esutils": { 2346 | "version": "2.0.3", 2347 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2348 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2349 | "dev": true, 2350 | "engines": { 2351 | "node": ">=0.10.0" 2352 | } 2353 | }, 2354 | "node_modules/fast-deep-equal": { 2355 | "version": "3.1.3", 2356 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2357 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2358 | "dev": true 2359 | }, 2360 | "node_modules/fast-glob": { 2361 | "version": "3.3.2", 2362 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 2363 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 2364 | "dev": true, 2365 | "dependencies": { 2366 | "@nodelib/fs.stat": "^2.0.2", 2367 | "@nodelib/fs.walk": "^1.2.3", 2368 | "glob-parent": "^5.1.2", 2369 | "merge2": "^1.3.0", 2370 | "micromatch": "^4.0.4" 2371 | }, 2372 | "engines": { 2373 | "node": ">=8.6.0" 2374 | } 2375 | }, 2376 | "node_modules/fast-glob/node_modules/glob-parent": { 2377 | "version": "5.1.2", 2378 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2379 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2380 | "dev": true, 2381 | "dependencies": { 2382 | "is-glob": "^4.0.1" 2383 | }, 2384 | "engines": { 2385 | "node": ">= 6" 2386 | } 2387 | }, 2388 | "node_modules/fast-json-stable-stringify": { 2389 | "version": "2.1.0", 2390 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2391 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2392 | "dev": true 2393 | }, 2394 | "node_modules/fast-levenshtein": { 2395 | "version": "2.0.6", 2396 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2397 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2398 | "dev": true 2399 | }, 2400 | "node_modules/fastq": { 2401 | "version": "1.17.1", 2402 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", 2403 | "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", 2404 | "dev": true, 2405 | "dependencies": { 2406 | "reusify": "^1.0.4" 2407 | } 2408 | }, 2409 | "node_modules/file-entry-cache": { 2410 | "version": "6.0.1", 2411 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2412 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2413 | "dev": true, 2414 | "dependencies": { 2415 | "flat-cache": "^3.0.4" 2416 | }, 2417 | "engines": { 2418 | "node": "^10.12.0 || >=12.0.0" 2419 | } 2420 | }, 2421 | "node_modules/fill-range": { 2422 | "version": "7.0.1", 2423 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2424 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2425 | "dev": true, 2426 | "dependencies": { 2427 | "to-regex-range": "^5.0.1" 2428 | }, 2429 | "engines": { 2430 | "node": ">=8" 2431 | } 2432 | }, 2433 | "node_modules/find-up": { 2434 | "version": "5.0.0", 2435 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2436 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2437 | "dev": true, 2438 | "dependencies": { 2439 | "locate-path": "^6.0.0", 2440 | "path-exists": "^4.0.0" 2441 | }, 2442 | "engines": { 2443 | "node": ">=10" 2444 | }, 2445 | "funding": { 2446 | "url": "https://github.com/sponsors/sindresorhus" 2447 | } 2448 | }, 2449 | "node_modules/flat-cache": { 2450 | "version": "3.2.0", 2451 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 2452 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 2453 | "dev": true, 2454 | "dependencies": { 2455 | "flatted": "^3.2.9", 2456 | "keyv": "^4.5.3", 2457 | "rimraf": "^3.0.2" 2458 | }, 2459 | "engines": { 2460 | "node": "^10.12.0 || >=12.0.0" 2461 | } 2462 | }, 2463 | "node_modules/flatted": { 2464 | "version": "3.3.1", 2465 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", 2466 | "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", 2467 | "dev": true 2468 | }, 2469 | "node_modules/foreground-child": { 2470 | "version": "3.1.1", 2471 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", 2472 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", 2473 | "dev": true, 2474 | "dependencies": { 2475 | "cross-spawn": "^7.0.0", 2476 | "signal-exit": "^4.0.1" 2477 | }, 2478 | "engines": { 2479 | "node": ">=14" 2480 | }, 2481 | "funding": { 2482 | "url": "https://github.com/sponsors/isaacs" 2483 | } 2484 | }, 2485 | "node_modules/fraction.js": { 2486 | "version": "4.3.7", 2487 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 2488 | "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 2489 | "dev": true, 2490 | "engines": { 2491 | "node": "*" 2492 | }, 2493 | "funding": { 2494 | "type": "patreon", 2495 | "url": "https://github.com/sponsors/rawify" 2496 | } 2497 | }, 2498 | "node_modules/framer-motion": { 2499 | "version": "11.0.25", 2500 | "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.25.tgz", 2501 | "integrity": "sha512-mRt7vQGzA7++wTgb+PW1TrlXXgndqR6hCiJ48fXr2X9alte2hPQiAq556HRwDCt0Q5X98MNvcSe4KUa27Gm5Lg==", 2502 | "dev": true, 2503 | "dependencies": { 2504 | "tslib": "^2.4.0" 2505 | }, 2506 | "peerDependencies": { 2507 | "@emotion/is-prop-valid": "*", 2508 | "react": "^18.0.0", 2509 | "react-dom": "^18.0.0" 2510 | }, 2511 | "peerDependenciesMeta": { 2512 | "@emotion/is-prop-valid": { 2513 | "optional": true 2514 | }, 2515 | "react": { 2516 | "optional": true 2517 | }, 2518 | "react-dom": { 2519 | "optional": true 2520 | } 2521 | } 2522 | }, 2523 | "node_modules/fs.realpath": { 2524 | "version": "1.0.0", 2525 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2526 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2527 | "dev": true 2528 | }, 2529 | "node_modules/fsevents": { 2530 | "version": "2.3.3", 2531 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2532 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2533 | "dev": true, 2534 | "hasInstallScript": true, 2535 | "optional": true, 2536 | "os": [ 2537 | "darwin" 2538 | ], 2539 | "engines": { 2540 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2541 | } 2542 | }, 2543 | "node_modules/function-bind": { 2544 | "version": "1.1.2", 2545 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2546 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2547 | "dev": true, 2548 | "funding": { 2549 | "url": "https://github.com/sponsors/ljharb" 2550 | } 2551 | }, 2552 | "node_modules/gensync": { 2553 | "version": "1.0.0-beta.2", 2554 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 2555 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 2556 | "dev": true, 2557 | "engines": { 2558 | "node": ">=6.9.0" 2559 | } 2560 | }, 2561 | "node_modules/glob": { 2562 | "version": "7.2.3", 2563 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2564 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2565 | "dev": true, 2566 | "dependencies": { 2567 | "fs.realpath": "^1.0.0", 2568 | "inflight": "^1.0.4", 2569 | "inherits": "2", 2570 | "minimatch": "^3.1.1", 2571 | "once": "^1.3.0", 2572 | "path-is-absolute": "^1.0.0" 2573 | }, 2574 | "engines": { 2575 | "node": "*" 2576 | }, 2577 | "funding": { 2578 | "url": "https://github.com/sponsors/isaacs" 2579 | } 2580 | }, 2581 | "node_modules/glob-parent": { 2582 | "version": "6.0.2", 2583 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2584 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2585 | "dev": true, 2586 | "dependencies": { 2587 | "is-glob": "^4.0.3" 2588 | }, 2589 | "engines": { 2590 | "node": ">=10.13.0" 2591 | } 2592 | }, 2593 | "node_modules/glob/node_modules/brace-expansion": { 2594 | "version": "1.1.11", 2595 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2596 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2597 | "dev": true, 2598 | "dependencies": { 2599 | "balanced-match": "^1.0.0", 2600 | "concat-map": "0.0.1" 2601 | } 2602 | }, 2603 | "node_modules/glob/node_modules/minimatch": { 2604 | "version": "3.1.2", 2605 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2606 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2607 | "dev": true, 2608 | "dependencies": { 2609 | "brace-expansion": "^1.1.7" 2610 | }, 2611 | "engines": { 2612 | "node": "*" 2613 | } 2614 | }, 2615 | "node_modules/globals": { 2616 | "version": "11.12.0", 2617 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 2618 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 2619 | "dev": true, 2620 | "engines": { 2621 | "node": ">=4" 2622 | } 2623 | }, 2624 | "node_modules/globby": { 2625 | "version": "11.1.0", 2626 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2627 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2628 | "dev": true, 2629 | "dependencies": { 2630 | "array-union": "^2.1.0", 2631 | "dir-glob": "^3.0.1", 2632 | "fast-glob": "^3.2.9", 2633 | "ignore": "^5.2.0", 2634 | "merge2": "^1.4.1", 2635 | "slash": "^3.0.0" 2636 | }, 2637 | "engines": { 2638 | "node": ">=10" 2639 | }, 2640 | "funding": { 2641 | "url": "https://github.com/sponsors/sindresorhus" 2642 | } 2643 | }, 2644 | "node_modules/goober": { 2645 | "version": "2.1.14", 2646 | "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz", 2647 | "integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==", 2648 | "peerDependencies": { 2649 | "csstype": "^3.0.10" 2650 | } 2651 | }, 2652 | "node_modules/graphemer": { 2653 | "version": "1.4.0", 2654 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2655 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2656 | "dev": true 2657 | }, 2658 | "node_modules/has-flag": { 2659 | "version": "3.0.0", 2660 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2661 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 2662 | "dev": true, 2663 | "engines": { 2664 | "node": ">=4" 2665 | } 2666 | }, 2667 | "node_modules/hasown": { 2668 | "version": "2.0.2", 2669 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 2670 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 2671 | "dev": true, 2672 | "dependencies": { 2673 | "function-bind": "^1.1.2" 2674 | }, 2675 | "engines": { 2676 | "node": ">= 0.4" 2677 | } 2678 | }, 2679 | "node_modules/howler": { 2680 | "version": "2.2.4", 2681 | "resolved": "https://registry.npmjs.org/howler/-/howler-2.2.4.tgz", 2682 | "integrity": "sha512-iARIBPgcQrwtEr+tALF+rapJ8qSc+Set2GJQl7xT1MQzWaVkFebdJhR3alVlSiUf5U7nAANKuj3aWpwerocD5w==" 2683 | }, 2684 | "node_modules/ignore": { 2685 | "version": "5.3.1", 2686 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 2687 | "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 2688 | "dev": true, 2689 | "engines": { 2690 | "node": ">= 4" 2691 | } 2692 | }, 2693 | "node_modules/import-fresh": { 2694 | "version": "3.3.0", 2695 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2696 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2697 | "dev": true, 2698 | "dependencies": { 2699 | "parent-module": "^1.0.0", 2700 | "resolve-from": "^4.0.0" 2701 | }, 2702 | "engines": { 2703 | "node": ">=6" 2704 | }, 2705 | "funding": { 2706 | "url": "https://github.com/sponsors/sindresorhus" 2707 | } 2708 | }, 2709 | "node_modules/imurmurhash": { 2710 | "version": "0.1.4", 2711 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2712 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2713 | "dev": true, 2714 | "engines": { 2715 | "node": ">=0.8.19" 2716 | } 2717 | }, 2718 | "node_modules/inflight": { 2719 | "version": "1.0.6", 2720 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2721 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2722 | "dev": true, 2723 | "dependencies": { 2724 | "once": "^1.3.0", 2725 | "wrappy": "1" 2726 | } 2727 | }, 2728 | "node_modules/inherits": { 2729 | "version": "2.0.4", 2730 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2731 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2732 | "dev": true 2733 | }, 2734 | "node_modules/is-binary-path": { 2735 | "version": "2.1.0", 2736 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2737 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2738 | "dev": true, 2739 | "dependencies": { 2740 | "binary-extensions": "^2.0.0" 2741 | }, 2742 | "engines": { 2743 | "node": ">=8" 2744 | } 2745 | }, 2746 | "node_modules/is-core-module": { 2747 | "version": "2.13.1", 2748 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 2749 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 2750 | "dev": true, 2751 | "dependencies": { 2752 | "hasown": "^2.0.0" 2753 | }, 2754 | "funding": { 2755 | "url": "https://github.com/sponsors/ljharb" 2756 | } 2757 | }, 2758 | "node_modules/is-extglob": { 2759 | "version": "2.1.1", 2760 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2761 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2762 | "dev": true, 2763 | "engines": { 2764 | "node": ">=0.10.0" 2765 | } 2766 | }, 2767 | "node_modules/is-fullwidth-code-point": { 2768 | "version": "3.0.0", 2769 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 2770 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 2771 | "dev": true, 2772 | "engines": { 2773 | "node": ">=8" 2774 | } 2775 | }, 2776 | "node_modules/is-glob": { 2777 | "version": "4.0.3", 2778 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2779 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2780 | "dev": true, 2781 | "dependencies": { 2782 | "is-extglob": "^2.1.1" 2783 | }, 2784 | "engines": { 2785 | "node": ">=0.10.0" 2786 | } 2787 | }, 2788 | "node_modules/is-number": { 2789 | "version": "7.0.0", 2790 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2791 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2792 | "dev": true, 2793 | "engines": { 2794 | "node": ">=0.12.0" 2795 | } 2796 | }, 2797 | "node_modules/is-path-inside": { 2798 | "version": "3.0.3", 2799 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2800 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2801 | "dev": true, 2802 | "engines": { 2803 | "node": ">=8" 2804 | } 2805 | }, 2806 | "node_modules/isexe": { 2807 | "version": "2.0.0", 2808 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2809 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2810 | "dev": true 2811 | }, 2812 | "node_modules/jackspeak": { 2813 | "version": "2.3.6", 2814 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", 2815 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", 2816 | "dev": true, 2817 | "dependencies": { 2818 | "@isaacs/cliui": "^8.0.2" 2819 | }, 2820 | "engines": { 2821 | "node": ">=14" 2822 | }, 2823 | "funding": { 2824 | "url": "https://github.com/sponsors/isaacs" 2825 | }, 2826 | "optionalDependencies": { 2827 | "@pkgjs/parseargs": "^0.11.0" 2828 | } 2829 | }, 2830 | "node_modules/jiti": { 2831 | "version": "1.21.0", 2832 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", 2833 | "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", 2834 | "dev": true, 2835 | "bin": { 2836 | "jiti": "bin/jiti.js" 2837 | } 2838 | }, 2839 | "node_modules/js-tokens": { 2840 | "version": "4.0.0", 2841 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2842 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2843 | }, 2844 | "node_modules/js-yaml": { 2845 | "version": "4.1.0", 2846 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2847 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2848 | "dev": true, 2849 | "dependencies": { 2850 | "argparse": "^2.0.1" 2851 | }, 2852 | "bin": { 2853 | "js-yaml": "bin/js-yaml.js" 2854 | } 2855 | }, 2856 | "node_modules/jsesc": { 2857 | "version": "2.5.2", 2858 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2859 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2860 | "dev": true, 2861 | "bin": { 2862 | "jsesc": "bin/jsesc" 2863 | }, 2864 | "engines": { 2865 | "node": ">=4" 2866 | } 2867 | }, 2868 | "node_modules/json-buffer": { 2869 | "version": "3.0.1", 2870 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2871 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2872 | "dev": true 2873 | }, 2874 | "node_modules/json-schema-traverse": { 2875 | "version": "0.4.1", 2876 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2877 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2878 | "dev": true 2879 | }, 2880 | "node_modules/json-stable-stringify-without-jsonify": { 2881 | "version": "1.0.1", 2882 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2883 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2884 | "dev": true 2885 | }, 2886 | "node_modules/json5": { 2887 | "version": "2.2.3", 2888 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2889 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2890 | "dev": true, 2891 | "bin": { 2892 | "json5": "lib/cli.js" 2893 | }, 2894 | "engines": { 2895 | "node": ">=6" 2896 | } 2897 | }, 2898 | "node_modules/keyv": { 2899 | "version": "4.5.4", 2900 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2901 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2902 | "dev": true, 2903 | "dependencies": { 2904 | "json-buffer": "3.0.1" 2905 | } 2906 | }, 2907 | "node_modules/levn": { 2908 | "version": "0.4.1", 2909 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2910 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2911 | "dev": true, 2912 | "dependencies": { 2913 | "prelude-ls": "^1.2.1", 2914 | "type-check": "~0.4.0" 2915 | }, 2916 | "engines": { 2917 | "node": ">= 0.8.0" 2918 | } 2919 | }, 2920 | "node_modules/lilconfig": { 2921 | "version": "2.1.0", 2922 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 2923 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 2924 | "dev": true, 2925 | "engines": { 2926 | "node": ">=10" 2927 | } 2928 | }, 2929 | "node_modules/lines-and-columns": { 2930 | "version": "1.2.4", 2931 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2932 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2933 | "dev": true 2934 | }, 2935 | "node_modules/locate-path": { 2936 | "version": "6.0.0", 2937 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2938 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2939 | "dev": true, 2940 | "dependencies": { 2941 | "p-locate": "^5.0.0" 2942 | }, 2943 | "engines": { 2944 | "node": ">=10" 2945 | }, 2946 | "funding": { 2947 | "url": "https://github.com/sponsors/sindresorhus" 2948 | } 2949 | }, 2950 | "node_modules/lodash.merge": { 2951 | "version": "4.6.2", 2952 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2953 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2954 | "dev": true 2955 | }, 2956 | "node_modules/loose-envify": { 2957 | "version": "1.4.0", 2958 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2959 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2960 | "dependencies": { 2961 | "js-tokens": "^3.0.0 || ^4.0.0" 2962 | }, 2963 | "bin": { 2964 | "loose-envify": "cli.js" 2965 | } 2966 | }, 2967 | "node_modules/lru-cache": { 2968 | "version": "5.1.1", 2969 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2970 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2971 | "dev": true, 2972 | "dependencies": { 2973 | "yallist": "^3.0.2" 2974 | } 2975 | }, 2976 | "node_modules/merge2": { 2977 | "version": "1.4.1", 2978 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2979 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2980 | "dev": true, 2981 | "engines": { 2982 | "node": ">= 8" 2983 | } 2984 | }, 2985 | "node_modules/micromatch": { 2986 | "version": "4.0.5", 2987 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2988 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2989 | "dev": true, 2990 | "dependencies": { 2991 | "braces": "^3.0.2", 2992 | "picomatch": "^2.3.1" 2993 | }, 2994 | "engines": { 2995 | "node": ">=8.6" 2996 | } 2997 | }, 2998 | "node_modules/minimatch": { 2999 | "version": "9.0.3", 3000 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 3001 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 3002 | "dev": true, 3003 | "dependencies": { 3004 | "brace-expansion": "^2.0.1" 3005 | }, 3006 | "engines": { 3007 | "node": ">=16 || 14 >=14.17" 3008 | }, 3009 | "funding": { 3010 | "url": "https://github.com/sponsors/isaacs" 3011 | } 3012 | }, 3013 | "node_modules/minipass": { 3014 | "version": "7.0.4", 3015 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", 3016 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", 3017 | "dev": true, 3018 | "engines": { 3019 | "node": ">=16 || 14 >=14.17" 3020 | } 3021 | }, 3022 | "node_modules/ms": { 3023 | "version": "2.1.2", 3024 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3025 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3026 | "dev": true 3027 | }, 3028 | "node_modules/mz": { 3029 | "version": "2.7.0", 3030 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 3031 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 3032 | "dev": true, 3033 | "dependencies": { 3034 | "any-promise": "^1.0.0", 3035 | "object-assign": "^4.0.1", 3036 | "thenify-all": "^1.0.0" 3037 | } 3038 | }, 3039 | "node_modules/nanoid": { 3040 | "version": "3.3.7", 3041 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 3042 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 3043 | "dev": true, 3044 | "funding": [ 3045 | { 3046 | "type": "github", 3047 | "url": "https://github.com/sponsors/ai" 3048 | } 3049 | ], 3050 | "bin": { 3051 | "nanoid": "bin/nanoid.cjs" 3052 | }, 3053 | "engines": { 3054 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 3055 | } 3056 | }, 3057 | "node_modules/natural-compare": { 3058 | "version": "1.4.0", 3059 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3060 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 3061 | "dev": true 3062 | }, 3063 | "node_modules/node-releases": { 3064 | "version": "2.0.14", 3065 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", 3066 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", 3067 | "dev": true 3068 | }, 3069 | "node_modules/normalize-path": { 3070 | "version": "3.0.0", 3071 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 3072 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 3073 | "dev": true, 3074 | "engines": { 3075 | "node": ">=0.10.0" 3076 | } 3077 | }, 3078 | "node_modules/normalize-range": { 3079 | "version": "0.1.2", 3080 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 3081 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 3082 | "dev": true, 3083 | "engines": { 3084 | "node": ">=0.10.0" 3085 | } 3086 | }, 3087 | "node_modules/object-assign": { 3088 | "version": "4.1.1", 3089 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 3090 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 3091 | "dev": true, 3092 | "engines": { 3093 | "node": ">=0.10.0" 3094 | } 3095 | }, 3096 | "node_modules/object-hash": { 3097 | "version": "3.0.0", 3098 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 3099 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 3100 | "dev": true, 3101 | "engines": { 3102 | "node": ">= 6" 3103 | } 3104 | }, 3105 | "node_modules/once": { 3106 | "version": "1.4.0", 3107 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3108 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 3109 | "dev": true, 3110 | "dependencies": { 3111 | "wrappy": "1" 3112 | } 3113 | }, 3114 | "node_modules/optionator": { 3115 | "version": "0.9.3", 3116 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 3117 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 3118 | "dev": true, 3119 | "dependencies": { 3120 | "@aashutoshrathi/word-wrap": "^1.2.3", 3121 | "deep-is": "^0.1.3", 3122 | "fast-levenshtein": "^2.0.6", 3123 | "levn": "^0.4.1", 3124 | "prelude-ls": "^1.2.1", 3125 | "type-check": "^0.4.0" 3126 | }, 3127 | "engines": { 3128 | "node": ">= 0.8.0" 3129 | } 3130 | }, 3131 | "node_modules/p-limit": { 3132 | "version": "3.1.0", 3133 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3134 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3135 | "dev": true, 3136 | "dependencies": { 3137 | "yocto-queue": "^0.1.0" 3138 | }, 3139 | "engines": { 3140 | "node": ">=10" 3141 | }, 3142 | "funding": { 3143 | "url": "https://github.com/sponsors/sindresorhus" 3144 | } 3145 | }, 3146 | "node_modules/p-locate": { 3147 | "version": "5.0.0", 3148 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3149 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3150 | "dev": true, 3151 | "dependencies": { 3152 | "p-limit": "^3.0.2" 3153 | }, 3154 | "engines": { 3155 | "node": ">=10" 3156 | }, 3157 | "funding": { 3158 | "url": "https://github.com/sponsors/sindresorhus" 3159 | } 3160 | }, 3161 | "node_modules/parent-module": { 3162 | "version": "1.0.1", 3163 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3164 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3165 | "dev": true, 3166 | "dependencies": { 3167 | "callsites": "^3.0.0" 3168 | }, 3169 | "engines": { 3170 | "node": ">=6" 3171 | } 3172 | }, 3173 | "node_modules/path-exists": { 3174 | "version": "4.0.0", 3175 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3176 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3177 | "dev": true, 3178 | "engines": { 3179 | "node": ">=8" 3180 | } 3181 | }, 3182 | "node_modules/path-is-absolute": { 3183 | "version": "1.0.1", 3184 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3185 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3186 | "dev": true, 3187 | "engines": { 3188 | "node": ">=0.10.0" 3189 | } 3190 | }, 3191 | "node_modules/path-key": { 3192 | "version": "3.1.1", 3193 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3194 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3195 | "dev": true, 3196 | "engines": { 3197 | "node": ">=8" 3198 | } 3199 | }, 3200 | "node_modules/path-parse": { 3201 | "version": "1.0.7", 3202 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3203 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3204 | "dev": true 3205 | }, 3206 | "node_modules/path-scurry": { 3207 | "version": "1.10.2", 3208 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", 3209 | "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", 3210 | "dev": true, 3211 | "dependencies": { 3212 | "lru-cache": "^10.2.0", 3213 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 3214 | }, 3215 | "engines": { 3216 | "node": ">=16 || 14 >=14.17" 3217 | }, 3218 | "funding": { 3219 | "url": "https://github.com/sponsors/isaacs" 3220 | } 3221 | }, 3222 | "node_modules/path-scurry/node_modules/lru-cache": { 3223 | "version": "10.2.0", 3224 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", 3225 | "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", 3226 | "dev": true, 3227 | "engines": { 3228 | "node": "14 || >=16.14" 3229 | } 3230 | }, 3231 | "node_modules/path-type": { 3232 | "version": "4.0.0", 3233 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3234 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3235 | "dev": true, 3236 | "engines": { 3237 | "node": ">=8" 3238 | } 3239 | }, 3240 | "node_modules/picocolors": { 3241 | "version": "1.0.0", 3242 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3243 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 3244 | "dev": true 3245 | }, 3246 | "node_modules/picomatch": { 3247 | "version": "2.3.1", 3248 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3249 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3250 | "dev": true, 3251 | "engines": { 3252 | "node": ">=8.6" 3253 | }, 3254 | "funding": { 3255 | "url": "https://github.com/sponsors/jonschlinkert" 3256 | } 3257 | }, 3258 | "node_modules/pify": { 3259 | "version": "2.3.0", 3260 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 3261 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 3262 | "dev": true, 3263 | "engines": { 3264 | "node": ">=0.10.0" 3265 | } 3266 | }, 3267 | "node_modules/pirates": { 3268 | "version": "4.0.6", 3269 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 3270 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 3271 | "dev": true, 3272 | "engines": { 3273 | "node": ">= 6" 3274 | } 3275 | }, 3276 | "node_modules/postcss": { 3277 | "version": "8.4.38", 3278 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", 3279 | "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", 3280 | "dev": true, 3281 | "funding": [ 3282 | { 3283 | "type": "opencollective", 3284 | "url": "https://opencollective.com/postcss/" 3285 | }, 3286 | { 3287 | "type": "tidelift", 3288 | "url": "https://tidelift.com/funding/github/npm/postcss" 3289 | }, 3290 | { 3291 | "type": "github", 3292 | "url": "https://github.com/sponsors/ai" 3293 | } 3294 | ], 3295 | "dependencies": { 3296 | "nanoid": "^3.3.7", 3297 | "picocolors": "^1.0.0", 3298 | "source-map-js": "^1.2.0" 3299 | }, 3300 | "engines": { 3301 | "node": "^10 || ^12 || >=14" 3302 | } 3303 | }, 3304 | "node_modules/postcss-import": { 3305 | "version": "15.1.0", 3306 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 3307 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 3308 | "dev": true, 3309 | "dependencies": { 3310 | "postcss-value-parser": "^4.0.0", 3311 | "read-cache": "^1.0.0", 3312 | "resolve": "^1.1.7" 3313 | }, 3314 | "engines": { 3315 | "node": ">=14.0.0" 3316 | }, 3317 | "peerDependencies": { 3318 | "postcss": "^8.0.0" 3319 | } 3320 | }, 3321 | "node_modules/postcss-js": { 3322 | "version": "4.0.1", 3323 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 3324 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 3325 | "dev": true, 3326 | "dependencies": { 3327 | "camelcase-css": "^2.0.1" 3328 | }, 3329 | "engines": { 3330 | "node": "^12 || ^14 || >= 16" 3331 | }, 3332 | "funding": { 3333 | "type": "opencollective", 3334 | "url": "https://opencollective.com/postcss/" 3335 | }, 3336 | "peerDependencies": { 3337 | "postcss": "^8.4.21" 3338 | } 3339 | }, 3340 | "node_modules/postcss-load-config": { 3341 | "version": "4.0.2", 3342 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 3343 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 3344 | "dev": true, 3345 | "funding": [ 3346 | { 3347 | "type": "opencollective", 3348 | "url": "https://opencollective.com/postcss/" 3349 | }, 3350 | { 3351 | "type": "github", 3352 | "url": "https://github.com/sponsors/ai" 3353 | } 3354 | ], 3355 | "dependencies": { 3356 | "lilconfig": "^3.0.0", 3357 | "yaml": "^2.3.4" 3358 | }, 3359 | "engines": { 3360 | "node": ">= 14" 3361 | }, 3362 | "peerDependencies": { 3363 | "postcss": ">=8.0.9", 3364 | "ts-node": ">=9.0.0" 3365 | }, 3366 | "peerDependenciesMeta": { 3367 | "postcss": { 3368 | "optional": true 3369 | }, 3370 | "ts-node": { 3371 | "optional": true 3372 | } 3373 | } 3374 | }, 3375 | "node_modules/postcss-load-config/node_modules/lilconfig": { 3376 | "version": "3.1.1", 3377 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", 3378 | "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", 3379 | "dev": true, 3380 | "engines": { 3381 | "node": ">=14" 3382 | }, 3383 | "funding": { 3384 | "url": "https://github.com/sponsors/antonk52" 3385 | } 3386 | }, 3387 | "node_modules/postcss-nested": { 3388 | "version": "6.0.1", 3389 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 3390 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 3391 | "dev": true, 3392 | "dependencies": { 3393 | "postcss-selector-parser": "^6.0.11" 3394 | }, 3395 | "engines": { 3396 | "node": ">=12.0" 3397 | }, 3398 | "funding": { 3399 | "type": "opencollective", 3400 | "url": "https://opencollective.com/postcss/" 3401 | }, 3402 | "peerDependencies": { 3403 | "postcss": "^8.2.14" 3404 | } 3405 | }, 3406 | "node_modules/postcss-selector-parser": { 3407 | "version": "6.0.16", 3408 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", 3409 | "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", 3410 | "dev": true, 3411 | "dependencies": { 3412 | "cssesc": "^3.0.0", 3413 | "util-deprecate": "^1.0.2" 3414 | }, 3415 | "engines": { 3416 | "node": ">=4" 3417 | } 3418 | }, 3419 | "node_modules/postcss-value-parser": { 3420 | "version": "4.2.0", 3421 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 3422 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 3423 | "dev": true 3424 | }, 3425 | "node_modules/prelude-ls": { 3426 | "version": "1.2.1", 3427 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3428 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3429 | "dev": true, 3430 | "engines": { 3431 | "node": ">= 0.8.0" 3432 | } 3433 | }, 3434 | "node_modules/punycode": { 3435 | "version": "2.3.1", 3436 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3437 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3438 | "dev": true, 3439 | "engines": { 3440 | "node": ">=6" 3441 | } 3442 | }, 3443 | "node_modules/queue-microtask": { 3444 | "version": "1.2.3", 3445 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3446 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3447 | "dev": true, 3448 | "funding": [ 3449 | { 3450 | "type": "github", 3451 | "url": "https://github.com/sponsors/feross" 3452 | }, 3453 | { 3454 | "type": "patreon", 3455 | "url": "https://www.patreon.com/feross" 3456 | }, 3457 | { 3458 | "type": "consulting", 3459 | "url": "https://feross.org/support" 3460 | } 3461 | ] 3462 | }, 3463 | "node_modules/react": { 3464 | "version": "18.2.0", 3465 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 3466 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 3467 | "dependencies": { 3468 | "loose-envify": "^1.1.0" 3469 | }, 3470 | "engines": { 3471 | "node": ">=0.10.0" 3472 | } 3473 | }, 3474 | "node_modules/react-dom": { 3475 | "version": "18.2.0", 3476 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 3477 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 3478 | "dependencies": { 3479 | "loose-envify": "^1.1.0", 3480 | "scheduler": "^0.23.0" 3481 | }, 3482 | "peerDependencies": { 3483 | "react": "^18.2.0" 3484 | } 3485 | }, 3486 | "node_modules/react-hot-toast": { 3487 | "version": "2.4.1", 3488 | "resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz", 3489 | "integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==", 3490 | "dependencies": { 3491 | "goober": "^2.1.10" 3492 | }, 3493 | "engines": { 3494 | "node": ">=10" 3495 | }, 3496 | "peerDependencies": { 3497 | "react": ">=16", 3498 | "react-dom": ">=16" 3499 | } 3500 | }, 3501 | "node_modules/react-icons": { 3502 | "version": "5.0.1", 3503 | "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.0.1.tgz", 3504 | "integrity": "sha512-WqLZJ4bLzlhmsvme6iFdgO8gfZP17rfjYEJ2m9RsZjZ+cc4k1hTzknEz63YS1MeT50kVzoa1Nz36f4BEx+Wigw==", 3505 | "peerDependencies": { 3506 | "react": "*" 3507 | } 3508 | }, 3509 | "node_modules/react-refresh": { 3510 | "version": "0.14.0", 3511 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", 3512 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", 3513 | "dev": true, 3514 | "engines": { 3515 | "node": ">=0.10.0" 3516 | } 3517 | }, 3518 | "node_modules/read-cache": { 3519 | "version": "1.0.0", 3520 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 3521 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 3522 | "dev": true, 3523 | "dependencies": { 3524 | "pify": "^2.3.0" 3525 | } 3526 | }, 3527 | "node_modules/readdirp": { 3528 | "version": "3.6.0", 3529 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 3530 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 3531 | "dev": true, 3532 | "dependencies": { 3533 | "picomatch": "^2.2.1" 3534 | }, 3535 | "engines": { 3536 | "node": ">=8.10.0" 3537 | } 3538 | }, 3539 | "node_modules/resolve": { 3540 | "version": "1.22.8", 3541 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 3542 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 3543 | "dev": true, 3544 | "dependencies": { 3545 | "is-core-module": "^2.13.0", 3546 | "path-parse": "^1.0.7", 3547 | "supports-preserve-symlinks-flag": "^1.0.0" 3548 | }, 3549 | "bin": { 3550 | "resolve": "bin/resolve" 3551 | }, 3552 | "funding": { 3553 | "url": "https://github.com/sponsors/ljharb" 3554 | } 3555 | }, 3556 | "node_modules/resolve-from": { 3557 | "version": "4.0.0", 3558 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3559 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3560 | "dev": true, 3561 | "engines": { 3562 | "node": ">=4" 3563 | } 3564 | }, 3565 | "node_modules/reusify": { 3566 | "version": "1.0.4", 3567 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3568 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3569 | "dev": true, 3570 | "engines": { 3571 | "iojs": ">=1.0.0", 3572 | "node": ">=0.10.0" 3573 | } 3574 | }, 3575 | "node_modules/rimraf": { 3576 | "version": "3.0.2", 3577 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3578 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3579 | "dev": true, 3580 | "dependencies": { 3581 | "glob": "^7.1.3" 3582 | }, 3583 | "bin": { 3584 | "rimraf": "bin.js" 3585 | }, 3586 | "funding": { 3587 | "url": "https://github.com/sponsors/isaacs" 3588 | } 3589 | }, 3590 | "node_modules/rollup": { 3591 | "version": "4.14.0", 3592 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.0.tgz", 3593 | "integrity": "sha512-Qe7w62TyawbDzB4yt32R0+AbIo6m1/sqO7UPzFS8Z/ksL5mrfhA0v4CavfdmFav3D+ub4QeAgsGEe84DoWe/nQ==", 3594 | "dev": true, 3595 | "dependencies": { 3596 | "@types/estree": "1.0.5" 3597 | }, 3598 | "bin": { 3599 | "rollup": "dist/bin/rollup" 3600 | }, 3601 | "engines": { 3602 | "node": ">=18.0.0", 3603 | "npm": ">=8.0.0" 3604 | }, 3605 | "optionalDependencies": { 3606 | "@rollup/rollup-android-arm-eabi": "4.14.0", 3607 | "@rollup/rollup-android-arm64": "4.14.0", 3608 | "@rollup/rollup-darwin-arm64": "4.14.0", 3609 | "@rollup/rollup-darwin-x64": "4.14.0", 3610 | "@rollup/rollup-linux-arm-gnueabihf": "4.14.0", 3611 | "@rollup/rollup-linux-arm64-gnu": "4.14.0", 3612 | "@rollup/rollup-linux-arm64-musl": "4.14.0", 3613 | "@rollup/rollup-linux-powerpc64le-gnu": "4.14.0", 3614 | "@rollup/rollup-linux-riscv64-gnu": "4.14.0", 3615 | "@rollup/rollup-linux-s390x-gnu": "4.14.0", 3616 | "@rollup/rollup-linux-x64-gnu": "4.14.0", 3617 | "@rollup/rollup-linux-x64-musl": "4.14.0", 3618 | "@rollup/rollup-win32-arm64-msvc": "4.14.0", 3619 | "@rollup/rollup-win32-ia32-msvc": "4.14.0", 3620 | "@rollup/rollup-win32-x64-msvc": "4.14.0", 3621 | "fsevents": "~2.3.2" 3622 | } 3623 | }, 3624 | "node_modules/run-parallel": { 3625 | "version": "1.2.0", 3626 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3627 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3628 | "dev": true, 3629 | "funding": [ 3630 | { 3631 | "type": "github", 3632 | "url": "https://github.com/sponsors/feross" 3633 | }, 3634 | { 3635 | "type": "patreon", 3636 | "url": "https://www.patreon.com/feross" 3637 | }, 3638 | { 3639 | "type": "consulting", 3640 | "url": "https://feross.org/support" 3641 | } 3642 | ], 3643 | "dependencies": { 3644 | "queue-microtask": "^1.2.2" 3645 | } 3646 | }, 3647 | "node_modules/scheduler": { 3648 | "version": "0.23.0", 3649 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 3650 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 3651 | "dependencies": { 3652 | "loose-envify": "^1.1.0" 3653 | } 3654 | }, 3655 | "node_modules/semver": { 3656 | "version": "7.6.0", 3657 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 3658 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 3659 | "dev": true, 3660 | "dependencies": { 3661 | "lru-cache": "^6.0.0" 3662 | }, 3663 | "bin": { 3664 | "semver": "bin/semver.js" 3665 | }, 3666 | "engines": { 3667 | "node": ">=10" 3668 | } 3669 | }, 3670 | "node_modules/semver/node_modules/lru-cache": { 3671 | "version": "6.0.0", 3672 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 3673 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 3674 | "dev": true, 3675 | "dependencies": { 3676 | "yallist": "^4.0.0" 3677 | }, 3678 | "engines": { 3679 | "node": ">=10" 3680 | } 3681 | }, 3682 | "node_modules/semver/node_modules/yallist": { 3683 | "version": "4.0.0", 3684 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 3685 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 3686 | "dev": true 3687 | }, 3688 | "node_modules/shebang-command": { 3689 | "version": "2.0.0", 3690 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3691 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3692 | "dev": true, 3693 | "dependencies": { 3694 | "shebang-regex": "^3.0.0" 3695 | }, 3696 | "engines": { 3697 | "node": ">=8" 3698 | } 3699 | }, 3700 | "node_modules/shebang-regex": { 3701 | "version": "3.0.0", 3702 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3703 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3704 | "dev": true, 3705 | "engines": { 3706 | "node": ">=8" 3707 | } 3708 | }, 3709 | "node_modules/signal-exit": { 3710 | "version": "4.1.0", 3711 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3712 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3713 | "dev": true, 3714 | "engines": { 3715 | "node": ">=14" 3716 | }, 3717 | "funding": { 3718 | "url": "https://github.com/sponsors/isaacs" 3719 | } 3720 | }, 3721 | "node_modules/slash": { 3722 | "version": "3.0.0", 3723 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3724 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3725 | "dev": true, 3726 | "engines": { 3727 | "node": ">=8" 3728 | } 3729 | }, 3730 | "node_modules/source-map-js": { 3731 | "version": "1.2.0", 3732 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 3733 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 3734 | "dev": true, 3735 | "engines": { 3736 | "node": ">=0.10.0" 3737 | } 3738 | }, 3739 | "node_modules/string-width": { 3740 | "version": "5.1.2", 3741 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 3742 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 3743 | "dev": true, 3744 | "dependencies": { 3745 | "eastasianwidth": "^0.2.0", 3746 | "emoji-regex": "^9.2.2", 3747 | "strip-ansi": "^7.0.1" 3748 | }, 3749 | "engines": { 3750 | "node": ">=12" 3751 | }, 3752 | "funding": { 3753 | "url": "https://github.com/sponsors/sindresorhus" 3754 | } 3755 | }, 3756 | "node_modules/string-width-cjs": { 3757 | "name": "string-width", 3758 | "version": "4.2.3", 3759 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3760 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3761 | "dev": true, 3762 | "dependencies": { 3763 | "emoji-regex": "^8.0.0", 3764 | "is-fullwidth-code-point": "^3.0.0", 3765 | "strip-ansi": "^6.0.1" 3766 | }, 3767 | "engines": { 3768 | "node": ">=8" 3769 | } 3770 | }, 3771 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 3772 | "version": "8.0.0", 3773 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3774 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 3775 | "dev": true 3776 | }, 3777 | "node_modules/string-width/node_modules/ansi-regex": { 3778 | "version": "6.0.1", 3779 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 3780 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 3781 | "dev": true, 3782 | "engines": { 3783 | "node": ">=12" 3784 | }, 3785 | "funding": { 3786 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 3787 | } 3788 | }, 3789 | "node_modules/string-width/node_modules/strip-ansi": { 3790 | "version": "7.1.0", 3791 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3792 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3793 | "dev": true, 3794 | "dependencies": { 3795 | "ansi-regex": "^6.0.1" 3796 | }, 3797 | "engines": { 3798 | "node": ">=12" 3799 | }, 3800 | "funding": { 3801 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 3802 | } 3803 | }, 3804 | "node_modules/strip-ansi": { 3805 | "version": "6.0.1", 3806 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3807 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3808 | "dev": true, 3809 | "dependencies": { 3810 | "ansi-regex": "^5.0.1" 3811 | }, 3812 | "engines": { 3813 | "node": ">=8" 3814 | } 3815 | }, 3816 | "node_modules/strip-ansi-cjs": { 3817 | "name": "strip-ansi", 3818 | "version": "6.0.1", 3819 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3820 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3821 | "dev": true, 3822 | "dependencies": { 3823 | "ansi-regex": "^5.0.1" 3824 | }, 3825 | "engines": { 3826 | "node": ">=8" 3827 | } 3828 | }, 3829 | "node_modules/strip-json-comments": { 3830 | "version": "3.1.1", 3831 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3832 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3833 | "dev": true, 3834 | "engines": { 3835 | "node": ">=8" 3836 | }, 3837 | "funding": { 3838 | "url": "https://github.com/sponsors/sindresorhus" 3839 | } 3840 | }, 3841 | "node_modules/sucrase": { 3842 | "version": "3.35.0", 3843 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 3844 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 3845 | "dev": true, 3846 | "dependencies": { 3847 | "@jridgewell/gen-mapping": "^0.3.2", 3848 | "commander": "^4.0.0", 3849 | "glob": "^10.3.10", 3850 | "lines-and-columns": "^1.1.6", 3851 | "mz": "^2.7.0", 3852 | "pirates": "^4.0.1", 3853 | "ts-interface-checker": "^0.1.9" 3854 | }, 3855 | "bin": { 3856 | "sucrase": "bin/sucrase", 3857 | "sucrase-node": "bin/sucrase-node" 3858 | }, 3859 | "engines": { 3860 | "node": ">=16 || 14 >=14.17" 3861 | } 3862 | }, 3863 | "node_modules/sucrase/node_modules/glob": { 3864 | "version": "10.3.12", 3865 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", 3866 | "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", 3867 | "dev": true, 3868 | "dependencies": { 3869 | "foreground-child": "^3.1.0", 3870 | "jackspeak": "^2.3.6", 3871 | "minimatch": "^9.0.1", 3872 | "minipass": "^7.0.4", 3873 | "path-scurry": "^1.10.2" 3874 | }, 3875 | "bin": { 3876 | "glob": "dist/esm/bin.mjs" 3877 | }, 3878 | "engines": { 3879 | "node": ">=16 || 14 >=14.17" 3880 | }, 3881 | "funding": { 3882 | "url": "https://github.com/sponsors/isaacs" 3883 | } 3884 | }, 3885 | "node_modules/supports-color": { 3886 | "version": "5.5.0", 3887 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 3888 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 3889 | "dev": true, 3890 | "dependencies": { 3891 | "has-flag": "^3.0.0" 3892 | }, 3893 | "engines": { 3894 | "node": ">=4" 3895 | } 3896 | }, 3897 | "node_modules/supports-preserve-symlinks-flag": { 3898 | "version": "1.0.0", 3899 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3900 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3901 | "dev": true, 3902 | "engines": { 3903 | "node": ">= 0.4" 3904 | }, 3905 | "funding": { 3906 | "url": "https://github.com/sponsors/ljharb" 3907 | } 3908 | }, 3909 | "node_modules/tailwindcss": { 3910 | "version": "3.4.3", 3911 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", 3912 | "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", 3913 | "dev": true, 3914 | "dependencies": { 3915 | "@alloc/quick-lru": "^5.2.0", 3916 | "arg": "^5.0.2", 3917 | "chokidar": "^3.5.3", 3918 | "didyoumean": "^1.2.2", 3919 | "dlv": "^1.1.3", 3920 | "fast-glob": "^3.3.0", 3921 | "glob-parent": "^6.0.2", 3922 | "is-glob": "^4.0.3", 3923 | "jiti": "^1.21.0", 3924 | "lilconfig": "^2.1.0", 3925 | "micromatch": "^4.0.5", 3926 | "normalize-path": "^3.0.0", 3927 | "object-hash": "^3.0.0", 3928 | "picocolors": "^1.0.0", 3929 | "postcss": "^8.4.23", 3930 | "postcss-import": "^15.1.0", 3931 | "postcss-js": "^4.0.1", 3932 | "postcss-load-config": "^4.0.1", 3933 | "postcss-nested": "^6.0.1", 3934 | "postcss-selector-parser": "^6.0.11", 3935 | "resolve": "^1.22.2", 3936 | "sucrase": "^3.32.0" 3937 | }, 3938 | "bin": { 3939 | "tailwind": "lib/cli.js", 3940 | "tailwindcss": "lib/cli.js" 3941 | }, 3942 | "engines": { 3943 | "node": ">=14.0.0" 3944 | } 3945 | }, 3946 | "node_modules/text-table": { 3947 | "version": "0.2.0", 3948 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3949 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3950 | "dev": true 3951 | }, 3952 | "node_modules/thenify": { 3953 | "version": "3.3.1", 3954 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 3955 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 3956 | "dev": true, 3957 | "dependencies": { 3958 | "any-promise": "^1.0.0" 3959 | } 3960 | }, 3961 | "node_modules/thenify-all": { 3962 | "version": "1.6.0", 3963 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 3964 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 3965 | "dev": true, 3966 | "dependencies": { 3967 | "thenify": ">= 3.1.0 < 4" 3968 | }, 3969 | "engines": { 3970 | "node": ">=0.8" 3971 | } 3972 | }, 3973 | "node_modules/to-fast-properties": { 3974 | "version": "2.0.0", 3975 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3976 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3977 | "dev": true, 3978 | "engines": { 3979 | "node": ">=4" 3980 | } 3981 | }, 3982 | "node_modules/to-regex-range": { 3983 | "version": "5.0.1", 3984 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3985 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3986 | "dev": true, 3987 | "dependencies": { 3988 | "is-number": "^7.0.0" 3989 | }, 3990 | "engines": { 3991 | "node": ">=8.0" 3992 | } 3993 | }, 3994 | "node_modules/ts-api-utils": { 3995 | "version": "1.3.0", 3996 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", 3997 | "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", 3998 | "dev": true, 3999 | "engines": { 4000 | "node": ">=16" 4001 | }, 4002 | "peerDependencies": { 4003 | "typescript": ">=4.2.0" 4004 | } 4005 | }, 4006 | "node_modules/ts-interface-checker": { 4007 | "version": "0.1.13", 4008 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 4009 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 4010 | "dev": true 4011 | }, 4012 | "node_modules/tslib": { 4013 | "version": "2.6.2", 4014 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 4015 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 4016 | "dev": true 4017 | }, 4018 | "node_modules/type-check": { 4019 | "version": "0.4.0", 4020 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 4021 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 4022 | "dev": true, 4023 | "dependencies": { 4024 | "prelude-ls": "^1.2.1" 4025 | }, 4026 | "engines": { 4027 | "node": ">= 0.8.0" 4028 | } 4029 | }, 4030 | "node_modules/type-fest": { 4031 | "version": "0.20.2", 4032 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 4033 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 4034 | "dev": true, 4035 | "engines": { 4036 | "node": ">=10" 4037 | }, 4038 | "funding": { 4039 | "url": "https://github.com/sponsors/sindresorhus" 4040 | } 4041 | }, 4042 | "node_modules/typescript": { 4043 | "version": "5.4.4", 4044 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", 4045 | "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", 4046 | "dev": true, 4047 | "bin": { 4048 | "tsc": "bin/tsc", 4049 | "tsserver": "bin/tsserver" 4050 | }, 4051 | "engines": { 4052 | "node": ">=14.17" 4053 | } 4054 | }, 4055 | "node_modules/update-browserslist-db": { 4056 | "version": "1.0.13", 4057 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", 4058 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", 4059 | "dev": true, 4060 | "funding": [ 4061 | { 4062 | "type": "opencollective", 4063 | "url": "https://opencollective.com/browserslist" 4064 | }, 4065 | { 4066 | "type": "tidelift", 4067 | "url": "https://tidelift.com/funding/github/npm/browserslist" 4068 | }, 4069 | { 4070 | "type": "github", 4071 | "url": "https://github.com/sponsors/ai" 4072 | } 4073 | ], 4074 | "dependencies": { 4075 | "escalade": "^3.1.1", 4076 | "picocolors": "^1.0.0" 4077 | }, 4078 | "bin": { 4079 | "update-browserslist-db": "cli.js" 4080 | }, 4081 | "peerDependencies": { 4082 | "browserslist": ">= 4.21.0" 4083 | } 4084 | }, 4085 | "node_modules/uri-js": { 4086 | "version": "4.4.1", 4087 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 4088 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 4089 | "dev": true, 4090 | "dependencies": { 4091 | "punycode": "^2.1.0" 4092 | } 4093 | }, 4094 | "node_modules/use-sound": { 4095 | "version": "4.0.1", 4096 | "resolved": "https://registry.npmjs.org/use-sound/-/use-sound-4.0.1.tgz", 4097 | "integrity": "sha512-hykJ86kNcu6y/FzlSHcQxhjSGMslZx2WlfLpZNoPbvueakv4OF3xPxEtGV2YmculrIaH0tPp9LtG4jgy17xMWg==", 4098 | "dependencies": { 4099 | "howler": "^2.1.3" 4100 | }, 4101 | "peerDependencies": { 4102 | "react": ">=16.8" 4103 | } 4104 | }, 4105 | "node_modules/util-deprecate": { 4106 | "version": "1.0.2", 4107 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 4108 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 4109 | "dev": true 4110 | }, 4111 | "node_modules/vite": { 4112 | "version": "5.2.8", 4113 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz", 4114 | "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==", 4115 | "dev": true, 4116 | "dependencies": { 4117 | "esbuild": "^0.20.1", 4118 | "postcss": "^8.4.38", 4119 | "rollup": "^4.13.0" 4120 | }, 4121 | "bin": { 4122 | "vite": "bin/vite.js" 4123 | }, 4124 | "engines": { 4125 | "node": "^18.0.0 || >=20.0.0" 4126 | }, 4127 | "funding": { 4128 | "url": "https://github.com/vitejs/vite?sponsor=1" 4129 | }, 4130 | "optionalDependencies": { 4131 | "fsevents": "~2.3.3" 4132 | }, 4133 | "peerDependencies": { 4134 | "@types/node": "^18.0.0 || >=20.0.0", 4135 | "less": "*", 4136 | "lightningcss": "^1.21.0", 4137 | "sass": "*", 4138 | "stylus": "*", 4139 | "sugarss": "*", 4140 | "terser": "^5.4.0" 4141 | }, 4142 | "peerDependenciesMeta": { 4143 | "@types/node": { 4144 | "optional": true 4145 | }, 4146 | "less": { 4147 | "optional": true 4148 | }, 4149 | "lightningcss": { 4150 | "optional": true 4151 | }, 4152 | "sass": { 4153 | "optional": true 4154 | }, 4155 | "stylus": { 4156 | "optional": true 4157 | }, 4158 | "sugarss": { 4159 | "optional": true 4160 | }, 4161 | "terser": { 4162 | "optional": true 4163 | } 4164 | } 4165 | }, 4166 | "node_modules/which": { 4167 | "version": "2.0.2", 4168 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 4169 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 4170 | "dev": true, 4171 | "dependencies": { 4172 | "isexe": "^2.0.0" 4173 | }, 4174 | "bin": { 4175 | "node-which": "bin/node-which" 4176 | }, 4177 | "engines": { 4178 | "node": ">= 8" 4179 | } 4180 | }, 4181 | "node_modules/wrap-ansi": { 4182 | "version": "8.1.0", 4183 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 4184 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 4185 | "dev": true, 4186 | "dependencies": { 4187 | "ansi-styles": "^6.1.0", 4188 | "string-width": "^5.0.1", 4189 | "strip-ansi": "^7.0.1" 4190 | }, 4191 | "engines": { 4192 | "node": ">=12" 4193 | }, 4194 | "funding": { 4195 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 4196 | } 4197 | }, 4198 | "node_modules/wrap-ansi-cjs": { 4199 | "name": "wrap-ansi", 4200 | "version": "7.0.0", 4201 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 4202 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 4203 | "dev": true, 4204 | "dependencies": { 4205 | "ansi-styles": "^4.0.0", 4206 | "string-width": "^4.1.0", 4207 | "strip-ansi": "^6.0.0" 4208 | }, 4209 | "engines": { 4210 | "node": ">=10" 4211 | }, 4212 | "funding": { 4213 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 4214 | } 4215 | }, 4216 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 4217 | "version": "4.3.0", 4218 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 4219 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 4220 | "dev": true, 4221 | "dependencies": { 4222 | "color-convert": "^2.0.1" 4223 | }, 4224 | "engines": { 4225 | "node": ">=8" 4226 | }, 4227 | "funding": { 4228 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 4229 | } 4230 | }, 4231 | "node_modules/wrap-ansi-cjs/node_modules/color-convert": { 4232 | "version": "2.0.1", 4233 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 4234 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 4235 | "dev": true, 4236 | "dependencies": { 4237 | "color-name": "~1.1.4" 4238 | }, 4239 | "engines": { 4240 | "node": ">=7.0.0" 4241 | } 4242 | }, 4243 | "node_modules/wrap-ansi-cjs/node_modules/color-name": { 4244 | "version": "1.1.4", 4245 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 4246 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 4247 | "dev": true 4248 | }, 4249 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 4250 | "version": "8.0.0", 4251 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 4252 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 4253 | "dev": true 4254 | }, 4255 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 4256 | "version": "4.2.3", 4257 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4258 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4259 | "dev": true, 4260 | "dependencies": { 4261 | "emoji-regex": "^8.0.0", 4262 | "is-fullwidth-code-point": "^3.0.0", 4263 | "strip-ansi": "^6.0.1" 4264 | }, 4265 | "engines": { 4266 | "node": ">=8" 4267 | } 4268 | }, 4269 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 4270 | "version": "6.0.1", 4271 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 4272 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 4273 | "dev": true, 4274 | "engines": { 4275 | "node": ">=12" 4276 | }, 4277 | "funding": { 4278 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 4279 | } 4280 | }, 4281 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 4282 | "version": "6.2.1", 4283 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 4284 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 4285 | "dev": true, 4286 | "engines": { 4287 | "node": ">=12" 4288 | }, 4289 | "funding": { 4290 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 4291 | } 4292 | }, 4293 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 4294 | "version": "7.1.0", 4295 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 4296 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 4297 | "dev": true, 4298 | "dependencies": { 4299 | "ansi-regex": "^6.0.1" 4300 | }, 4301 | "engines": { 4302 | "node": ">=12" 4303 | }, 4304 | "funding": { 4305 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 4306 | } 4307 | }, 4308 | "node_modules/wrappy": { 4309 | "version": "1.0.2", 4310 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4311 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 4312 | "dev": true 4313 | }, 4314 | "node_modules/yallist": { 4315 | "version": "3.1.1", 4316 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 4317 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 4318 | "dev": true 4319 | }, 4320 | "node_modules/yaml": { 4321 | "version": "2.4.1", 4322 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", 4323 | "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", 4324 | "dev": true, 4325 | "bin": { 4326 | "yaml": "bin.mjs" 4327 | }, 4328 | "engines": { 4329 | "node": ">= 14" 4330 | } 4331 | }, 4332 | "node_modules/yocto-queue": { 4333 | "version": "0.1.0", 4334 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4335 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4336 | "dev": true, 4337 | "engines": { 4338 | "node": ">=10" 4339 | }, 4340 | "funding": { 4341 | "url": "https://github.com/sponsors/sindresorhus" 4342 | } 4343 | } 4344 | } 4345 | } 4346 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-typing", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0", 15 | "react-hot-toast": "^2.4.1", 16 | "react-icons": "^5.0.1", 17 | "use-sound": "^4.0.1" 18 | }, 19 | "devDependencies": { 20 | "@faker-js/faker": "^8.4.1", 21 | "@types/react": "^18.2.66", 22 | "@types/react-dom": "^18.2.22", 23 | "@typescript-eslint/eslint-plugin": "^7.2.0", 24 | "@typescript-eslint/parser": "^7.2.0", 25 | "@vitejs/plugin-react": "^4.2.1", 26 | "autoprefixer": "^10.4.19", 27 | "eslint": "^8.57.0", 28 | "eslint-plugin-react-hooks": "^4.6.0", 29 | "eslint-plugin-react-refresh": "^0.4.6", 30 | "framer-motion": "^11.0.25", 31 | "postcss": "^8.4.38", 32 | "tailwindcss": "^3.4.3", 33 | "typescript": "^5.2.2", 34 | "vite": "^5.2.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/bubble.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codefreyy/typing-speed-game/f5508910e006db05a7ac3e759d95c2d8a7a7240b/public/bubble.wav -------------------------------------------------------------------------------- /public/keyboard_stroke.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codefreyy/typing-speed-game/f5508910e006db05a7ac3e759d95c2d8a7a7240b/public/keyboard_stroke.wav -------------------------------------------------------------------------------- /public/light-off.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codefreyy/typing-speed-game/f5508910e006db05a7ac3e759d95c2d8a7a7240b/public/light-off.mp3 -------------------------------------------------------------------------------- /public/light-on.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codefreyy/typing-speed-game/f5508910e006db05a7ac3e759d95c2d8a7a7240b/public/light-on.mp3 -------------------------------------------------------------------------------- /public/typing-error.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codefreyy/typing-speed-game/f5508910e006db05a7ac3e759d95c2d8a7a7240b/public/typing-error.wav -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import UserTypings from "./components/UserTypings" 2 | import Results from "./components/Results" 3 | import RestartButton from "./components/RestartButton" 4 | import GenerateWords from "./components/GenerateWords" 5 | import useEngine, { State } from "./hooks/useEngine" 6 | import { calculatedAccuracy } from "./utils/helpers" 7 | import DarkModeToggle from "./components/DarkModeToggle" 8 | import ChooseTime from "./components/ChooseTime" 9 | import { Toaster } from "react-hot-toast" 10 | import { useState } from "react" 11 | 12 | const App = () => { 13 | const { 14 | state, 15 | words, 16 | timeLeft, 17 | typed, 18 | totalTyped, 19 | errors, 20 | restart, 21 | setCountdownSeconds, 22 | } = useEngine() 23 | 24 | const [selectedTime, setSelectedTime] = useState(0) 25 | 26 | return ( 27 | <> 28 | 29 | 30 | { 35 | setCountdownSeconds(time) 36 | }} 37 | /> 38 | 39 | 40 | 41 | 46 | 47 | restart()} 50 | /> 51 | 59 | 60 | ) 61 | } 62 | 63 | const WordsContainer = ({ children }: { children: React.ReactNode }) => { 64 | return ( 65 |
66 | {children} 67 |
68 | ) 69 | } 70 | 71 | const CountdownTimer = ({ 72 | timeLeft, 73 | state, 74 | setCountdownTime, 75 | setSelectedTime, 76 | }: { 77 | timeLeft: number 78 | state: State 79 | setCountdownTime: (time: number) => void 80 | setSelectedTime: (time: number) => void 81 | }) => { 82 | const handleTimeChose = (time: number) => { 83 | setCountdownTime(time) 84 | setSelectedTime(time) 85 | } 86 | if (state == "start") { 87 | return 88 | } else { 89 | return ( 90 |

91 | Time: {timeLeft} 92 |

93 | ) 94 | } 95 | } 96 | 97 | export default App 98 | -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Caret.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from "framer-motion" 2 | 3 | const Caret = () => { 4 | return ( 5 | 13 | ) 14 | } 15 | 16 | export default Caret 17 | -------------------------------------------------------------------------------- /src/components/ChooseTime.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react" 2 | import { IoIosHelpCircleOutline } from "react-icons/io" 3 | import { useSound } from "use-sound" 4 | 5 | export default function ChooseTime({ 6 | onTimeChose, 7 | }: { 8 | onTimeChose: (time: number) => void 9 | }) { 10 | const [selectedTime, setSelectedTime] = useState(null) 11 | const [playHint] = useSound("/bubble.wav", { volume: 0.5 }) 12 | const handleTimeSelect = (time: number) => { 13 | setSelectedTime(time) 14 | onTimeChose(time) 15 | } 16 | 17 | return ( 18 |
19 |
23 | 24 |
Choose time:
25 | 26 | Choose the countdown time and type to start testing your typing speed! 27 | 28 |
29 |
30 | 38 | 46 | 54 |
55 |
56 | ) 57 | } 58 | -------------------------------------------------------------------------------- /src/components/DarkModeToggle.tsx: -------------------------------------------------------------------------------- 1 | import { useRef } from "react" 2 | import { MdDarkMode } from "react-icons/md" 3 | import { MdOutlineLightMode } from "react-icons/md" 4 | import useDarkMode from "../hooks/useDarkMode" 5 | import useSound from "use-sound" 6 | 7 | function DarkModeToggle() { 8 | const togglerRef = useRef(null) 9 | const { isDark, setIsDark } = useDarkMode() 10 | const [playLight] = useSound("/light-on.mp3", { volume: 0.5 }) 11 | const [playDark] = useSound("/light-off.mp3", { volume: 0.5 }) 12 | 13 | const handleToggleDarkMode = () => { 14 | togglerRef.current?.blur() 15 | if (isDark) { 16 | playLight() 17 | } else { 18 | playDark() 19 | } 20 | setIsDark(!isDark) 21 | } 22 | return ( 23 | 36 | ) 37 | } 38 | 39 | export default DarkModeToggle 40 | -------------------------------------------------------------------------------- /src/components/GenerateWords.tsx: -------------------------------------------------------------------------------- 1 | function GenerateWords({ words }: { words: string }) { 2 | return
{words}
3 | } 4 | 5 | export default GenerateWords 6 | -------------------------------------------------------------------------------- /src/components/RestartButton.tsx: -------------------------------------------------------------------------------- 1 | import { useRef } from "react" 2 | import { MdRefresh } from "react-icons/md" 3 | 4 | function RestartButton({ 5 | className = "", 6 | onRestart: handleRestart, 7 | }: { 8 | className?: string 9 | onRestart: () => void 10 | }) { 11 | const buttonRef = useRef(null) 12 | 13 | const handleClick = () => { 14 | // remove the focus after click this button so that when you type it will not hit the button again 15 | buttonRef.current?.blur() 16 | handleRestart() 17 | } 18 | return ( 19 | 26 | ) 27 | } 28 | 29 | export default RestartButton 30 | -------------------------------------------------------------------------------- /src/components/Results.tsx: -------------------------------------------------------------------------------- 1 | import { motion } from "framer-motion" 2 | import { calculateWPM, formatPercentage } from "../utils/helpers" 3 | import { IoIosHelpCircleOutline } from "react-icons/io" 4 | import { useSound } from "use-sound" 5 | 6 | const Results = ({ 7 | errors, 8 | accuracyPercentage, 9 | total, 10 | className = "", 11 | state, 12 | totalTime, 13 | }: { 14 | errors: number 15 | accuracyPercentage: number 16 | total: number 17 | className?: string 18 | state: string 19 | totalTime: number 20 | }) => { 21 | const [playHint] = useSound("/bubble.wav", { volume: 0.5 }) 22 | 23 | if (state !== "finish") return null 24 | 25 | const initial = { opacity: 0 } 26 | const animate = { opacity: 1 } 27 | 28 | return ( 29 | 34 | 40 | Results 41 | 42 | 49 | Speed: {calculateWPM(total - errors, totalTime)} 50 | 51 | 52 | WPM = (Correct characters / 5) / Time (minutes) 53 | 54 | 55 | 60 | Accuracy: {formatPercentage(accuracyPercentage)} 61 | 62 | 68 | Errors: {errors} 69 | 70 | 75 | Typed: {total} 76 | 77 | 78 | ) 79 | } 80 | 81 | export default Results 82 | -------------------------------------------------------------------------------- /src/components/UserTypings.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react" 2 | import Caret from "./Caret" 3 | import useSound from "use-sound" 4 | 5 | const UserTypings = ({ 6 | userInput, 7 | className, 8 | words, 9 | }: { 10 | userInput: string 11 | className?: string 12 | words: string 13 | }) => { 14 | const typedCharacters = userInput.split("") 15 | return ( 16 |
17 | {typedCharacters.map((char, index) => { 18 | return ( 19 | 24 | ) 25 | })} 26 | 27 |
28 | ) 29 | } 30 | 31 | const Character = ({ 32 | actual, 33 | expected, 34 | }: { 35 | actual: string 36 | expected: string 37 | }) => { 38 | const isCorrect = actual === expected 39 | const isWhiteSpace = expected === " " 40 | const [playStroke] = useSound("/keyboard_stroke.wav", { volume: 0.5 }) 41 | const [playError] = useSound("/typing-error.wav", { volume: 0.5 }) 42 | useEffect(() => { 43 | if (isCorrect) { 44 | playStroke() 45 | } else { 46 | playError() 47 | } 48 | }, [playStroke, playError, isCorrect]) 49 | return ( 50 | 60 | {expected} 61 | 62 | ) 63 | } 64 | 65 | function cn(classes: { [key: string]: boolean }) { 66 | return Object.entries(classes) 67 | .filter(([, value]) => value) 68 | .map(([key]) => key) 69 | .join(" ") 70 | } 71 | 72 | export default UserTypings 73 | -------------------------------------------------------------------------------- /src/hooks/useCountdownTimer.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useRef, useState } from "react" 2 | 3 | const useCountdownTimer = (seconds: number) => { 4 | const [timeLeft, setTimeLeft] = useState(seconds) 5 | 6 | 7 | useEffect(() => { 8 | setTimeLeft(seconds); 9 | }, [seconds]); 10 | 11 | const intervalRef = useRef(null) 12 | 13 | const startCountdown = useCallback(() => { 14 | intervalRef.current = setInterval(() => { 15 | setTimeLeft(timeLeft => { 16 | return timeLeft - 1 17 | }) 18 | 19 | }, 1000) 20 | 21 | }, [setTimeLeft]) 22 | 23 | const resetCountdown = useCallback(() => { 24 | if (intervalRef.current) { 25 | clearInterval(intervalRef.current) 26 | } 27 | 28 | setTimeLeft(seconds) 29 | }, [seconds]) 30 | 31 | 32 | // when the countdown reaches 0, clear the countdown interval 33 | useEffect(() => { 34 | if (!timeLeft && intervalRef.current) { 35 | clearInterval(intervalRef.current) 36 | } 37 | }, [timeLeft, intervalRef]) 38 | 39 | return { timeLeft, startCountdown, resetCountdown } 40 | } 41 | 42 | export default useCountdownTimer -------------------------------------------------------------------------------- /src/hooks/useDarkMode.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | const matchDark = '(prefers-color-scheme: dark)'; 4 | 5 | export default function useDarkMode() { 6 | const [isDark, setIsDark] = useState(() => window.matchMedia && window.matchMedia(matchDark).matches); 7 | useEffect(() => { 8 | const mediaQuery = window.matchMedia(matchDark); 9 | 10 | const handleChange = () => { 11 | setIsDark(mediaQuery.matches) 12 | }; 13 | 14 | mediaQuery.addEventListener('change', handleChange); 15 | return () => mediaQuery.removeEventListener('change', handleChange); 16 | }, []) 17 | 18 | 19 | useEffect(() => { 20 | if (isDark) { 21 | document.documentElement.classList.add("dark"); 22 | } else { 23 | document.documentElement.classList.remove("dark"); 24 | } 25 | }, [isDark]); 26 | 27 | return { isDark, setIsDark } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /src/hooks/useEngine.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useState } from "react" 2 | import useWords from "./useWords" 3 | import useCountdownTimer from "./useCountdownTimer" 4 | import useTypings from "./useTypings" 5 | import { countErrors } from "../utils/helpers" 6 | 7 | const NUMBER_OF_WORDS = 12 8 | 9 | export type State = 'start' | 'run' | 'finish' 10 | 11 | const useEngine = () => { 12 | const [state, setState] = useState("start") 13 | const [countdownSeconds, setCountdownSeconds] = useState(0) 14 | const { words, updateWords } = useWords(NUMBER_OF_WORDS) 15 | const { timeLeft, startCountdown, resetCountdown } = useCountdownTimer(countdownSeconds) 16 | const { typed, cursor, clearTyped, resetTotalTyped, totalTyped } = useTypings(state == 'finish', countdownSeconds) 17 | 18 | 19 | const [errors, setErrors] = useState(0) 20 | 21 | const isStarting = state === 'start' && cursor > 0 22 | const areWordsFinished = cursor == words.length; 23 | 24 | const restart = useCallback(() => { 25 | resetCountdown() 26 | resetTotalTyped() 27 | setState('start') 28 | updateWords() 29 | clearTyped() 30 | setErrors(0) 31 | }, [clearTyped, resetCountdown, resetTotalTyped, updateWords]) 32 | const sumErrors = useCallback(() => { 33 | const wordsReached = words.substring(0, Math.min(cursor, words.length)) 34 | 35 | setErrors(prevErrors => prevErrors + countErrors(typed, wordsReached)) 36 | }, [typed, words, cursor]) 37 | 38 | // as soon as the user types the first character, start the countdown 39 | useEffect(() => { 40 | if (isStarting && countdownSeconds > 0) { 41 | setState('run') 42 | startCountdown() 43 | } 44 | }, [isStarting, startCountdown, countdownSeconds]) 45 | 46 | 47 | // when the countdown reaches 0, stop the game 48 | useEffect(() => { 49 | if (timeLeft === 0 && state == 'run') { 50 | setState('finish') 51 | sumErrors() 52 | setCountdownSeconds(0) 53 | } 54 | }, [timeLeft, state, sumErrors]) 55 | 56 | // when the current words are filled up, generate new words 57 | useEffect(() => { 58 | if (areWordsFinished) { 59 | updateWords() 60 | clearTyped() 61 | sumErrors() 62 | } 63 | }, [clearTyped, updateWords, sumErrors, areWordsFinished]) 64 | 65 | 66 | return { state, words, timeLeft, typed, cursor, clearTyped, resetTotalTyped, totalTyped, errors, restart, setCountdownSeconds } 67 | } 68 | 69 | export default useEngine -------------------------------------------------------------------------------- /src/hooks/useTypings.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useRef, useState } from "react" 2 | import toast from 'react-hot-toast'; 3 | 4 | const isKeyboardCodeAllowed = (code: string) => { 5 | return ( 6 | code.startsWith('Key') || code.startsWith('Digit') || code === 'Backspace' || code === "Space" || code === 'Minus' 7 | ) 8 | } 9 | 10 | const useTypings = (isFinish: boolean, countdownSeconds: number) => { 11 | const [cursor, setCursor] = useState(0) 12 | const [typed, setTyped] = useState("") 13 | const totalTyped = useRef(0) 14 | 15 | const keydownHandler = useCallback(({ key, code }: KeyboardEvent) => { 16 | if (isFinish) { 17 | toast('Click restart to play again!', { 18 | ariaProps: { 19 | role: 'status', 20 | 'aria-live': 'polite', 21 | }, 22 | duration: 1000 23 | }) 24 | return 25 | } 26 | if (countdownSeconds <= 0) { 27 | toast('Please choose a time first :)', { 28 | ariaProps: { 29 | role: 'status', 30 | 'aria-live': 'polite', 31 | }, 32 | duration: 1000 33 | }) 34 | return 35 | } 36 | 37 | if (!isKeyboardCodeAllowed(code)) { 38 | return 39 | } 40 | 41 | switch (key) { 42 | case 'Backspace': 43 | setTyped(prev => prev.slice(0, -1)) // [firstElement, lastElement) 44 | setCursor(cursor - 1) 45 | totalTyped.current -= 1 46 | break; 47 | default: 48 | setTyped(prev => prev.concat(key)) 49 | setCursor(cursor + 1) 50 | totalTyped.current += 1 51 | } 52 | }, [cursor, isFinish, countdownSeconds]) 53 | 54 | 55 | const clearTyped = useCallback(() => { 56 | setTyped("") 57 | setCursor(0) 58 | }, []) 59 | 60 | const resetTotalTyped = useCallback(() => { 61 | totalTyped.current = 0 62 | }, []) 63 | 64 | useEffect(() => { 65 | window.addEventListener('keydown', keydownHandler) 66 | 67 | return () => { 68 | window.removeEventListener('keydown', keydownHandler) 69 | } 70 | 71 | }, [keydownHandler]) 72 | 73 | return { 74 | typed, 75 | cursor, 76 | clearTyped, 77 | resetTotalTyped, 78 | totalTyped: totalTyped.current 79 | } 80 | } 81 | 82 | export default useTypings -------------------------------------------------------------------------------- /src/hooks/useWords.ts: -------------------------------------------------------------------------------- 1 | import { faker } from "@faker-js/faker" 2 | import { useState, useCallback } from "react" 3 | 4 | const generateWords = (count: number) => { 5 | return faker.word.words(count).toLocaleLowerCase() 6 | } 7 | 8 | const useWords = (count: number) => { 9 | const [words, setWords] = useState(generateWords(count)) 10 | 11 | const updateWords = useCallback(() => { 12 | setWords(generateWords(count)) 13 | }, [count]) 14 | 15 | return { words, updateWords } 16 | } 17 | 18 | export default useWords -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | body { 7 | @apply min-h-screen dark:bg-slate-800 bg-slate-50 grid place-items-center font-mono tracking-wider px-4; 8 | } 9 | } 10 | 11 | .tooltip { 12 | @apply invisible absolute; 13 | } 14 | 15 | .has-tooltip:hover .tooltip { 16 | @apply visible z-50; 17 | } 18 | -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import ReactDOM from "react-dom/client" 3 | import App from "./App.tsx" 4 | import "./index.css" 5 | 6 | ReactDOM.createRoot(document.getElementById("root")!).render( 7 | 8 | 9 | 10 | ) 11 | -------------------------------------------------------------------------------- /src/utils/helpers.ts: -------------------------------------------------------------------------------- 1 | export function formatPercentage(percentage: number) { 2 | return percentage.toFixed(0) + '%' 3 | } 4 | 5 | export const countErrors = (actual: string, expected: string) => { 6 | const expectedChars = expected.split("") 7 | 8 | return expectedChars.reduce((errors, expectedChar, i) => { 9 | const actualChar = actual[i] 10 | return errors + (actualChar === expectedChar ? 0 : 1) 11 | }, 0) 12 | } 13 | 14 | export const calculatedAccuracy = (total: number, errors: number) => { 15 | if (total > 0) { 16 | const corrects = total - errors 17 | return (corrects / total) * 100 18 | } 19 | return 0 20 | } 21 | 22 | export const calculateWPM = (correctTyped: number, timeSeconds: number) => { 23 | const words = correctTyped / 5; 24 | const minutes = timeSeconds / 60; 25 | return words / minutes + ' WPM'; 26 | }; -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | 3 | import colors from "tailwindcss/colors" 4 | 5 | export default { 6 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], 7 | theme: { 8 | extend: { 9 | colors: { 10 | primary: colors.yellow, 11 | error: colors.red, 12 | }, 13 | }, 14 | }, 15 | darkMode: "class", 16 | plugins: [], 17 | } 18 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | "noImplicitAny": false, 9 | 10 | /* Bundler mode */ 11 | "moduleResolution": "bundler", 12 | "allowImportingTsExtensions": true, 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "noEmit": true, 16 | "jsx": "react-jsx", 17 | 18 | /* Linting */ 19 | "strict": true, 20 | "noUnusedLocals": true, 21 | "noUnusedParameters": true, 22 | "noFallthroughCasesInSwitch": true 23 | }, 24 | "include": ["src"], 25 | "references": [{ "path": "./tsconfig.node.json" }] 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | --------------------------------------------------------------------------------