├── .gitattributes ├── .gitignore ├── README.md ├── index.html ├── input.css ├── main.js ├── package-lock.json ├── package.json ├── public ├── chat-bot.jpg ├── user.jpg └── vite.svg ├── style.css └── tailwind.config.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Serverless directories 108 | .serverless/ 109 | 110 | # FuseBox cache 111 | .fusebox/ 112 | 113 | # DynamoDB Local files 114 | .dynamodb/ 115 | 116 | # TernJS port file 117 | .tern-port 118 | 119 | # Stores VSCode versions used for testing VSCode extensions 120 | .vscode-test 121 | 122 | # yarn v2 123 | .yarn/cache 124 | .yarn/unplugged 125 | .yarn/build-state.yml 126 | .yarn/install-state.gz 127 | .pnp.* 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A Javascript Chatbot uilt with Gemini 2 | 3 | A functional chatbot built with the Gemini AI 4 | 5 | Link to the YouTube video: [Build and deploy your own ChatBot with Gemini (Complete Tutorial)🚀](https://youtu.be/1AJbhLBBPHU) 6 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Gemini Chatbot 8 | 9 | 10 | 11 |
14 | 15 |
16 | chatbot image 21 |

Gemini Chatbot

22 |
23 | 24 |
25 | 26 |
27 |
28 | 29 |
30 | 38 | 41 |
42 |
43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /input.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import { GoogleGenerativeAI } from "@google/generative-ai"; 2 | import md from "markdown-it"; 3 | 4 | // Initialize the model 5 | const genAI = new GoogleGenerativeAI(`${import.meta.env.VITE_API_KEY}`); 6 | 7 | const model = genAI.getGenerativeModel({ model: "gemini-pro" }); 8 | 9 | let history = []; 10 | 11 | async function getResponse(prompt) { 12 | const chat = await model.startChat({ history: history }); 13 | const result = await chat.sendMessage(prompt); 14 | const response = await result.response; 15 | const text = response.text(); 16 | 17 | console.log(text); 18 | return text; 19 | } 20 | 21 | // user chat div 22 | export const userDiv = (data) => { 23 | return ` 24 | 25 |
26 | user icon 31 |

32 | ${data} 33 |

34 |
35 | `; 36 | }; 37 | 38 | // AI Chat div 39 | export const aiDiv = (data) => { 40 | return ` 41 | 42 |
43 |
44 |               ${data}
45 |             
46 | user icon 51 |
52 | `; 53 | }; 54 | 55 | async function handleSubmit(event) { 56 | event.preventDefault(); 57 | 58 | let userMessage = document.getElementById("prompt"); 59 | const chatArea = document.getElementById("chat-container"); 60 | 61 | var prompt = userMessage.value.trim(); 62 | if (prompt === "") { 63 | return; 64 | } 65 | 66 | console.log("user message", prompt); 67 | 68 | chatArea.innerHTML += userDiv(prompt); 69 | userMessage.value = ""; 70 | const aiResponse = await getResponse(prompt); 71 | let md_text = md().render(aiResponse); 72 | chatArea.innerHTML += aiDiv(md_text); 73 | 74 | let newUserRole = { 75 | role: "user", 76 | parts: prompt, 77 | }; 78 | let newAIRole = { 79 | role: "model", 80 | parts: aiResponse, 81 | }; 82 | 83 | history.push(newUserRole); 84 | history.push(newAIRole); 85 | 86 | console.log(history); 87 | } 88 | 89 | const chatForm = document.getElementById("chat-form"); 90 | chatForm.addEventListener("submit", handleSubmit); 91 | 92 | chatForm.addEventListener("keyup", (event) => { 93 | if (event.keyCode === 13) handleSubmit(event); 94 | }); 95 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gemini_chatbot_javascript", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "gemini_chatbot_javascript", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@google/generative-ai": "^0.1.2", 12 | "markdown-it": "^14.0.0" 13 | }, 14 | "devDependencies": { 15 | "tailwindcss": "^3.3.6", 16 | "vite": "^5.0.8" 17 | } 18 | }, 19 | "node_modules/@alloc/quick-lru": { 20 | "version": "5.2.0", 21 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 22 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 23 | "dev": true, 24 | "engines": { 25 | "node": ">=10" 26 | }, 27 | "funding": { 28 | "url": "https://github.com/sponsors/sindresorhus" 29 | } 30 | }, 31 | "node_modules/@esbuild/android-arm": { 32 | "version": "0.19.9", 33 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", 34 | "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", 35 | "cpu": [ 36 | "arm" 37 | ], 38 | "dev": true, 39 | "optional": true, 40 | "os": [ 41 | "android" 42 | ], 43 | "engines": { 44 | "node": ">=12" 45 | } 46 | }, 47 | "node_modules/@esbuild/android-arm64": { 48 | "version": "0.19.9", 49 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", 50 | "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", 51 | "cpu": [ 52 | "arm64" 53 | ], 54 | "dev": true, 55 | "optional": true, 56 | "os": [ 57 | "android" 58 | ], 59 | "engines": { 60 | "node": ">=12" 61 | } 62 | }, 63 | "node_modules/@esbuild/android-x64": { 64 | "version": "0.19.9", 65 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", 66 | "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", 67 | "cpu": [ 68 | "x64" 69 | ], 70 | "dev": true, 71 | "optional": true, 72 | "os": [ 73 | "android" 74 | ], 75 | "engines": { 76 | "node": ">=12" 77 | } 78 | }, 79 | "node_modules/@esbuild/darwin-arm64": { 80 | "version": "0.19.9", 81 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", 82 | "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", 83 | "cpu": [ 84 | "arm64" 85 | ], 86 | "dev": true, 87 | "optional": true, 88 | "os": [ 89 | "darwin" 90 | ], 91 | "engines": { 92 | "node": ">=12" 93 | } 94 | }, 95 | "node_modules/@esbuild/darwin-x64": { 96 | "version": "0.19.9", 97 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", 98 | "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", 99 | "cpu": [ 100 | "x64" 101 | ], 102 | "dev": true, 103 | "optional": true, 104 | "os": [ 105 | "darwin" 106 | ], 107 | "engines": { 108 | "node": ">=12" 109 | } 110 | }, 111 | "node_modules/@esbuild/freebsd-arm64": { 112 | "version": "0.19.9", 113 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", 114 | "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", 115 | "cpu": [ 116 | "arm64" 117 | ], 118 | "dev": true, 119 | "optional": true, 120 | "os": [ 121 | "freebsd" 122 | ], 123 | "engines": { 124 | "node": ">=12" 125 | } 126 | }, 127 | "node_modules/@esbuild/freebsd-x64": { 128 | "version": "0.19.9", 129 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", 130 | "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", 131 | "cpu": [ 132 | "x64" 133 | ], 134 | "dev": true, 135 | "optional": true, 136 | "os": [ 137 | "freebsd" 138 | ], 139 | "engines": { 140 | "node": ">=12" 141 | } 142 | }, 143 | "node_modules/@esbuild/linux-arm": { 144 | "version": "0.19.9", 145 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", 146 | "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", 147 | "cpu": [ 148 | "arm" 149 | ], 150 | "dev": true, 151 | "optional": true, 152 | "os": [ 153 | "linux" 154 | ], 155 | "engines": { 156 | "node": ">=12" 157 | } 158 | }, 159 | "node_modules/@esbuild/linux-arm64": { 160 | "version": "0.19.9", 161 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", 162 | "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", 163 | "cpu": [ 164 | "arm64" 165 | ], 166 | "dev": true, 167 | "optional": true, 168 | "os": [ 169 | "linux" 170 | ], 171 | "engines": { 172 | "node": ">=12" 173 | } 174 | }, 175 | "node_modules/@esbuild/linux-ia32": { 176 | "version": "0.19.9", 177 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", 178 | "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", 179 | "cpu": [ 180 | "ia32" 181 | ], 182 | "dev": true, 183 | "optional": true, 184 | "os": [ 185 | "linux" 186 | ], 187 | "engines": { 188 | "node": ">=12" 189 | } 190 | }, 191 | "node_modules/@esbuild/linux-loong64": { 192 | "version": "0.19.9", 193 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", 194 | "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", 195 | "cpu": [ 196 | "loong64" 197 | ], 198 | "dev": true, 199 | "optional": true, 200 | "os": [ 201 | "linux" 202 | ], 203 | "engines": { 204 | "node": ">=12" 205 | } 206 | }, 207 | "node_modules/@esbuild/linux-mips64el": { 208 | "version": "0.19.9", 209 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", 210 | "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", 211 | "cpu": [ 212 | "mips64el" 213 | ], 214 | "dev": true, 215 | "optional": true, 216 | "os": [ 217 | "linux" 218 | ], 219 | "engines": { 220 | "node": ">=12" 221 | } 222 | }, 223 | "node_modules/@esbuild/linux-ppc64": { 224 | "version": "0.19.9", 225 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", 226 | "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", 227 | "cpu": [ 228 | "ppc64" 229 | ], 230 | "dev": true, 231 | "optional": true, 232 | "os": [ 233 | "linux" 234 | ], 235 | "engines": { 236 | "node": ">=12" 237 | } 238 | }, 239 | "node_modules/@esbuild/linux-riscv64": { 240 | "version": "0.19.9", 241 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", 242 | "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", 243 | "cpu": [ 244 | "riscv64" 245 | ], 246 | "dev": true, 247 | "optional": true, 248 | "os": [ 249 | "linux" 250 | ], 251 | "engines": { 252 | "node": ">=12" 253 | } 254 | }, 255 | "node_modules/@esbuild/linux-s390x": { 256 | "version": "0.19.9", 257 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", 258 | "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", 259 | "cpu": [ 260 | "s390x" 261 | ], 262 | "dev": true, 263 | "optional": true, 264 | "os": [ 265 | "linux" 266 | ], 267 | "engines": { 268 | "node": ">=12" 269 | } 270 | }, 271 | "node_modules/@esbuild/linux-x64": { 272 | "version": "0.19.9", 273 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", 274 | "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", 275 | "cpu": [ 276 | "x64" 277 | ], 278 | "dev": true, 279 | "optional": true, 280 | "os": [ 281 | "linux" 282 | ], 283 | "engines": { 284 | "node": ">=12" 285 | } 286 | }, 287 | "node_modules/@esbuild/netbsd-x64": { 288 | "version": "0.19.9", 289 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", 290 | "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", 291 | "cpu": [ 292 | "x64" 293 | ], 294 | "dev": true, 295 | "optional": true, 296 | "os": [ 297 | "netbsd" 298 | ], 299 | "engines": { 300 | "node": ">=12" 301 | } 302 | }, 303 | "node_modules/@esbuild/openbsd-x64": { 304 | "version": "0.19.9", 305 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", 306 | "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", 307 | "cpu": [ 308 | "x64" 309 | ], 310 | "dev": true, 311 | "optional": true, 312 | "os": [ 313 | "openbsd" 314 | ], 315 | "engines": { 316 | "node": ">=12" 317 | } 318 | }, 319 | "node_modules/@esbuild/sunos-x64": { 320 | "version": "0.19.9", 321 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", 322 | "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", 323 | "cpu": [ 324 | "x64" 325 | ], 326 | "dev": true, 327 | "optional": true, 328 | "os": [ 329 | "sunos" 330 | ], 331 | "engines": { 332 | "node": ">=12" 333 | } 334 | }, 335 | "node_modules/@esbuild/win32-arm64": { 336 | "version": "0.19.9", 337 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", 338 | "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", 339 | "cpu": [ 340 | "arm64" 341 | ], 342 | "dev": true, 343 | "optional": true, 344 | "os": [ 345 | "win32" 346 | ], 347 | "engines": { 348 | "node": ">=12" 349 | } 350 | }, 351 | "node_modules/@esbuild/win32-ia32": { 352 | "version": "0.19.9", 353 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", 354 | "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", 355 | "cpu": [ 356 | "ia32" 357 | ], 358 | "dev": true, 359 | "optional": true, 360 | "os": [ 361 | "win32" 362 | ], 363 | "engines": { 364 | "node": ">=12" 365 | } 366 | }, 367 | "node_modules/@esbuild/win32-x64": { 368 | "version": "0.19.9", 369 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", 370 | "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", 371 | "cpu": [ 372 | "x64" 373 | ], 374 | "dev": true, 375 | "optional": true, 376 | "os": [ 377 | "win32" 378 | ], 379 | "engines": { 380 | "node": ">=12" 381 | } 382 | }, 383 | "node_modules/@google/generative-ai": { 384 | "version": "0.1.2", 385 | "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.1.2.tgz", 386 | "integrity": "sha512-54easvKJpqnsW48LcplF/8bnLKvXeYe34rfMMdgqMVZEQmLOLEKZvbif4mFmyVwoMg1/6MPLwD703RLuSJKLJw==", 387 | "engines": { 388 | "node": ">=18.0.0" 389 | } 390 | }, 391 | "node_modules/@jridgewell/gen-mapping": { 392 | "version": "0.3.3", 393 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 394 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 395 | "dev": true, 396 | "dependencies": { 397 | "@jridgewell/set-array": "^1.0.1", 398 | "@jridgewell/sourcemap-codec": "^1.4.10", 399 | "@jridgewell/trace-mapping": "^0.3.9" 400 | }, 401 | "engines": { 402 | "node": ">=6.0.0" 403 | } 404 | }, 405 | "node_modules/@jridgewell/resolve-uri": { 406 | "version": "3.1.1", 407 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 408 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 409 | "dev": true, 410 | "engines": { 411 | "node": ">=6.0.0" 412 | } 413 | }, 414 | "node_modules/@jridgewell/set-array": { 415 | "version": "1.1.2", 416 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 417 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 418 | "dev": true, 419 | "engines": { 420 | "node": ">=6.0.0" 421 | } 422 | }, 423 | "node_modules/@jridgewell/sourcemap-codec": { 424 | "version": "1.4.15", 425 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 426 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 427 | "dev": true 428 | }, 429 | "node_modules/@jridgewell/trace-mapping": { 430 | "version": "0.3.20", 431 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", 432 | "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", 433 | "dev": true, 434 | "dependencies": { 435 | "@jridgewell/resolve-uri": "^3.1.0", 436 | "@jridgewell/sourcemap-codec": "^1.4.14" 437 | } 438 | }, 439 | "node_modules/@nodelib/fs.scandir": { 440 | "version": "2.1.5", 441 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 442 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 443 | "dev": true, 444 | "dependencies": { 445 | "@nodelib/fs.stat": "2.0.5", 446 | "run-parallel": "^1.1.9" 447 | }, 448 | "engines": { 449 | "node": ">= 8" 450 | } 451 | }, 452 | "node_modules/@nodelib/fs.stat": { 453 | "version": "2.0.5", 454 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 455 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 456 | "dev": true, 457 | "engines": { 458 | "node": ">= 8" 459 | } 460 | }, 461 | "node_modules/@nodelib/fs.walk": { 462 | "version": "1.2.8", 463 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 464 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 465 | "dev": true, 466 | "dependencies": { 467 | "@nodelib/fs.scandir": "2.1.5", 468 | "fastq": "^1.6.0" 469 | }, 470 | "engines": { 471 | "node": ">= 8" 472 | } 473 | }, 474 | "node_modules/@rollup/rollup-android-arm-eabi": { 475 | "version": "4.9.0", 476 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz", 477 | "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==", 478 | "cpu": [ 479 | "arm" 480 | ], 481 | "dev": true, 482 | "optional": true, 483 | "os": [ 484 | "android" 485 | ] 486 | }, 487 | "node_modules/@rollup/rollup-android-arm64": { 488 | "version": "4.9.0", 489 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz", 490 | "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==", 491 | "cpu": [ 492 | "arm64" 493 | ], 494 | "dev": true, 495 | "optional": true, 496 | "os": [ 497 | "android" 498 | ] 499 | }, 500 | "node_modules/@rollup/rollup-darwin-arm64": { 501 | "version": "4.9.0", 502 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz", 503 | "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==", 504 | "cpu": [ 505 | "arm64" 506 | ], 507 | "dev": true, 508 | "optional": true, 509 | "os": [ 510 | "darwin" 511 | ] 512 | }, 513 | "node_modules/@rollup/rollup-darwin-x64": { 514 | "version": "4.9.0", 515 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz", 516 | "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==", 517 | "cpu": [ 518 | "x64" 519 | ], 520 | "dev": true, 521 | "optional": true, 522 | "os": [ 523 | "darwin" 524 | ] 525 | }, 526 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 527 | "version": "4.9.0", 528 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz", 529 | "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==", 530 | "cpu": [ 531 | "arm" 532 | ], 533 | "dev": true, 534 | "optional": true, 535 | "os": [ 536 | "linux" 537 | ] 538 | }, 539 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 540 | "version": "4.9.0", 541 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz", 542 | "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==", 543 | "cpu": [ 544 | "arm64" 545 | ], 546 | "dev": true, 547 | "optional": true, 548 | "os": [ 549 | "linux" 550 | ] 551 | }, 552 | "node_modules/@rollup/rollup-linux-arm64-musl": { 553 | "version": "4.9.0", 554 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz", 555 | "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==", 556 | "cpu": [ 557 | "arm64" 558 | ], 559 | "dev": true, 560 | "optional": true, 561 | "os": [ 562 | "linux" 563 | ] 564 | }, 565 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 566 | "version": "4.9.0", 567 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz", 568 | "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==", 569 | "cpu": [ 570 | "riscv64" 571 | ], 572 | "dev": true, 573 | "optional": true, 574 | "os": [ 575 | "linux" 576 | ] 577 | }, 578 | "node_modules/@rollup/rollup-linux-x64-gnu": { 579 | "version": "4.9.0", 580 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz", 581 | "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==", 582 | "cpu": [ 583 | "x64" 584 | ], 585 | "dev": true, 586 | "optional": true, 587 | "os": [ 588 | "linux" 589 | ] 590 | }, 591 | "node_modules/@rollup/rollup-linux-x64-musl": { 592 | "version": "4.9.0", 593 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz", 594 | "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==", 595 | "cpu": [ 596 | "x64" 597 | ], 598 | "dev": true, 599 | "optional": true, 600 | "os": [ 601 | "linux" 602 | ] 603 | }, 604 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 605 | "version": "4.9.0", 606 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz", 607 | "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==", 608 | "cpu": [ 609 | "arm64" 610 | ], 611 | "dev": true, 612 | "optional": true, 613 | "os": [ 614 | "win32" 615 | ] 616 | }, 617 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 618 | "version": "4.9.0", 619 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz", 620 | "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==", 621 | "cpu": [ 622 | "ia32" 623 | ], 624 | "dev": true, 625 | "optional": true, 626 | "os": [ 627 | "win32" 628 | ] 629 | }, 630 | "node_modules/@rollup/rollup-win32-x64-msvc": { 631 | "version": "4.9.0", 632 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz", 633 | "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==", 634 | "cpu": [ 635 | "x64" 636 | ], 637 | "dev": true, 638 | "optional": true, 639 | "os": [ 640 | "win32" 641 | ] 642 | }, 643 | "node_modules/any-promise": { 644 | "version": "1.3.0", 645 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 646 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 647 | "dev": true 648 | }, 649 | "node_modules/anymatch": { 650 | "version": "3.1.3", 651 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 652 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 653 | "dev": true, 654 | "dependencies": { 655 | "normalize-path": "^3.0.0", 656 | "picomatch": "^2.0.4" 657 | }, 658 | "engines": { 659 | "node": ">= 8" 660 | } 661 | }, 662 | "node_modules/arg": { 663 | "version": "5.0.2", 664 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 665 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", 666 | "dev": true 667 | }, 668 | "node_modules/argparse": { 669 | "version": "2.0.1", 670 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 671 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 672 | }, 673 | "node_modules/balanced-match": { 674 | "version": "1.0.2", 675 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 676 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 677 | "dev": true 678 | }, 679 | "node_modules/binary-extensions": { 680 | "version": "2.2.0", 681 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 682 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 683 | "dev": true, 684 | "engines": { 685 | "node": ">=8" 686 | } 687 | }, 688 | "node_modules/brace-expansion": { 689 | "version": "1.1.11", 690 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 691 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 692 | "dev": true, 693 | "dependencies": { 694 | "balanced-match": "^1.0.0", 695 | "concat-map": "0.0.1" 696 | } 697 | }, 698 | "node_modules/braces": { 699 | "version": "3.0.2", 700 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 701 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 702 | "dev": true, 703 | "dependencies": { 704 | "fill-range": "^7.0.1" 705 | }, 706 | "engines": { 707 | "node": ">=8" 708 | } 709 | }, 710 | "node_modules/camelcase-css": { 711 | "version": "2.0.1", 712 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 713 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 714 | "dev": true, 715 | "engines": { 716 | "node": ">= 6" 717 | } 718 | }, 719 | "node_modules/chokidar": { 720 | "version": "3.5.3", 721 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 722 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 723 | "dev": true, 724 | "funding": [ 725 | { 726 | "type": "individual", 727 | "url": "https://paulmillr.com/funding/" 728 | } 729 | ], 730 | "dependencies": { 731 | "anymatch": "~3.1.2", 732 | "braces": "~3.0.2", 733 | "glob-parent": "~5.1.2", 734 | "is-binary-path": "~2.1.0", 735 | "is-glob": "~4.0.1", 736 | "normalize-path": "~3.0.0", 737 | "readdirp": "~3.6.0" 738 | }, 739 | "engines": { 740 | "node": ">= 8.10.0" 741 | }, 742 | "optionalDependencies": { 743 | "fsevents": "~2.3.2" 744 | } 745 | }, 746 | "node_modules/chokidar/node_modules/glob-parent": { 747 | "version": "5.1.2", 748 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 749 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 750 | "dev": true, 751 | "dependencies": { 752 | "is-glob": "^4.0.1" 753 | }, 754 | "engines": { 755 | "node": ">= 6" 756 | } 757 | }, 758 | "node_modules/commander": { 759 | "version": "4.1.1", 760 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 761 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 762 | "dev": true, 763 | "engines": { 764 | "node": ">= 6" 765 | } 766 | }, 767 | "node_modules/concat-map": { 768 | "version": "0.0.1", 769 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 770 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 771 | "dev": true 772 | }, 773 | "node_modules/cssesc": { 774 | "version": "3.0.0", 775 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 776 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 777 | "dev": true, 778 | "bin": { 779 | "cssesc": "bin/cssesc" 780 | }, 781 | "engines": { 782 | "node": ">=4" 783 | } 784 | }, 785 | "node_modules/didyoumean": { 786 | "version": "1.2.2", 787 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 788 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 789 | "dev": true 790 | }, 791 | "node_modules/dlv": { 792 | "version": "1.1.3", 793 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 794 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 795 | "dev": true 796 | }, 797 | "node_modules/entities": { 798 | "version": "4.5.0", 799 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 800 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 801 | "engines": { 802 | "node": ">=0.12" 803 | }, 804 | "funding": { 805 | "url": "https://github.com/fb55/entities?sponsor=1" 806 | } 807 | }, 808 | "node_modules/esbuild": { 809 | "version": "0.19.9", 810 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", 811 | "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", 812 | "dev": true, 813 | "hasInstallScript": true, 814 | "bin": { 815 | "esbuild": "bin/esbuild" 816 | }, 817 | "engines": { 818 | "node": ">=12" 819 | }, 820 | "optionalDependencies": { 821 | "@esbuild/android-arm": "0.19.9", 822 | "@esbuild/android-arm64": "0.19.9", 823 | "@esbuild/android-x64": "0.19.9", 824 | "@esbuild/darwin-arm64": "0.19.9", 825 | "@esbuild/darwin-x64": "0.19.9", 826 | "@esbuild/freebsd-arm64": "0.19.9", 827 | "@esbuild/freebsd-x64": "0.19.9", 828 | "@esbuild/linux-arm": "0.19.9", 829 | "@esbuild/linux-arm64": "0.19.9", 830 | "@esbuild/linux-ia32": "0.19.9", 831 | "@esbuild/linux-loong64": "0.19.9", 832 | "@esbuild/linux-mips64el": "0.19.9", 833 | "@esbuild/linux-ppc64": "0.19.9", 834 | "@esbuild/linux-riscv64": "0.19.9", 835 | "@esbuild/linux-s390x": "0.19.9", 836 | "@esbuild/linux-x64": "0.19.9", 837 | "@esbuild/netbsd-x64": "0.19.9", 838 | "@esbuild/openbsd-x64": "0.19.9", 839 | "@esbuild/sunos-x64": "0.19.9", 840 | "@esbuild/win32-arm64": "0.19.9", 841 | "@esbuild/win32-ia32": "0.19.9", 842 | "@esbuild/win32-x64": "0.19.9" 843 | } 844 | }, 845 | "node_modules/fast-glob": { 846 | "version": "3.3.2", 847 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 848 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 849 | "dev": true, 850 | "dependencies": { 851 | "@nodelib/fs.stat": "^2.0.2", 852 | "@nodelib/fs.walk": "^1.2.3", 853 | "glob-parent": "^5.1.2", 854 | "merge2": "^1.3.0", 855 | "micromatch": "^4.0.4" 856 | }, 857 | "engines": { 858 | "node": ">=8.6.0" 859 | } 860 | }, 861 | "node_modules/fast-glob/node_modules/glob-parent": { 862 | "version": "5.1.2", 863 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 864 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 865 | "dev": true, 866 | "dependencies": { 867 | "is-glob": "^4.0.1" 868 | }, 869 | "engines": { 870 | "node": ">= 6" 871 | } 872 | }, 873 | "node_modules/fastq": { 874 | "version": "1.15.0", 875 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 876 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 877 | "dev": true, 878 | "dependencies": { 879 | "reusify": "^1.0.4" 880 | } 881 | }, 882 | "node_modules/fill-range": { 883 | "version": "7.0.1", 884 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 885 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 886 | "dev": true, 887 | "dependencies": { 888 | "to-regex-range": "^5.0.1" 889 | }, 890 | "engines": { 891 | "node": ">=8" 892 | } 893 | }, 894 | "node_modules/fs.realpath": { 895 | "version": "1.0.0", 896 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 897 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 898 | "dev": true 899 | }, 900 | "node_modules/fsevents": { 901 | "version": "2.3.3", 902 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 903 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 904 | "dev": true, 905 | "hasInstallScript": true, 906 | "optional": true, 907 | "os": [ 908 | "darwin" 909 | ], 910 | "engines": { 911 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 912 | } 913 | }, 914 | "node_modules/function-bind": { 915 | "version": "1.1.2", 916 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 917 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 918 | "dev": true, 919 | "funding": { 920 | "url": "https://github.com/sponsors/ljharb" 921 | } 922 | }, 923 | "node_modules/glob": { 924 | "version": "7.1.6", 925 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 926 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 927 | "dev": true, 928 | "dependencies": { 929 | "fs.realpath": "^1.0.0", 930 | "inflight": "^1.0.4", 931 | "inherits": "2", 932 | "minimatch": "^3.0.4", 933 | "once": "^1.3.0", 934 | "path-is-absolute": "^1.0.0" 935 | }, 936 | "engines": { 937 | "node": "*" 938 | }, 939 | "funding": { 940 | "url": "https://github.com/sponsors/isaacs" 941 | } 942 | }, 943 | "node_modules/glob-parent": { 944 | "version": "6.0.2", 945 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 946 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 947 | "dev": true, 948 | "dependencies": { 949 | "is-glob": "^4.0.3" 950 | }, 951 | "engines": { 952 | "node": ">=10.13.0" 953 | } 954 | }, 955 | "node_modules/hasown": { 956 | "version": "2.0.0", 957 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 958 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 959 | "dev": true, 960 | "dependencies": { 961 | "function-bind": "^1.1.2" 962 | }, 963 | "engines": { 964 | "node": ">= 0.4" 965 | } 966 | }, 967 | "node_modules/inflight": { 968 | "version": "1.0.6", 969 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 970 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 971 | "dev": true, 972 | "dependencies": { 973 | "once": "^1.3.0", 974 | "wrappy": "1" 975 | } 976 | }, 977 | "node_modules/inherits": { 978 | "version": "2.0.4", 979 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 980 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 981 | "dev": true 982 | }, 983 | "node_modules/is-binary-path": { 984 | "version": "2.1.0", 985 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 986 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 987 | "dev": true, 988 | "dependencies": { 989 | "binary-extensions": "^2.0.0" 990 | }, 991 | "engines": { 992 | "node": ">=8" 993 | } 994 | }, 995 | "node_modules/is-core-module": { 996 | "version": "2.13.1", 997 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 998 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 999 | "dev": true, 1000 | "dependencies": { 1001 | "hasown": "^2.0.0" 1002 | }, 1003 | "funding": { 1004 | "url": "https://github.com/sponsors/ljharb" 1005 | } 1006 | }, 1007 | "node_modules/is-extglob": { 1008 | "version": "2.1.1", 1009 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1010 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1011 | "dev": true, 1012 | "engines": { 1013 | "node": ">=0.10.0" 1014 | } 1015 | }, 1016 | "node_modules/is-glob": { 1017 | "version": "4.0.3", 1018 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1019 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1020 | "dev": true, 1021 | "dependencies": { 1022 | "is-extglob": "^2.1.1" 1023 | }, 1024 | "engines": { 1025 | "node": ">=0.10.0" 1026 | } 1027 | }, 1028 | "node_modules/is-number": { 1029 | "version": "7.0.0", 1030 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1031 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1032 | "dev": true, 1033 | "engines": { 1034 | "node": ">=0.12.0" 1035 | } 1036 | }, 1037 | "node_modules/jiti": { 1038 | "version": "1.21.0", 1039 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", 1040 | "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", 1041 | "dev": true, 1042 | "bin": { 1043 | "jiti": "bin/jiti.js" 1044 | } 1045 | }, 1046 | "node_modules/lilconfig": { 1047 | "version": "2.1.0", 1048 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 1049 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 1050 | "dev": true, 1051 | "engines": { 1052 | "node": ">=10" 1053 | } 1054 | }, 1055 | "node_modules/lines-and-columns": { 1056 | "version": "1.2.4", 1057 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1058 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1059 | "dev": true 1060 | }, 1061 | "node_modules/linkify-it": { 1062 | "version": "5.0.0", 1063 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", 1064 | "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", 1065 | "dependencies": { 1066 | "uc.micro": "^2.0.0" 1067 | } 1068 | }, 1069 | "node_modules/markdown-it": { 1070 | "version": "14.0.0", 1071 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", 1072 | "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", 1073 | "dependencies": { 1074 | "argparse": "^2.0.1", 1075 | "entities": "^4.4.0", 1076 | "linkify-it": "^5.0.0", 1077 | "mdurl": "^2.0.0", 1078 | "punycode.js": "^2.3.1", 1079 | "uc.micro": "^2.0.0" 1080 | }, 1081 | "bin": { 1082 | "markdown-it": "bin/markdown-it.mjs" 1083 | } 1084 | }, 1085 | "node_modules/mdurl": { 1086 | "version": "2.0.0", 1087 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", 1088 | "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" 1089 | }, 1090 | "node_modules/merge2": { 1091 | "version": "1.4.1", 1092 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1093 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1094 | "dev": true, 1095 | "engines": { 1096 | "node": ">= 8" 1097 | } 1098 | }, 1099 | "node_modules/micromatch": { 1100 | "version": "4.0.5", 1101 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1102 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1103 | "dev": true, 1104 | "dependencies": { 1105 | "braces": "^3.0.2", 1106 | "picomatch": "^2.3.1" 1107 | }, 1108 | "engines": { 1109 | "node": ">=8.6" 1110 | } 1111 | }, 1112 | "node_modules/minimatch": { 1113 | "version": "3.1.2", 1114 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1115 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1116 | "dev": true, 1117 | "dependencies": { 1118 | "brace-expansion": "^1.1.7" 1119 | }, 1120 | "engines": { 1121 | "node": "*" 1122 | } 1123 | }, 1124 | "node_modules/mz": { 1125 | "version": "2.7.0", 1126 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1127 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1128 | "dev": true, 1129 | "dependencies": { 1130 | "any-promise": "^1.0.0", 1131 | "object-assign": "^4.0.1", 1132 | "thenify-all": "^1.0.0" 1133 | } 1134 | }, 1135 | "node_modules/nanoid": { 1136 | "version": "3.3.7", 1137 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1138 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1139 | "dev": true, 1140 | "funding": [ 1141 | { 1142 | "type": "github", 1143 | "url": "https://github.com/sponsors/ai" 1144 | } 1145 | ], 1146 | "bin": { 1147 | "nanoid": "bin/nanoid.cjs" 1148 | }, 1149 | "engines": { 1150 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1151 | } 1152 | }, 1153 | "node_modules/normalize-path": { 1154 | "version": "3.0.0", 1155 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1156 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1157 | "dev": true, 1158 | "engines": { 1159 | "node": ">=0.10.0" 1160 | } 1161 | }, 1162 | "node_modules/object-assign": { 1163 | "version": "4.1.1", 1164 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1165 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1166 | "dev": true, 1167 | "engines": { 1168 | "node": ">=0.10.0" 1169 | } 1170 | }, 1171 | "node_modules/object-hash": { 1172 | "version": "3.0.0", 1173 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1174 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 1175 | "dev": true, 1176 | "engines": { 1177 | "node": ">= 6" 1178 | } 1179 | }, 1180 | "node_modules/once": { 1181 | "version": "1.4.0", 1182 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1183 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1184 | "dev": true, 1185 | "dependencies": { 1186 | "wrappy": "1" 1187 | } 1188 | }, 1189 | "node_modules/path-is-absolute": { 1190 | "version": "1.0.1", 1191 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1192 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1193 | "dev": true, 1194 | "engines": { 1195 | "node": ">=0.10.0" 1196 | } 1197 | }, 1198 | "node_modules/path-parse": { 1199 | "version": "1.0.7", 1200 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1201 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1202 | "dev": true 1203 | }, 1204 | "node_modules/picocolors": { 1205 | "version": "1.0.0", 1206 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1207 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1208 | "dev": true 1209 | }, 1210 | "node_modules/picomatch": { 1211 | "version": "2.3.1", 1212 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1213 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1214 | "dev": true, 1215 | "engines": { 1216 | "node": ">=8.6" 1217 | }, 1218 | "funding": { 1219 | "url": "https://github.com/sponsors/jonschlinkert" 1220 | } 1221 | }, 1222 | "node_modules/pify": { 1223 | "version": "2.3.0", 1224 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1225 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 1226 | "dev": true, 1227 | "engines": { 1228 | "node": ">=0.10.0" 1229 | } 1230 | }, 1231 | "node_modules/pirates": { 1232 | "version": "4.0.6", 1233 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 1234 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 1235 | "dev": true, 1236 | "engines": { 1237 | "node": ">= 6" 1238 | } 1239 | }, 1240 | "node_modules/postcss": { 1241 | "version": "8.4.32", 1242 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", 1243 | "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", 1244 | "dev": true, 1245 | "funding": [ 1246 | { 1247 | "type": "opencollective", 1248 | "url": "https://opencollective.com/postcss/" 1249 | }, 1250 | { 1251 | "type": "tidelift", 1252 | "url": "https://tidelift.com/funding/github/npm/postcss" 1253 | }, 1254 | { 1255 | "type": "github", 1256 | "url": "https://github.com/sponsors/ai" 1257 | } 1258 | ], 1259 | "dependencies": { 1260 | "nanoid": "^3.3.7", 1261 | "picocolors": "^1.0.0", 1262 | "source-map-js": "^1.0.2" 1263 | }, 1264 | "engines": { 1265 | "node": "^10 || ^12 || >=14" 1266 | } 1267 | }, 1268 | "node_modules/postcss-import": { 1269 | "version": "15.1.0", 1270 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 1271 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 1272 | "dev": true, 1273 | "dependencies": { 1274 | "postcss-value-parser": "^4.0.0", 1275 | "read-cache": "^1.0.0", 1276 | "resolve": "^1.1.7" 1277 | }, 1278 | "engines": { 1279 | "node": ">=14.0.0" 1280 | }, 1281 | "peerDependencies": { 1282 | "postcss": "^8.0.0" 1283 | } 1284 | }, 1285 | "node_modules/postcss-js": { 1286 | "version": "4.0.1", 1287 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 1288 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 1289 | "dev": true, 1290 | "dependencies": { 1291 | "camelcase-css": "^2.0.1" 1292 | }, 1293 | "engines": { 1294 | "node": "^12 || ^14 || >= 16" 1295 | }, 1296 | "funding": { 1297 | "type": "opencollective", 1298 | "url": "https://opencollective.com/postcss/" 1299 | }, 1300 | "peerDependencies": { 1301 | "postcss": "^8.4.21" 1302 | } 1303 | }, 1304 | "node_modules/postcss-load-config": { 1305 | "version": "4.0.2", 1306 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 1307 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 1308 | "dev": true, 1309 | "funding": [ 1310 | { 1311 | "type": "opencollective", 1312 | "url": "https://opencollective.com/postcss/" 1313 | }, 1314 | { 1315 | "type": "github", 1316 | "url": "https://github.com/sponsors/ai" 1317 | } 1318 | ], 1319 | "dependencies": { 1320 | "lilconfig": "^3.0.0", 1321 | "yaml": "^2.3.4" 1322 | }, 1323 | "engines": { 1324 | "node": ">= 14" 1325 | }, 1326 | "peerDependencies": { 1327 | "postcss": ">=8.0.9", 1328 | "ts-node": ">=9.0.0" 1329 | }, 1330 | "peerDependenciesMeta": { 1331 | "postcss": { 1332 | "optional": true 1333 | }, 1334 | "ts-node": { 1335 | "optional": true 1336 | } 1337 | } 1338 | }, 1339 | "node_modules/postcss-load-config/node_modules/lilconfig": { 1340 | "version": "3.0.0", 1341 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", 1342 | "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", 1343 | "dev": true, 1344 | "engines": { 1345 | "node": ">=14" 1346 | } 1347 | }, 1348 | "node_modules/postcss-nested": { 1349 | "version": "6.0.1", 1350 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 1351 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "postcss-selector-parser": "^6.0.11" 1355 | }, 1356 | "engines": { 1357 | "node": ">=12.0" 1358 | }, 1359 | "funding": { 1360 | "type": "opencollective", 1361 | "url": "https://opencollective.com/postcss/" 1362 | }, 1363 | "peerDependencies": { 1364 | "postcss": "^8.2.14" 1365 | } 1366 | }, 1367 | "node_modules/postcss-selector-parser": { 1368 | "version": "6.0.13", 1369 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 1370 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 1371 | "dev": true, 1372 | "dependencies": { 1373 | "cssesc": "^3.0.0", 1374 | "util-deprecate": "^1.0.2" 1375 | }, 1376 | "engines": { 1377 | "node": ">=4" 1378 | } 1379 | }, 1380 | "node_modules/postcss-value-parser": { 1381 | "version": "4.2.0", 1382 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1383 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1384 | "dev": true 1385 | }, 1386 | "node_modules/punycode.js": { 1387 | "version": "2.3.1", 1388 | "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", 1389 | "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", 1390 | "engines": { 1391 | "node": ">=6" 1392 | } 1393 | }, 1394 | "node_modules/queue-microtask": { 1395 | "version": "1.2.3", 1396 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1397 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1398 | "dev": true, 1399 | "funding": [ 1400 | { 1401 | "type": "github", 1402 | "url": "https://github.com/sponsors/feross" 1403 | }, 1404 | { 1405 | "type": "patreon", 1406 | "url": "https://www.patreon.com/feross" 1407 | }, 1408 | { 1409 | "type": "consulting", 1410 | "url": "https://feross.org/support" 1411 | } 1412 | ] 1413 | }, 1414 | "node_modules/read-cache": { 1415 | "version": "1.0.0", 1416 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1417 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "pify": "^2.3.0" 1421 | } 1422 | }, 1423 | "node_modules/readdirp": { 1424 | "version": "3.6.0", 1425 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1426 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1427 | "dev": true, 1428 | "dependencies": { 1429 | "picomatch": "^2.2.1" 1430 | }, 1431 | "engines": { 1432 | "node": ">=8.10.0" 1433 | } 1434 | }, 1435 | "node_modules/resolve": { 1436 | "version": "1.22.8", 1437 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1438 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1439 | "dev": true, 1440 | "dependencies": { 1441 | "is-core-module": "^2.13.0", 1442 | "path-parse": "^1.0.7", 1443 | "supports-preserve-symlinks-flag": "^1.0.0" 1444 | }, 1445 | "bin": { 1446 | "resolve": "bin/resolve" 1447 | }, 1448 | "funding": { 1449 | "url": "https://github.com/sponsors/ljharb" 1450 | } 1451 | }, 1452 | "node_modules/reusify": { 1453 | "version": "1.0.4", 1454 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1455 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1456 | "dev": true, 1457 | "engines": { 1458 | "iojs": ">=1.0.0", 1459 | "node": ">=0.10.0" 1460 | } 1461 | }, 1462 | "node_modules/rollup": { 1463 | "version": "4.9.0", 1464 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", 1465 | "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==", 1466 | "dev": true, 1467 | "bin": { 1468 | "rollup": "dist/bin/rollup" 1469 | }, 1470 | "engines": { 1471 | "node": ">=18.0.0", 1472 | "npm": ">=8.0.0" 1473 | }, 1474 | "optionalDependencies": { 1475 | "@rollup/rollup-android-arm-eabi": "4.9.0", 1476 | "@rollup/rollup-android-arm64": "4.9.0", 1477 | "@rollup/rollup-darwin-arm64": "4.9.0", 1478 | "@rollup/rollup-darwin-x64": "4.9.0", 1479 | "@rollup/rollup-linux-arm-gnueabihf": "4.9.0", 1480 | "@rollup/rollup-linux-arm64-gnu": "4.9.0", 1481 | "@rollup/rollup-linux-arm64-musl": "4.9.0", 1482 | "@rollup/rollup-linux-riscv64-gnu": "4.9.0", 1483 | "@rollup/rollup-linux-x64-gnu": "4.9.0", 1484 | "@rollup/rollup-linux-x64-musl": "4.9.0", 1485 | "@rollup/rollup-win32-arm64-msvc": "4.9.0", 1486 | "@rollup/rollup-win32-ia32-msvc": "4.9.0", 1487 | "@rollup/rollup-win32-x64-msvc": "4.9.0", 1488 | "fsevents": "~2.3.2" 1489 | } 1490 | }, 1491 | "node_modules/run-parallel": { 1492 | "version": "1.2.0", 1493 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1494 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1495 | "dev": true, 1496 | "funding": [ 1497 | { 1498 | "type": "github", 1499 | "url": "https://github.com/sponsors/feross" 1500 | }, 1501 | { 1502 | "type": "patreon", 1503 | "url": "https://www.patreon.com/feross" 1504 | }, 1505 | { 1506 | "type": "consulting", 1507 | "url": "https://feross.org/support" 1508 | } 1509 | ], 1510 | "dependencies": { 1511 | "queue-microtask": "^1.2.2" 1512 | } 1513 | }, 1514 | "node_modules/source-map-js": { 1515 | "version": "1.0.2", 1516 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1517 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1518 | "dev": true, 1519 | "engines": { 1520 | "node": ">=0.10.0" 1521 | } 1522 | }, 1523 | "node_modules/sucrase": { 1524 | "version": "3.34.0", 1525 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", 1526 | "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", 1527 | "dev": true, 1528 | "dependencies": { 1529 | "@jridgewell/gen-mapping": "^0.3.2", 1530 | "commander": "^4.0.0", 1531 | "glob": "7.1.6", 1532 | "lines-and-columns": "^1.1.6", 1533 | "mz": "^2.7.0", 1534 | "pirates": "^4.0.1", 1535 | "ts-interface-checker": "^0.1.9" 1536 | }, 1537 | "bin": { 1538 | "sucrase": "bin/sucrase", 1539 | "sucrase-node": "bin/sucrase-node" 1540 | }, 1541 | "engines": { 1542 | "node": ">=8" 1543 | } 1544 | }, 1545 | "node_modules/supports-preserve-symlinks-flag": { 1546 | "version": "1.0.0", 1547 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1548 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1549 | "dev": true, 1550 | "engines": { 1551 | "node": ">= 0.4" 1552 | }, 1553 | "funding": { 1554 | "url": "https://github.com/sponsors/ljharb" 1555 | } 1556 | }, 1557 | "node_modules/tailwindcss": { 1558 | "version": "3.3.6", 1559 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz", 1560 | "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==", 1561 | "dev": true, 1562 | "dependencies": { 1563 | "@alloc/quick-lru": "^5.2.0", 1564 | "arg": "^5.0.2", 1565 | "chokidar": "^3.5.3", 1566 | "didyoumean": "^1.2.2", 1567 | "dlv": "^1.1.3", 1568 | "fast-glob": "^3.3.0", 1569 | "glob-parent": "^6.0.2", 1570 | "is-glob": "^4.0.3", 1571 | "jiti": "^1.19.1", 1572 | "lilconfig": "^2.1.0", 1573 | "micromatch": "^4.0.5", 1574 | "normalize-path": "^3.0.0", 1575 | "object-hash": "^3.0.0", 1576 | "picocolors": "^1.0.0", 1577 | "postcss": "^8.4.23", 1578 | "postcss-import": "^15.1.0", 1579 | "postcss-js": "^4.0.1", 1580 | "postcss-load-config": "^4.0.1", 1581 | "postcss-nested": "^6.0.1", 1582 | "postcss-selector-parser": "^6.0.11", 1583 | "resolve": "^1.22.2", 1584 | "sucrase": "^3.32.0" 1585 | }, 1586 | "bin": { 1587 | "tailwind": "lib/cli.js", 1588 | "tailwindcss": "lib/cli.js" 1589 | }, 1590 | "engines": { 1591 | "node": ">=14.0.0" 1592 | } 1593 | }, 1594 | "node_modules/thenify": { 1595 | "version": "3.3.1", 1596 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 1597 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 1598 | "dev": true, 1599 | "dependencies": { 1600 | "any-promise": "^1.0.0" 1601 | } 1602 | }, 1603 | "node_modules/thenify-all": { 1604 | "version": "1.6.0", 1605 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 1606 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 1607 | "dev": true, 1608 | "dependencies": { 1609 | "thenify": ">= 3.1.0 < 4" 1610 | }, 1611 | "engines": { 1612 | "node": ">=0.8" 1613 | } 1614 | }, 1615 | "node_modules/to-regex-range": { 1616 | "version": "5.0.1", 1617 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1618 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1619 | "dev": true, 1620 | "dependencies": { 1621 | "is-number": "^7.0.0" 1622 | }, 1623 | "engines": { 1624 | "node": ">=8.0" 1625 | } 1626 | }, 1627 | "node_modules/ts-interface-checker": { 1628 | "version": "0.1.13", 1629 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 1630 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 1631 | "dev": true 1632 | }, 1633 | "node_modules/uc.micro": { 1634 | "version": "2.0.0", 1635 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz", 1636 | "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==" 1637 | }, 1638 | "node_modules/util-deprecate": { 1639 | "version": "1.0.2", 1640 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1641 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1642 | "dev": true 1643 | }, 1644 | "node_modules/vite": { 1645 | "version": "5.0.10", 1646 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", 1647 | "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", 1648 | "dev": true, 1649 | "dependencies": { 1650 | "esbuild": "^0.19.3", 1651 | "postcss": "^8.4.32", 1652 | "rollup": "^4.2.0" 1653 | }, 1654 | "bin": { 1655 | "vite": "bin/vite.js" 1656 | }, 1657 | "engines": { 1658 | "node": "^18.0.0 || >=20.0.0" 1659 | }, 1660 | "funding": { 1661 | "url": "https://github.com/vitejs/vite?sponsor=1" 1662 | }, 1663 | "optionalDependencies": { 1664 | "fsevents": "~2.3.3" 1665 | }, 1666 | "peerDependencies": { 1667 | "@types/node": "^18.0.0 || >=20.0.0", 1668 | "less": "*", 1669 | "lightningcss": "^1.21.0", 1670 | "sass": "*", 1671 | "stylus": "*", 1672 | "sugarss": "*", 1673 | "terser": "^5.4.0" 1674 | }, 1675 | "peerDependenciesMeta": { 1676 | "@types/node": { 1677 | "optional": true 1678 | }, 1679 | "less": { 1680 | "optional": true 1681 | }, 1682 | "lightningcss": { 1683 | "optional": true 1684 | }, 1685 | "sass": { 1686 | "optional": true 1687 | }, 1688 | "stylus": { 1689 | "optional": true 1690 | }, 1691 | "sugarss": { 1692 | "optional": true 1693 | }, 1694 | "terser": { 1695 | "optional": true 1696 | } 1697 | } 1698 | }, 1699 | "node_modules/wrappy": { 1700 | "version": "1.0.2", 1701 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1702 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1703 | "dev": true 1704 | }, 1705 | "node_modules/yaml": { 1706 | "version": "2.3.4", 1707 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", 1708 | "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", 1709 | "dev": true, 1710 | "engines": { 1711 | "node": ">= 14" 1712 | } 1713 | } 1714 | } 1715 | } 1716 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gemini_chatbot_javascript", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "devDependencies": { 12 | "tailwindcss": "^3.3.6", 13 | "vite": "^5.0.8" 14 | }, 15 | "dependencies": { 16 | "@google/generative-ai": "^0.1.2", 17 | "markdown-it": "^14.0.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/chat-bot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tommyscodebase/gemini_chatbot_javascript/bc721f357b890b3c853fbb76774ec016e1240c0e/public/chat-bot.jpg -------------------------------------------------------------------------------- /public/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tommyscodebase/gemini_chatbot_javascript/bc721f357b890b3c853fbb76774ec016e1240c0e/public/user.jpg -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.3.6 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | 5. Use the user's configured `sans` font-feature-settings by default. 34 | 6. Use the user's configured `sans` font-variation-settings by default. 35 | */ 36 | 37 | html { 38 | line-height: 1.5; 39 | /* 1 */ 40 | -webkit-text-size-adjust: 100%; 41 | /* 2 */ 42 | -moz-tab-size: 4; 43 | /* 3 */ 44 | -o-tab-size: 4; 45 | tab-size: 4; 46 | /* 3 */ 47 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 48 | /* 4 */ 49 | font-feature-settings: normal; 50 | /* 5 */ 51 | font-variation-settings: normal; 52 | /* 6 */ 53 | } 54 | 55 | /* 56 | 1. Remove the margin in all browsers. 57 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 58 | */ 59 | 60 | body { 61 | margin: 0; 62 | /* 1 */ 63 | line-height: inherit; 64 | /* 2 */ 65 | } 66 | 67 | /* 68 | 1. Add the correct height in Firefox. 69 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 70 | 3. Ensure horizontal rules are visible by default. 71 | */ 72 | 73 | hr { 74 | height: 0; 75 | /* 1 */ 76 | color: inherit; 77 | /* 2 */ 78 | border-top-width: 1px; 79 | /* 3 */ 80 | } 81 | 82 | /* 83 | Add the correct text decoration in Chrome, Edge, and Safari. 84 | */ 85 | 86 | abbr:where([title]) { 87 | -webkit-text-decoration: underline dotted; 88 | text-decoration: underline dotted; 89 | } 90 | 91 | /* 92 | Remove the default font size and weight for headings. 93 | */ 94 | 95 | h1, 96 | h2, 97 | h3, 98 | h4, 99 | h5, 100 | h6 { 101 | font-size: inherit; 102 | font-weight: inherit; 103 | } 104 | 105 | /* 106 | Reset links to optimize for opt-in styling instead of opt-out. 107 | */ 108 | 109 | a { 110 | color: inherit; 111 | text-decoration: inherit; 112 | } 113 | 114 | /* 115 | Add the correct font weight in Edge and Safari. 116 | */ 117 | 118 | b, 119 | strong { 120 | font-weight: bolder; 121 | } 122 | 123 | /* 124 | 1. Use the user's configured `mono` font-family by default. 125 | 2. Use the user's configured `mono` font-feature-settings by default. 126 | 3. Use the user's configured `mono` font-variation-settings by default. 127 | 4. Correct the odd `em` font sizing in all browsers. 128 | */ 129 | 130 | code, 131 | kbd, 132 | samp, 133 | pre { 134 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 135 | /* 1 */ 136 | font-feature-settings: normal; 137 | /* 2 */ 138 | font-variation-settings: normal; 139 | /* 3 */ 140 | font-size: 1em; 141 | /* 4 */ 142 | } 143 | 144 | /* 145 | Add the correct font size in all browsers. 146 | */ 147 | 148 | small { 149 | font-size: 80%; 150 | } 151 | 152 | /* 153 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 154 | */ 155 | 156 | sub, 157 | sup { 158 | font-size: 75%; 159 | line-height: 0; 160 | position: relative; 161 | vertical-align: baseline; 162 | } 163 | 164 | sub { 165 | bottom: -0.25em; 166 | } 167 | 168 | sup { 169 | top: -0.5em; 170 | } 171 | 172 | /* 173 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 174 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 175 | 3. Remove gaps between table borders by default. 176 | */ 177 | 178 | table { 179 | text-indent: 0; 180 | /* 1 */ 181 | border-color: inherit; 182 | /* 2 */ 183 | border-collapse: collapse; 184 | /* 3 */ 185 | } 186 | 187 | /* 188 | 1. Change the font styles in all browsers. 189 | 2. Remove the margin in Firefox and Safari. 190 | 3. Remove default padding in all browsers. 191 | */ 192 | 193 | button, 194 | input, 195 | optgroup, 196 | select, 197 | textarea { 198 | font-family: inherit; 199 | /* 1 */ 200 | font-feature-settings: inherit; 201 | /* 1 */ 202 | font-variation-settings: inherit; 203 | /* 1 */ 204 | font-size: 100%; 205 | /* 1 */ 206 | font-weight: inherit; 207 | /* 1 */ 208 | line-height: inherit; 209 | /* 1 */ 210 | color: inherit; 211 | /* 1 */ 212 | margin: 0; 213 | /* 2 */ 214 | padding: 0; 215 | /* 3 */ 216 | } 217 | 218 | /* 219 | Remove the inheritance of text transform in Edge and Firefox. 220 | */ 221 | 222 | button, 223 | select { 224 | text-transform: none; 225 | } 226 | 227 | /* 228 | 1. Correct the inability to style clickable types in iOS and Safari. 229 | 2. Remove default button styles. 230 | */ 231 | 232 | button, 233 | [type='button'], 234 | [type='reset'], 235 | [type='submit'] { 236 | -webkit-appearance: button; 237 | /* 1 */ 238 | background-color: transparent; 239 | /* 2 */ 240 | background-image: none; 241 | /* 2 */ 242 | } 243 | 244 | /* 245 | Use the modern Firefox focus style for all focusable elements. 246 | */ 247 | 248 | :-moz-focusring { 249 | outline: auto; 250 | } 251 | 252 | /* 253 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 254 | */ 255 | 256 | :-moz-ui-invalid { 257 | box-shadow: none; 258 | } 259 | 260 | /* 261 | Add the correct vertical alignment in Chrome and Firefox. 262 | */ 263 | 264 | progress { 265 | vertical-align: baseline; 266 | } 267 | 268 | /* 269 | Correct the cursor style of increment and decrement buttons in Safari. 270 | */ 271 | 272 | ::-webkit-inner-spin-button, 273 | ::-webkit-outer-spin-button { 274 | height: auto; 275 | } 276 | 277 | /* 278 | 1. Correct the odd appearance in Chrome and Safari. 279 | 2. Correct the outline style in Safari. 280 | */ 281 | 282 | [type='search'] { 283 | -webkit-appearance: textfield; 284 | /* 1 */ 285 | outline-offset: -2px; 286 | /* 2 */ 287 | } 288 | 289 | /* 290 | Remove the inner padding in Chrome and Safari on macOS. 291 | */ 292 | 293 | ::-webkit-search-decoration { 294 | -webkit-appearance: none; 295 | } 296 | 297 | /* 298 | 1. Correct the inability to style clickable types in iOS and Safari. 299 | 2. Change font properties to `inherit` in Safari. 300 | */ 301 | 302 | ::-webkit-file-upload-button { 303 | -webkit-appearance: button; 304 | /* 1 */ 305 | font: inherit; 306 | /* 2 */ 307 | } 308 | 309 | /* 310 | Add the correct display in Chrome and Safari. 311 | */ 312 | 313 | summary { 314 | display: list-item; 315 | } 316 | 317 | /* 318 | Removes the default spacing and border for appropriate elements. 319 | */ 320 | 321 | blockquote, 322 | dl, 323 | dd, 324 | h1, 325 | h2, 326 | h3, 327 | h4, 328 | h5, 329 | h6, 330 | hr, 331 | figure, 332 | p, 333 | pre { 334 | margin: 0; 335 | } 336 | 337 | fieldset { 338 | margin: 0; 339 | padding: 0; 340 | } 341 | 342 | legend { 343 | padding: 0; 344 | } 345 | 346 | ol, 347 | ul, 348 | menu { 349 | list-style: none; 350 | margin: 0; 351 | padding: 0; 352 | } 353 | 354 | /* 355 | Reset default styling for dialogs. 356 | */ 357 | 358 | dialog { 359 | padding: 0; 360 | } 361 | 362 | /* 363 | Prevent resizing textareas horizontally by default. 364 | */ 365 | 366 | textarea { 367 | resize: vertical; 368 | } 369 | 370 | /* 371 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 372 | 2. Set the default placeholder color to the user's configured gray 400 color. 373 | */ 374 | 375 | input::-moz-placeholder, textarea::-moz-placeholder { 376 | opacity: 1; 377 | /* 1 */ 378 | color: #9ca3af; 379 | /* 2 */ 380 | } 381 | 382 | input::placeholder, 383 | textarea::placeholder { 384 | opacity: 1; 385 | /* 1 */ 386 | color: #9ca3af; 387 | /* 2 */ 388 | } 389 | 390 | /* 391 | Set the default cursor for buttons. 392 | */ 393 | 394 | button, 395 | [role="button"] { 396 | cursor: pointer; 397 | } 398 | 399 | /* 400 | Make sure disabled buttons don't get the pointer cursor. 401 | */ 402 | 403 | :disabled { 404 | cursor: default; 405 | } 406 | 407 | /* 408 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 409 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 410 | This can trigger a poorly considered lint error in some tools but is included by design. 411 | */ 412 | 413 | img, 414 | svg, 415 | video, 416 | canvas, 417 | audio, 418 | iframe, 419 | embed, 420 | object { 421 | display: block; 422 | /* 1 */ 423 | vertical-align: middle; 424 | /* 2 */ 425 | } 426 | 427 | /* 428 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 429 | */ 430 | 431 | img, 432 | video { 433 | max-width: 100%; 434 | height: auto; 435 | } 436 | 437 | /* Make elements with the HTML hidden attribute stay hidden by default */ 438 | 439 | [hidden] { 440 | display: none; 441 | } 442 | 443 | *, ::before, ::after { 444 | --tw-border-spacing-x: 0; 445 | --tw-border-spacing-y: 0; 446 | --tw-translate-x: 0; 447 | --tw-translate-y: 0; 448 | --tw-rotate: 0; 449 | --tw-skew-x: 0; 450 | --tw-skew-y: 0; 451 | --tw-scale-x: 1; 452 | --tw-scale-y: 1; 453 | --tw-pan-x: ; 454 | --tw-pan-y: ; 455 | --tw-pinch-zoom: ; 456 | --tw-scroll-snap-strictness: proximity; 457 | --tw-gradient-from-position: ; 458 | --tw-gradient-via-position: ; 459 | --tw-gradient-to-position: ; 460 | --tw-ordinal: ; 461 | --tw-slashed-zero: ; 462 | --tw-numeric-figure: ; 463 | --tw-numeric-spacing: ; 464 | --tw-numeric-fraction: ; 465 | --tw-ring-inset: ; 466 | --tw-ring-offset-width: 0px; 467 | --tw-ring-offset-color: #fff; 468 | --tw-ring-color: rgb(59 130 246 / 0.5); 469 | --tw-ring-offset-shadow: 0 0 #0000; 470 | --tw-ring-shadow: 0 0 #0000; 471 | --tw-shadow: 0 0 #0000; 472 | --tw-shadow-colored: 0 0 #0000; 473 | --tw-blur: ; 474 | --tw-brightness: ; 475 | --tw-contrast: ; 476 | --tw-grayscale: ; 477 | --tw-hue-rotate: ; 478 | --tw-invert: ; 479 | --tw-saturate: ; 480 | --tw-sepia: ; 481 | --tw-drop-shadow: ; 482 | --tw-backdrop-blur: ; 483 | --tw-backdrop-brightness: ; 484 | --tw-backdrop-contrast: ; 485 | --tw-backdrop-grayscale: ; 486 | --tw-backdrop-hue-rotate: ; 487 | --tw-backdrop-invert: ; 488 | --tw-backdrop-opacity: ; 489 | --tw-backdrop-saturate: ; 490 | --tw-backdrop-sepia: ; 491 | } 492 | 493 | ::backdrop { 494 | --tw-border-spacing-x: 0; 495 | --tw-border-spacing-y: 0; 496 | --tw-translate-x: 0; 497 | --tw-translate-y: 0; 498 | --tw-rotate: 0; 499 | --tw-skew-x: 0; 500 | --tw-skew-y: 0; 501 | --tw-scale-x: 1; 502 | --tw-scale-y: 1; 503 | --tw-pan-x: ; 504 | --tw-pan-y: ; 505 | --tw-pinch-zoom: ; 506 | --tw-scroll-snap-strictness: proximity; 507 | --tw-gradient-from-position: ; 508 | --tw-gradient-via-position: ; 509 | --tw-gradient-to-position: ; 510 | --tw-ordinal: ; 511 | --tw-slashed-zero: ; 512 | --tw-numeric-figure: ; 513 | --tw-numeric-spacing: ; 514 | --tw-numeric-fraction: ; 515 | --tw-ring-inset: ; 516 | --tw-ring-offset-width: 0px; 517 | --tw-ring-offset-color: #fff; 518 | --tw-ring-color: rgb(59 130 246 / 0.5); 519 | --tw-ring-offset-shadow: 0 0 #0000; 520 | --tw-ring-shadow: 0 0 #0000; 521 | --tw-shadow: 0 0 #0000; 522 | --tw-shadow-colored: 0 0 #0000; 523 | --tw-blur: ; 524 | --tw-brightness: ; 525 | --tw-contrast: ; 526 | --tw-grayscale: ; 527 | --tw-hue-rotate: ; 528 | --tw-invert: ; 529 | --tw-saturate: ; 530 | --tw-sepia: ; 531 | --tw-drop-shadow: ; 532 | --tw-backdrop-blur: ; 533 | --tw-backdrop-brightness: ; 534 | --tw-backdrop-contrast: ; 535 | --tw-backdrop-grayscale: ; 536 | --tw-backdrop-hue-rotate: ; 537 | --tw-backdrop-invert: ; 538 | --tw-backdrop-opacity: ; 539 | --tw-backdrop-saturate: ; 540 | --tw-backdrop-sepia: ; 541 | } 542 | 543 | .flex { 544 | display: flex; 545 | } 546 | 547 | .h-10 { 548 | height: 2.5rem; 549 | } 550 | 551 | .h-fit { 552 | height: -moz-fit-content; 553 | height: fit-content; 554 | } 555 | 556 | .max-h-\[calc\(100vh-1rem\)\] { 557 | max-height: calc(100vh - 1rem); 558 | } 559 | 560 | .min-h-screen { 561 | min-height: 100vh; 562 | } 563 | 564 | .min-h-\[calc\(100vh-1rem\)\] { 565 | min-height: calc(100vh - 1rem); 566 | } 567 | 568 | .w-full { 569 | width: 100%; 570 | } 571 | 572 | .w-10 { 573 | width: 2.5rem; 574 | } 575 | 576 | .flex-1 { 577 | flex: 1 1 0%; 578 | } 579 | 580 | .resize-none { 581 | resize: none; 582 | } 583 | 584 | .flex-col { 585 | flex-direction: column; 586 | } 587 | 588 | .items-center { 589 | align-items: center; 590 | } 591 | 592 | .justify-start { 593 | justify-content: flex-start; 594 | } 595 | 596 | .justify-end { 597 | justify-content: flex-end; 598 | } 599 | 600 | .justify-between { 601 | justify-content: space-between; 602 | } 603 | 604 | .gap-5 { 605 | gap: 1.25rem; 606 | } 607 | 608 | .gap-4 { 609 | gap: 1rem; 610 | } 611 | 612 | .gap-3 { 613 | gap: 0.75rem; 614 | } 615 | 616 | .gap-2 { 617 | gap: 0.5rem; 618 | } 619 | 620 | .overflow-y-auto { 621 | overflow-y: auto; 622 | } 623 | 624 | .whitespace-pre-wrap { 625 | white-space: pre-wrap; 626 | } 627 | 628 | .rounded-lg { 629 | border-radius: 0.5rem; 630 | } 631 | 632 | .rounded-full { 633 | border-radius: 9999px; 634 | } 635 | 636 | .rounded-md { 637 | border-radius: 0.375rem; 638 | } 639 | 640 | .rounded { 641 | border-radius: 0.25rem; 642 | } 643 | 644 | .bg-gemLight { 645 | --tw-bg-opacity: 1; 646 | background-color: rgb(229 245 224 / var(--tw-bg-opacity)); 647 | } 648 | 649 | .bg-gemRegular { 650 | --tw-bg-opacity: 1; 651 | background-color: rgb(161 217 155 / var(--tw-bg-opacity)); 652 | } 653 | 654 | .bg-gemDeep { 655 | --tw-bg-opacity: 1; 656 | background-color: rgb(49 163 84 / var(--tw-bg-opacity)); 657 | } 658 | 659 | .bg-gemRegular\/40 { 660 | background-color: rgb(161 217 155 / 0.4); 661 | } 662 | 663 | .p-3 { 664 | padding: 0.75rem; 665 | } 666 | 667 | .p-2 { 668 | padding: 0.5rem; 669 | } 670 | 671 | .p-1 { 672 | padding: 0.25rem; 673 | } 674 | 675 | .text-5xl { 676 | font-size: 3rem; 677 | line-height: 1; 678 | } 679 | 680 | .text-lg { 681 | font-size: 1.125rem; 682 | line-height: 1.75rem; 683 | } 684 | 685 | .font-bold { 686 | font-weight: 700; 687 | } 688 | 689 | .font-medium { 690 | font-weight: 500; 691 | } 692 | 693 | .text-blue-600 { 694 | --tw-text-opacity: 1; 695 | color: rgb(37 99 235 / var(--tw-text-opacity)); 696 | } 697 | 698 | .text-gemDeep { 699 | --tw-text-opacity: 1; 700 | color: rgb(49 163 84 / var(--tw-text-opacity)); 701 | } 702 | 703 | .text-white { 704 | --tw-text-opacity: 1; 705 | color: rgb(255 255 255 / var(--tw-text-opacity)); 706 | } 707 | 708 | .shadow-md { 709 | --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); 710 | --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); 711 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 712 | } 713 | 714 | .focus\:outline-none:focus { 715 | outline: 2px solid transparent; 716 | outline-offset: 2px; 717 | } 718 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["*.html"], 4 | theme: { 5 | extend: { 6 | colors: { 7 | gemLight: "#e5f5e0", 8 | gemRegular: "#a1d99b", 9 | gemDeep: "#31a354", 10 | }, 11 | }, 12 | }, 13 | plugins: [], 14 | }; 15 | --------------------------------------------------------------------------------