├── .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 |
21 | Gemini Chatbot
22 |
23 |
24 |
28 |
29 |
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 |

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 |

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 |
--------------------------------------------------------------------------------