adowu commited on
Commit
08544af
·
verified ·
1 Parent(s): 2752102

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +1467 -0
app.py CHANGED
@@ -1,3 +1,1470 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  def get_file_content(owner, repo_name, path, branch="main"):
2
  """Fetches file content from a GitHub repository."""
3
  url = f"https://raw.githubusercontent.com/{owner}/{repo_name}/{branch}/{path}"
 
1
+ import gradio as gr
2
+ from github import Github, GithubException
3
+ import os
4
+ import requests
5
+ import re
6
+ from collections import Counter
7
+ import jinja2
8
+ from diff_match_patch import diff_match_patch # Import diff-match-patch library
9
+
10
+ # Load token. Best practice is to use environment variables.
11
+ GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
12
+ if not GITHUB_TOKEN:
13
+ raise ValueError("GITHUB_TOKEN environment variable not set!")
14
+ g = Github(GITHUB_TOKEN)
15
+
16
+ # Project templates (parameterized with Jinja2).
17
+ PROJECT_TEMPLATES = {
18
+ "flask": {
19
+ "params": {
20
+ "database_type": {
21
+ "type": "choice",
22
+ "default": "sqlite",
23
+ "choices": ["sqlite", "postgresql", "mysql"],
24
+ "description": "Type of database to configure for the Flask app."
25
+ }
26
+ },
27
+ "files": {
28
+ "app.py": """from flask import Flask
29
+ from flask_sqlalchemy import SQLAlchemy
30
+ import os
31
+
32
+ basedir = os.path.abspath(os.path.dirname(__file__))
33
+
34
+ app = Flask(__name__)
35
+ app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DATABASE_URL') or \\
36
+ '{{database_uri}}' # Placeholder for database URI
37
+ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
38
+
39
+ db = SQLAlchemy(app)
40
+
41
+ class HelloWorld(db.Model):
42
+ id = db.Column(db.Integer, primary_key=True)
43
+ message = db.Column(db.String(128))
44
+
45
+ def __repr__(self):
46
+ return f'<HelloWorld {self.message}>'
47
+
48
+ @app.route('/')
49
+ def hello():
50
+ return "Hello, Flask!"
51
+
52
+ @app.route('/db_test')
53
+ def db_test():
54
+ try:
55
+ HelloWorld.query.first() # Simple DB query to test connection
56
+ return "Database connection successful!"
57
+ except Exception as e:
58
+ return f"Database connection failed: {e}"
59
+
60
+
61
+ if __name__ == '__main__':
62
+ with app.app_context(): # Create application context for DB operations
63
+ db.create_all()
64
+ if not HelloWorld.query.first(): # Initialize DB with a default entry if empty
65
+ default_hello = HelloWorld(message="Hello, Database!")
66
+ db.session.add(default_hello)
67
+ db.session.commit()
68
+ app.run(debug=True)""",
69
+ "requirements.txt": """Flask
70
+ Flask-SQLAlchemy
71
+ {{sqlalchemy_dependency}} # Placeholder for SQLAlchemy dependency""",
72
+ ".gitignore": "__pycache__/\n*.pyc\nvenv/\ninstance/\n*.db"
73
+ },
74
+ "post_process": "install_dependencies"
75
+ },
76
+ "react": {
77
+ "files": {
78
+ "package.json": """{
79
+ "name": "react-app",
80
+ "private": true,
81
+ "version": "0.0.0",
82
+ "type": "module",
83
+ "scripts": {
84
+ "dev": "vite",
85
+ "build": "vite build",
86
+ "preview": "vite preview"
87
+ },
88
+ "dependencies": {
89
+ "react": "^18.2.0",
90
+ "react-dom": "^18.2.0"
91
+ },
92
+ "devDependencies": {
93
+ "@vitejs/plugin-react": "^4.2.1",
94
+ "vite": "^5.0.8"
95
+ }}""",
96
+ "vite.config.js": """import { defineConfig } from 'vite'
97
+ import react from '@vitejs/plugin-react'
98
+ # https://vitejs.dev/config/
99
+ export default defineConfig({
100
+ plugins: [react()],
101
+ })""",
102
+ "index.html": """<!doctype html>
103
+ <html lang="en">
104
+ <head>
105
+ <meta charset="UTF-8" />
106
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
107
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
108
+ <title>Vite + React</title>
109
+ </head>
110
+ <body>
111
+ <div id="root"></div>
112
+ <script type="module" src="/src/main.jsx"></script>
113
+ </body>
114
+ </html>""",
115
+ "src/main.jsx": """import React from 'react'
116
+ import ReactDOM from 'react-dom/client'
117
+ import App from './App.jsx'
118
+ import './index.css'
119
+ ReactDOM.createRoot(document.getElementById('root')).render(
120
+ <React.StrictMode>
121
+ <App />
122
+ </React.StrictMode>,
123
+ )""",
124
+ "src/App.jsx": """import React from 'react'
125
+ import './App.css'
126
+ function App() {
127
+ return (
128
+ <>
129
+ <h1>Hello from React!</h1>
130
+ </>
131
+ )
132
+ }
133
+ export default App""",
134
+ "src/index.css": """body {
135
+ margin: 0;
136
+ font-family: sans-serif;
137
+ -webkit-font-smoothing: antialiased;
138
+ -moz-osx-font-smoothing: grayscale;
139
+ }
140
+ code {
141
+ font-family: monospace;
142
+ }""",
143
+ ".gitignore": "node_modules/\ndist/"
144
+ }
145
+ },
146
+ "django": {
147
+ "files": {
148
+ "manage.py": """#!/usr/bin/env python
149
+ import os
150
+ import sys
151
+
152
+ if __name__ == "__main__":
153
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
154
+ try:
155
+ from django.core.management import execute_from_command_line
156
+ except ImportError as exc:
157
+ raise ImportError(
158
+ "Couldn't import Django. Are you sure it is installed and "
159
+ "available on your PYTHONPATH environment variable? Did you "
160
+ "forget to activate a virtual environment?"
161
+ ) from exc
162
+ execute_from_command_line(sys.argv)""",
163
+ "myapp/settings.py": """import os
164
+ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
165
+ SECRET_KEY = 'your_secret_key_here'
166
+ DEBUG = True
167
+ ALLOWED_HOSTS = []
168
+ INSTALLED_APPS = [
169
+ 'django.contrib.admin',
170
+ 'django.contrib.auth',
171
+ 'django.contrib.contenttypes',
172
+ 'django.contrib.sessions',
173
+ 'django.contrib.messages',
174
+ 'django.contrib.staticfiles',
175
+ ]
176
+ MIDDLEWARE = [
177
+ 'django.middleware.security.SecurityMiddleware',
178
+ 'django.contrib.sessions.middleware.SessionMiddleware',
179
+ 'django.middleware.common.CommonMiddleware',
180
+ 'django.middleware.csrf.CsrfViewMiddleware',
181
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
182
+ 'django.contrib.messages.middleware.MessageMiddleware',
183
+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
184
+ ]
185
+ ROOT_URLCONF = 'myapp.urls'
186
+ TEMPLATES = [
187
+ {
188
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
189
+ 'DIRS': [],
190
+ 'APP_DIRS': True,
191
+ 'OPTIONS': {
192
+ 'context_processors': [
193
+ 'django.template.context_processors.debug',
194
+ 'django.template.context_processors.request',
195
+ 'django.contrib.auth.context_processors.auth',
196
+ 'django.contrib.messages.context_processors.messages',
197
+ ],
198
+ },
199
+ },
200
+ ]
201
+ WSGI_APPLICATION = 'myapp.wsgi.application'
202
+ DATABASES = {
203
+ 'default': {
204
+ 'ENGINE': 'django.db.backends.sqlite3',
205
+ 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
206
+ }
207
+ }
208
+ AUTH_PASSWORD_VALIDATORS = [
209
+ {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},
210
+ {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},
211
+ {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},
212
+ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
213
+ ]
214
+ LANGUAGE_CODE = 'en-us'
215
+ TIME_ZONE = 'UTC'
216
+ USE_I18N = True
217
+ USE_L10N = True
218
+ USE_TZ = True
219
+ STATIC_URL = '/static/'
220
+ """,
221
+ "myapp/urls.py": """from django.contrib import admin
222
+ from django.urls import path
223
+ from django.http import HttpResponse
224
+
225
+ def home(request):
226
+ return HttpResponse("Hello, Django!")
227
+
228
+ urlpatterns = [
229
+ path('admin/', admin.site.urls),
230
+ path('', home, name='home'),
231
+ ]""",
232
+ "myapp/wsgi.py": """import os
233
+ from django.core.wsgi import get_wsgi_application
234
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
235
+ application = get_wsgi_application()""",
236
+ "requirements.txt": "Django",
237
+ ".gitignore": "__pycache__/\n*.pyc\nvenv/\ndb.sqlite3\n",
238
+ },
239
+ "rename_files": {"myapp": "{{repo_name_snake_case}}"}
240
+ },
241
+ "nodejs_express": {
242
+ "files": {
243
+ "server.js": """const express = require('express')
244
+ const app = express()
245
+ const port = 3000
246
+
247
+ app.get('/', (req, res) => {
248
+ res.send('Hello World from Express!')
249
+ })
250
+
251
+ app.listen(port, () => {
252
+ console.log(`Server listening on port ${port}`)
253
+ })""",
254
+ "package.json": """{
255
+ "name": "express-app",
256
+ "version": "1.0.0",
257
+ "description": "",
258
+ "main": "server.js",
259
+ "scripts": {
260
+ "start": "node server.js"
261
+ },
262
+ "dependencies": {
263
+ "express": "^4.17.1"
264
+ }
265
+ }""",
266
+ ".gitignore": "node_modules/\n"
267
+ }
268
+ },
269
+ "static_website": {
270
+ "files": {
271
+ "index.html": """<!DOCTYPE html>
272
+ <html>
273
+ <head>
274
+ <title>Simple Static Website</title>
275
+ </head>
276
+ <body>
277
+ <h1>Hello from Static Website!</h1>
278
+ <p>This is a basic HTML page.</p>
279
+ </body>
280
+ </html>""",
281
+ "style.css": """body {
282
+ font-family: sans-serif;
283
+ margin: 20px;
284
+ }""",
285
+ "script.js": """console.log("Hello from JavaScript!");""",
286
+ ".gitignore": ""
287
+ }
288
+ },
289
+ "python_script": {
290
+ "files": {
291
+ "main.py": """def main():
292
+ print("Hello from Python script!")
293
+
294
+ if __name__ == "__main__":
295
+ main()""",
296
+ "requirements.txt": "",
297
+ ".gitignore": "__pycache__/\n*.pyc\nvenv/\n"
298
+ }
299
+ },
300
+ "empty": {
301
+ "files": {
302
+ "README.md": "# {{repo_name}}",
303
+ ".gitignore": ""
304
+ },
305
+ "rename_files": {"README.md": "{{readme_filename}}"}
306
+ },
307
+ "shadcn": {
308
+ "files": {
309
+ "package.json": """{
310
+ "name": "shadcn-react-app",
311
+ "private": true,
312
+ "version": "0.0.0",
313
+ "type": "module",
314
+ "scripts": {
315
+ "dev": "vite",
316
+ "build": "vite build",
317
+ "preview": "vite preview",
318
+ "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0",
319
+ "preview": "vite preview"
320
+ },
321
+ "dependencies": {
322
+ "@radix-ui/react-slot": "^1.0.2",
323
+ "class-variance-authority": "^0.7.0",
324
+ "clsx": "^2.1.0",
325
+ "lucide-react": "^0.303.0",
326
+ "react": "^18.2.0",
327
+ "react-dom": "^18.2.0",
328
+ "tailwind-merge": "^2.2.0",
329
+ "tailwindcss-animate": "^1.0.7"
330
+ },
331
+ "devDependencies": {
332
+ "@vitejs/plugin-react": "^4.2.1",
333
+ "autoprefixer": "^10.4.16",
334
+ "eslint": "^8.55.0",
335
+ "eslint-plugin-react": "^7.33.2",
336
+ "eslint-plugin-react-hooks": "^4.6.0",
337
+ "eslint-plugin-react-refresh": "^0.4.5",
338
+ "postcss": "^8.4.33",
339
+ "tailwindcss": "^3.4.1",
340
+ "vite": "^5.0.8"
341
+ }
342
+ }""",
343
+ "vite.config.js": """import { defineConfig } from 'vite'
344
+ import react from '@vitejs/plugin-react'
345
+
346
+ // https://vitejs.dev/config/
347
+ export default defineConfig({
348
+ plugins: [react()],
349
+ })""",
350
+ "index.html": """<!doctype html>
351
+ <html lang="en">
352
+ <head>
353
+ <meta charset="UTF-8" />
354
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
355
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
356
+ <title>Vite + React + Shadcn</title>
357
+ </head>
358
+ <body class="bg-background">
359
+ <div id="root"></div>
360
+ <script type="module" src="/src/main.jsx"></script>
361
+ </body>
362
+ </html>""",
363
+ "src/main.jsx": """import React from 'react'
364
+ import ReactDOM from 'react-dom/client'
365
+ import App from './App.jsx'
366
+ import './index.css'
367
+
368
+ ReactDOM.createRoot(document.getElementById('root')).render(
369
+ <React.StrictMode>
370
+ <App />
371
+ </React.StrictMode>,
372
+ )""",
373
+ "src/App.jsx": """import React from 'react'
374
+ import { Button } from "./components/ui/button"
375
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "./components/ui/card"
376
+
377
+
378
+ function App() {
379
+ return (
380
+ <div className="container mx-auto py-10">
381
+ <h1 className="text-3xl font-bold text-center mb-5">
382
+ Witaj w aplikacji Shadcn UI!
383
+ </h1>
384
+
385
+ <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
386
+ <Card>
387
+ <CardHeader>
388
+ <CardTitle>Karta 1</CardTitle>
389
+ <CardDescription>Prosta karta z Shadcn UI.</CardDescription>
390
+ </CardHeader>
391
+ <CardContent>
392
+ <p>Zawartość karty.</p>
393
+ <Button className="mt-4">Przycisk Akcji</Button>
394
+ </CardContent>
395
+ </Card>
396
+
397
+ <Card>
398
+ <CardHeader>
399
+ <CardTitle>Karta 2</CardTitle>
400
+ <CardDescription>Kolejna karta dla przykładu.</CardDescription>
401
+ </CardHeader>
402
+ <CardContent>
403
+ <p>Więcej zawartości.</p>
404
+ <Button variant="secondary" className="mt-4">Przycisk Wtórny</Button>
405
+ </CardContent>
406
+ </Card>
407
+
408
+ <Card className="lg:col-span-1 md:col-span-2">
409
+ <CardHeader>
410
+ <CardTitle>Dłuższa Karta</CardTitle>
411
+ <CardDescription>Karta zajmująca więcej miejsca.</CardDescription>
412
+ </CardHeader>
413
+ <CardContent>
414
+ <p>
415
+ Ta karta demonstruje jak karty mogą dostosowywać się do różnych
416
+ rozmiarów ekranów i układów. Shadcn UI i Tailwind CSS
417
+ dają dużą elastyczność w projektowaniu interfejsów.
418
+ </p>
419
+ <Button variant="destructive" className="mt-4">Przycisk Destrukcyjny</Button>
420
+ </CardContent>
421
+ </Card>
422
+ </div>
423
+ </div>
424
+ )
425
+ }
426
+
427
+ export default App""",
428
+ "src/index.css": """@tailwind base;
429
+ @tailwind components;
430
+ @tailwind utilities;
431
+
432
+ @layer base {
433
+ :root {
434
+ --background: 0 0% 100%;
435
+ --foreground: 222.2 84.9% 4.9%;
436
+
437
+ --card: 0 0% 100%;
438
+ --card-foreground: 222.2 84.9% 4.9%;
439
+
440
+ --popover: 0 0% 100%;
441
+ --popover-foreground: 222.2 84.9% 4.9%;
442
+
443
+ --primary: 221.2 83.2% 53.3%;
444
+ --primary-foreground: 210 40% 98%;
445
+
446
+ --secondary: 210 40% 96.1%;
447
+ --secondary-foreground: 222.2 47.4% 11.2%;
448
+
449
+ --muted: 210 40% 96.1%;
450
+ --muted-foreground: 215.4 16.3% 46.9%;
451
+
452
+ --accent: 210 40% 96.1%;
453
+ --accent-foreground: 222.2 47.4% 11.2%;
454
+
455
+ --destructive: 0 84.2% 60.2%;
456
+ --destructive-foreground: 210 40% 98%;
457
+
458
+ --border: 214.3 31.8% 91.4%;
459
+ --input: 214.3 31.8% 91.4%;
460
+ --ring: 221.2 83.2% 53.3%;
461
+
462
+ --radius: 0.5rem;
463
+ }
464
+
465
+ .dark {
466
+ --background: 222.2 84.9% 4.9%;
467
+ --foreground: 210 40% 98%;
468
+
469
+ --card: 222.2 84.9% 4.9%;
470
+ --card-foreground: 210 40% 98%;
471
+
472
+ --popover: 222.2 84.9% 4.9%;
473
+ --popover-foreground: 210 40% 98%;
474
+
475
+ --primary: 217.2 91.2% 59.8%;
476
+ --primary-foreground: 222.2 47.4% 11.2%;
477
+
478
+ --secondary: 217.2 32.6% 17.5%;
479
+ --secondary-foreground: 210 40% 98%;
480
+
481
+ --muted: 217.2 32.6% 17.5%;
482
+ --muted-foreground: 215 20.2% 65.1%;
483
+
484
+ --accent: 217.2 32.6% 17.5%;
485
+ --accent-foreground: 210 40% 98%;
486
+
487
+ --destructive: 0 62.8% 30.6%;
488
+ --destructive-foreground: 210 40% 98%;
489
+
490
+ --border: 217.2 32.6% 17.5%;
491
+ --input: 217.2 32.6% 17.5%;
492
+ --ring: 224.9 98.6% 67.3%;
493
+ }
494
+ }
495
+
496
+ @layer components {
497
+ .container {
498
+ @apply max-w-7xl mx-auto px-4 sm:px-6 lg:px-8;
499
+ }
500
+ }
501
+ """,
502
+ "postcss.config.js": """module.exports = {
503
+ plugins: {
504
+ tailwindcss: {},
505
+ autoprefixer: {},
506
+ },
507
+ }""",
508
+ "tailwind.config.js": """/** @type {import('tailwindcss').Config} */
509
+ module.exports = {
510
+ darkMode: ["class"],
511
+ content: [
512
+ './pages/**/*.{js,jsx}',
513
+ './components/**/*.{js,jsx}',
514
+ './app/**/*.{js,jsx}',
515
+ './src/**/*.{js,jsx}',
516
+ ],
517
+ prefix: "",
518
+ theme: {
519
+ container: {
520
+ center: true,
521
+ padding: "2rem",
522
+ screens: {
523
+ "2xl": "1400px",
524
+ },
525
+ },
526
+ extend: {
527
+ colors: {
528
+ border: "hsl(var(--border))",
529
+ input: "hsl(var(--input))",
530
+ ring: "hsl(var(--ring))",
531
+ background: "hsl(var(--background))",
532
+ foreground: "hsl(var(--foreground))",
533
+ primary: {
534
+ DEFAULT: "hsl(var(--primary))",
535
+ foreground: "hsl(var(--primary-foreground))",
536
+ },
537
+ secondary: {
538
+ DEFAULT: "hsl(var(--secondary))",
539
+ foreground: "hsl(var(--secondary-foreground))",
540
+ },
541
+ destructive: {
542
+ DEFAULT: "hsl(var(--destructive))",
543
+ foreground: "hsl(var(--destructive-foreground))",
544
+ },
545
+ muted: {
546
+ DEFAULT: "hsl(var(--muted))",
547
+ foreground: "hsl(var(--muted-foreground))",
548
+ },
549
+ accent: {
550
+ DEFAULT: "hsl(var(--accent))",
551
+ foreground: "hsl(var(--accent-foreground))",
552
+ },
553
+ popover: {
554
+ DEFAULT: "hsl(var(--popover))",
555
+ foreground: "hsl(var(--popover-foreground))",
556
+ },
557
+ card: {
558
+ DEFAULT: "hsl(var(--card))",
559
+ foreground: "hsl(var(--card-foreground))",
560
+ },
561
+ },
562
+ borderRadius: {
563
+ lg: "var(--radius)",
564
+ md: "calc(var(--radius) - 2px)",
565
+ sm: "calc(var(--radius) - 4px)",
566
+ },
567
+ keyframes: {
568
+ "accordion-down": {
569
+ from: { height: "0" },
570
+ to: { height: "var(--radix-accordion-content-height)" },
571
+ },
572
+ "accordion-up": {
573
+ from: { height: "var(--radix-accordion-content-height)" },
574
+ to: { height: "0" },
575
+ },
576
+ },
577
+ animation: {
578
+ "accordion-down": "accordion-down 0.2s ease-out",
579
+ "accordion-up": "accordion-up 0.2s ease-out",
580
+ },
581
+ },
582
+ },
583
+ plugins: [require("tailwindcss-animate")],
584
+ }""",
585
+ "src/components/ui/button.jsx": """import * as React from "react"
586
+ import { cn } from "@/lib/utils"
587
+ import { Slot } from "@radix-ui/react-slot"
588
+ import { cva } from "class-variance-authority";
589
+
590
+ const buttonVariants = cva(
591
+ "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
592
+ {
593
+ variants: {
594
+ variant: {
595
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
596
+ destructive:
597
+ "bg-destructive text-destructive-foreground hover:bg-destructive/90",
598
+ outline:
599
+ "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
600
+ secondary:
601
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
602
+ ghost: "hover:bg-accent hover:text-accent-foreground",
603
+ link: "underline-offset-4 hover:underline text-primary",
604
+ },
605
+ size: {
606
+ default: "h-10 px-4 py-2",
607
+ sm: "h-9 rounded-md px-3",
608
+ lg: "h-11 rounded-md px-8",
609
+ icon: "h-10 w-10",
610
+ },
611
+ },
612
+ defaultVariants: {
613
+ variant: "default",
614
+ size: "default",
615
+ },
616
+ }
617
+ )
618
+
619
+ const Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {
620
+ const Comp = asChild ? Slot : "button"
621
+ return (<Comp
622
+ className={cn(buttonVariants({ variant, size, className }))}
623
+ ref={ref} {...props} />)
624
+ })
625
+ Button.displayName = "Button"
626
+
627
+ export { Button, buttonVariants }""",
628
+ "src/components/ui/card.jsx": """import * as React from "react"
629
+ import { cn } from "@/lib/utils"
630
+
631
+ const Card = React.forwardRef(({ className, ...props }, ref) => (<div
632
+ className={cn("rounded-lg border bg-card text-card-foreground shadow-sm", className)}
633
+ ref={ref}
634
+ {...props} />))
635
+ Card.displayName = "Card"
636
+
637
+ const CardHeader = React.forwardRef(({ className, ...props }, ref) => (<div
638
+ className={cn("flex flex-col space-y-1.5 p-6", className)}
639
+ ref={ref}
640
+ {...props} />))
641
+ CardHeader.displayName = "CardHeader"
642
+
643
+ const CardTitle = React.forwardRef(({ className, ...props }, ref) => (<h3
644
+ className={cn("text-lg font-semibold leading-none tracking-tight", className)}
645
+ ref={ref}
646
+ {...props} />))
647
+ CardTitle.displayName = "CardTitle"
648
+
649
+ const CardDescription = React.forwardRef(({ className, ...props }, ref) => (<p
650
+ className={cn("text-sm text-muted-foreground", className)}
651
+ ref={ref}
652
+ {...props} />))
653
+ CardDescription.displayName = "CardDescription"
654
+
655
+ const CardContent = React.forwardRef(({ className, ...props }, ref) => (<div
656
+ className={cn("p-6 pt-0", className)}
657
+ ref={ref}
658
+ {...props} />))
659
+ CardContent.displayName = "CardContent"
660
+
661
+ const CardFooter = React.forwardRef(({ className, ...props }, ref) => (<div
662
+ className={cn("flex items-center p-6 pt-0", className)}
663
+ ref={ref}
664
+ {...props} />))
665
+ CardFooter.displayName = "CardFooter"
666
+
667
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }""",
668
+ "src/lib/utils.js": """import { clsx } from "clsx"
669
+ import { twMerge } from "tailwind-merge"
670
+
671
+ export function cn(...inputs) {
672
+ return twMerge(clsx(inputs))
673
+ }"""
674
+ },
675
+ "post_process": "shadcn_setup"
676
+ },
677
+ "nextjs": {
678
+ "files": {
679
+ "package.json": """{
680
+ "name": "nextjs-app",
681
+ "version": "0.1.0",
682
+ "private": true,
683
+ "scripts": {
684
+ "dev": "next dev",
685
+ "build": "next build",
686
+ "start": "next start",
687
+ "lint": "next lint"
688
+ },
689
+ "dependencies": {
690
+ "@types/node": "20.8.9",
691
+ "@types/react": "18.2.33",
692
+ "@types/react-dom": "18.2.14",
693
+ "eslint": "8.52.0",
694
+ "eslint-config-next": "14.0.0",
695
+ "next": "14.0.0",
696
+ "react": "18.2.0",
697
+ "react-dom": "18.2.0",
698
+ "typescript": "5.2.2"
699
+ }
700
+ }""",
701
+ "next.config.js": """/** @type {import('next').NextConfig} */
702
+ const nextConfig = {
703
+ reactStrictMode: true,
704
+ }
705
+
706
+ module.exports = nextConfig""",
707
+ "pages/index.js": """import Head from 'next/head'
708
+ import styles from '../styles/Home.module.css'
709
+
710
+ export default function Home() {
711
+ return (
712
+ <div className={styles.container}>
713
+ <Head>
714
+ <title>Create Next App</title>
715
+ <link rel="icon" href="/favicon.ico" />
716
+ </Head>
717
+
718
+ <main className={styles.main}>
719
+ <h1 className={styles.title}>
720
+ Welcome to <a href="https://nextjs.org">Next.js!</a>
721
+ </h1>
722
+
723
+ <p className={styles.description}>
724
+ Get started by editing{' '}
725
+ <code className={styles.code}>pages/index.js</code>
726
+ </p>
727
+ </main>
728
+
729
+ <footer className={styles.footer}>
730
+ <a
731
+ href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
732
+ target="_blank"
733
+ rel="noopener noreferrer"
734
+ >
735
+ Powered by{' '}
736
+ <img src="/vercel.svg" alt="Vercel Logo" className={styles.logo} />
737
+ </a>
738
+ </footer>
739
+ </div>
740
+ )
741
+ }""",
742
+ "styles/Home.module.css": """.container {
743
+ min-height: 100vh;
744
+ padding: 0 0.5rem;
745
+ display: flex;
746
+ flex-direction: column;
747
+ justify-content: center;
748
+ align-items: center;
749
+ height: 100vh;
750
+ }
751
+
752
+ .main {
753
+ padding: 5rem 0;
754
+ flex: 1;
755
+ display: flex;
756
+ flex-direction: column;
757
+ justify-content: center;
758
+ align-items: center;
759
+ }
760
+
761
+ .footer {
762
+ width: 100%;
763
+ height: 100px;
764
+ border-top: 1px solid #eaeaea;
765
+ display: flex;
766
+ justify-content: center;
767
+ align-items: center;
768
+ }
769
+
770
+ .footer img {
771
+ margin-left: 0.5rem;
772
+ }
773
+
774
+ .footer a {
775
+ display: flex;
776
+ justify-content: center;
777
+ align-items: center;
778
+ }
779
+
780
+ .title a {
781
+ color: #0070f3;
782
+ text-decoration: none;
783
+ }
784
+
785
+ .title a:hover,
786
+ .title a:focus,
787
+ .title a:active {
788
+ text-decoration: underline;
789
+ }
790
+
791
+ .title {
792
+ margin: 0;
793
+ line-height: 1.15;
794
+ font-size: 4rem;
795
+ }
796
+
797
+ .title,
798
+ .description {
799
+ text-align: center;
800
+ }
801
+
802
+ .description {
803
+ line-height: 1.5;
804
+ font-size: 1.5rem;
805
+ }
806
+
807
+ .code {
808
+ background: #fafafa;
809
+ border-radius: 5px;
810
+ padding: 0.75rem;
811
+ font-size: 1.1rem;
812
+ font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
813
+ Bitstream Vera Sans Mono, Courier New, monospace;
814
+ }
815
+
816
+ .logo {
817
+ height: 1em;
818
+ margin-left: 0.5rem;
819
+ }
820
+
821
+ @media (max-width: 600px) {
822
+ .grid {
823
+ width: 100%;
824
+ flex-direction: column;
825
+ }
826
+ }""",
827
+ "pages/_app.js": """import '../styles/globals.css'
828
+
829
+ function MyApp({ Component, pageProps }) {
830
+ return <Component {...pageProps} />
831
+ }
832
+
833
+ export default MyApp""",
834
+ "pages/api/hello.js": """// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
835
+
836
+ export default function handler(req, res) {
837
+ res.status(200).json({ text: 'Hello' })
838
+ }""",
839
+ "package-lock.json": """{
840
+ "name": "nextjs-app",
841
+ "version": "0.1.0",
842
+ "lockfileVersion": 2,
843
+ "requires": true,
844
+ "packages": {
845
+ "": {
846
+ "name": "nextjs-app",
847
+ "version": "0.1.0",
848
+ "private": true,
849
+ "dependencies": {
850
+ "@types/node": "20.8.9",
851
+ "@types/react": "18.2.33",
852
+ "@types/react-dom": "18.2.14",
853
+ "eslint": "8.52.0",
854
+ "eslint-config-next": "14.0.0",
855
+ "next": "14.0.0",
856
+ "react": "18.2.0",
857
+ "react-dom": "18.2.0",
858
+ "typescript": "5.2.2"
859
+ }
860
+ },
861
+ "node_modules/@babel/code-frame": {
862
+ "version": "7.23.5",
863
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
864
+ "integrity": "sha512-r1oVmeW/e7g6p+QTbdRtq8f75j4/nGpQp5iY5g5UqXkGgQ9PqeYwXw9wQ6OAy0iK+h7+hLihsIEQdGkGdtq/hA==",
865
+ "dependencies": {
866
+ "@babel/highlight": "^7.22.16"
867
+ },
868
+ "engines": {
869
+ "node": ">=6.9.0"
870
+ }
871
+ },
872
+ "node_modules/@babel/highlight": {
873
+ "version": "7.23.4",
874
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
875
+ "integrity": "sha512-d8o/0zO67QWBGq8E1H/j1R76qY2l039Zp+QZtGvC5P1r6vI1Qd1b0WJqH1R7vE+uGz+Y37R8oQO3jR2+hQY8Pw==",
876
+ "dependencies": {
877
+ "chalk": "^2.0.0",
878
+ "esutils": "^2.0.0"
879
+ },
880
+ "engines": {
881
+ "node": ">=6.9.0"
882
+ }
883
+ },
884
+ "node_modules/@cnakazawa/describe-type": {
885
+ "version": "2.1.1",
886
+ "resolved": "https://registry.npmjs.org/@cnakazawa/describe-type/-/describe-type-2.1.1.tgz",
887
+ "integrity": "sha512-BGuJoSF3yP6wklQ6oEZe5gOOjLzS0RrjL819cEJjD9vVq/3s6y0+pD2v1fEw0yG2y/jB/aK+ZJs6oT8m0v410A=="
888
+ },
889
+ "node_modules/@eslint/eslintrc": {
890
+ "version": "2.1.1",
891
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz",
892
+ "integrity": "sha512-f32gqZgmXfG56Q1K6pT0F9mzlxK9+l/5/f07yP15fL96ZkK/35kKsvP8zE0pT9L6h3rR1+7J+5B2Y/0tFpLSA==",
893
+ "dependencies": {
894
+ "ajv": "^6.12.2",
895
+ "chalk": "^2.0.0",
896
+ "functional-red-black-tree": "^1.0.1",
897
+ "ignore": "^5.1.7",
898
+ "import-fresh": "^3.2.1",
899
+ "js-yaml": "^3.13.1",
900
+ "json-stable-stringify-without-jsonify": "^1.0.3",
901
+ "semver": "^6.3.0",
902
+ "strip-json-comments": "^3.1.1"
903
+ },
904
+ "engines": {
905
+ "node": "^10.0.0 || >= 12.0.0"
906
+ }
907
+ },
908
+ "node_modules/@eslint/js": {
909
+ "version": "8.52.0",
910
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
911
+ "integrity": "sha512-Z4w6iIavx9rO2fD4m1V37mP8tD/7ESyS+3E6a76F/g1T/ZlQ9X5d15uV4bF14Zg+s6Z2b3/vP6nUq1jG521Q==",
912
+ "engines": {
913
+ "node": "^10.0.0 || >= 12.0.0"
914
+ }
915
+ },
916
+ "node_modules/@humanwhocodes/config-array": {
917
+ "version": "0.11.12",
918
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz",
919
+ "integrity": "sha512-h6L7vJb0b81Vq+oWnKk8g+tJ/p23f1xNqJ3uIq81e0b/4P5lXgRkh7a/ZkI1fA0tE0jV5vWkI0aX+X6J3w3Q==",
920
+ "dependencies": {
921
+ "@humanwhocodes/object-schema": "^1.2.1",
922
+ "debug": "^4.3.4",
923
+ "semver": "^7.5.4"
924
+ },
925
+ "engines": {
926
+ "node": ">=14.18.0"
927
+ }
928
+ },
929
+ "node_modules/@humanwhocodes/object-schema": {
930
+ "version": "1.2.1",
931
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
932
+ "integrity": "sha512-qH5JoF9k2b+gnhn3JRRm6ZztkqfK4KlaaGdY514GPo/s5Pq7u0bFjQ0m0R7oeqt5RbUo8GwtJp8zv71wP46Q/w==",
933
+ "engines": {
934
+ "node": ">=12"
935
+ }
936
+ },
937
+ "node_modules/@jest/types": {
938
+ "version": "29.6.3",
939
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
940
+ "integrity": "sha512-Y3xw0j2bOFd+Uru+a0j1G5eHji/VvbDVO5Wp6Y759w5i00Km9tLmYmh/x9y2T5C83+R7Hv4lwaB+zMZxV2u5ng==",
941
+ "dependencies": {
942
+ "@types/jest": "*",
943
+ "@types/node": "*",
944
+ "expect-type": "0.8.1"
945
+ }
946
+ },
947
+ "node_modules/@next/env": {
948
+ "version": "14.0.0",
949
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.0.tgz",
950
+ "integrity": "sha512-b+l0G7a0PqgY503cQp2L9e+7/Yc/1qG6f9+8R8b91/H0iO6819h5h32R6p5rQ5G6oPZfG3L7I6hS5Uu3gB0w=="
951
+ },
952
+ "node_modules/@npmcli/ci-detect": {
953
+ "version": "2.0.1",
954
+ "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-2.0.1.tgz",
955
+ "integrity": "sha512-71m408b6fE5K0o5Pz5o+l05P6M9mE0K9qR20yC78HnUj3+yQ7/Iq+6K90/O11kF+fD/6T2VvN6h+x72p7pA=="
956
+ },
957
+ "node_modules/@radix-ui/react-slot": {
958
+ "version": "1.0.2",
959
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
960
+ "integrity": "sha512-d85qs4gTpz3nC1eo7LqE8ELGj3H+KzUkg85bS35P2pBcM1v/uD5dxtiYQ+75u/6Gqg2yK6o530g84e0Y8/d/dQ=="
961
+ },
962
+ "node_modules/@radix-ui/slot": {
963
+ "version": "1.0.2",
964
+ "resolved": "https://registry.npmjs.org/@radix-ui/slot/-/slot-1.0.2.tgz",
965
+ "integrity": "sha512-EHyBw+h8nB4kE5l0Gj+sQj9i3yL4vL8z984h49805H01G5iFk+fL8y6E2z9l7t805z57h0t4b6lqR20x5iYrw==",
966
+ "peerDependencies": {
967
+ "react": "*"
968
+ }
969
+ },
970
+ "node_modules/@rollup/plugin-commonjs": {
971
+ "version": "25.0.7",
972
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz",
973
+ "integrity": "sha512-S60w7v72h0sF9lRz39z/p2Uo8P3fP3T4oH5xG5Jk+y1Uf+n+q5079F0Fm4w4g9Y80X/z0x72H8a69Fk+6Wbng==",
974
+ "peerDependencies": {
975
+ "rollup": "^1.20.0||^2||^3"
976
+ },
977
+ "peerDependenciesMeta": {
978
+ "rollup": {
979
+ "optional": true
980
+ }
981
+ }
982
+ },
983
+ "node_modules/@rollup/plugin-inject": {
984
+ "version": "5.1.0",
985
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.1.0.tgz",
986
+ "integrity": "sha512-7vI6Q7b+jQyM01ogqX+p7p08HlM0Z3M8/5y2G7792W3VzL+3iW5O0U/8nE1K+d8iP63R+Jd4/tN6Zq+28B0g==",
987
+ "peerDependencies": {
988
+ "rollup": "^1.20.0||^2||^3"
989
+ },
990
+ "peerDependenciesMeta": {
991
+ "rollup": {
992
+ "optional": true
993
+ }
994
+ }
995
+ },
996
+ "node_modules/@stylistic/eslint-plugin-js": {
997
+ "version": "1.5.1",
998
+ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-1.5.1.tgz",
999
+ "integrity": "sha512-iV9lQ5Wn3uP/v4g55yXy0n3u390xKqX3l1T3Z8QJ6LdM01E+f9kI0/uU+rG4lG7gI993Cj8YkE3l9pL7/2+zw==",
1000
+ "dependencies": {
1001
+ "@stylistic/eslint-plugin-plus": "1.5.1",
1002
+ "globals": "^13.20.0"
1003
+ },
1004
+ "peerDependencies": {
1005
+ "eslint": ">=8.0.0"
1006
+ }
1007
+ },
1008
+ "node_modules/@stylistic/eslint-plugin-plus": {
1009
+ "version": "1.5.1",
1010
+ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-1.5.1.tgz",
1011
+ "integrity": "sha512-jO50R2eX9U7m60qj4W41u4o5Bq4+H0jV9U+Zf4F8y+J/72bQ+a3a1N4d033wH70/r1g0a0pE7Z8xR/H2vY8Q==",
1012
+ "peerDependencies": {
1013
+ "eslint": ">=8.0.0"
1014
+ }
1015
+ },
1016
+ "node_modules/@stylistic/js": {
1017
+ "version": "1.5.1",
1018
+ "resolved": "https://registry.npmjs.org/@stylistic/js/-/js-1.5.1.tgz",
1019
+ "integrity": "sha512-Vp0I0p0h0T53eJ6T/7yvQG304x8gZ06V9v1XQ6+f8rZ/Jd/f1u0rW2f9v7/vU+kG0l1q0i1R7gI9vL7y/v7Q==",
1020
+ "engines": {
1021
+ "node": ">=14.0.0"
1022
+ }
1023
+ },
1024
+ "node_modules/@svgr/plugin-jsx": {
1025
+ "version": "8.1.4",
1026
+ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.4.tgz",
1027
+ "integrity": "sha512-57aP/11fVlqRj8G8X4lYt6o6U4h/x8F8lC+Qy0k9WdD99o7R7rJ+YJ0V9Q57h7g9iK/I/X7z9R9/93y2+y+w==",
1028
+ "dependencies": {
1029
+ "@babel/plugin-syntax-jsx": "^7.18.6",
1030
+ "@svgr/babel-preset": "8.1.4",
1031
+ "@svgr/core": "8.1.4",
1032
+ "@svgr/plugin-prettier": "8.1.4",
1033
+ "@svgr/plugin-svgo": "8.1.4",
1034
+ "camelcase": "^6.0.0",
1035
+ "semver": "^7.3.5"
1036
+ },
1037
+ "engines": {
1038
+ "node": ">=14"
1039
+ }
1040
+ },
1041
+ "node_modules/@tsconfig/cypress": {
1042
+ "version": "3.0.0",
1043
+ "resolved": "https://registry.npmjs.org/@tsconfig/cypress/-/cypress-3.0.0.tgz",
1044
+ "integrity": "sha512-h650N/mQkL+Q0qf3jM8B7igZevlq6mOaQ8s3xxrR+Oa2v+9cWpL3Q/xWz+J4462X6Y22t+h06c65xJ+v153m/Q==",
1045
+ "peerDependencies": {
1046
+ "typescript": ">=4.5"
1047
+ }
1048
+ },
1049
+ "node_modules/@tsconfig/create-react-app": {
1050
+ "version": "2.0.1",
1051
+ "resolved": "https://registry.npmjs.org/@tsconfig/create-react-app/-/create-react-app-2.0.1.tgz",
1052
+ "integrity": "sha512-3x+n8aKj2kgYfX0gTzXvW48SzQv5dt1S5gJ5kE5dX5uI+sL0+sN8t6PqQvJ6j9k5Vw6/kU0qj6o621/v9R8nAw==",
1053
+ "peerDependencies": {
1054
+ "typescript": ">=3.8"
1055
+ }
1056
+ },
1057
+ "node_modules/@tsconfig/node-lts-strictest": {
1058
+ "version": "20.1.1",
1059
+ "resolved": "https://registry.npmjs.org/@tsconfig/node-lts-strictest/-/node-lts-strictest-20.1.1.tgz",
1060
+ "integrity": "sha512-rYw7YFf27FqQ6oD+l617sXyW0/5u+V1nSjI25h16qgR/X7vY762uXN0a/OaQp3/w8mZ3k4+Z1+j11/B3j0wsg==",
1061
+ "peerDependencies": {
1062
+ "typescript": ">=4.8"
1063
+ }
1064
+ },
1065
+ "node_modules/@types/babel__core": {
1066
+ "version": "7.20.3",
1067
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/core-7.20.3.tgz",
1068
+ "integrity": "sha512-aZgQhIq28t99p6nO75tG7rNp6XoEoz14G5L9B+Fj9Q7Z7l0+3t0c6wA837Xy6/mC9T+k5Lz9h4338T/I+5t3Q==",
1069
+ "dependencies": {
1070
+ "@babel/parser": "*",
1071
+ "@types/babel__generator": "*",
1072
+ "@types/babel__template": "*",
1073
+ "@types/babel__traverse": "*",
1074
+ "@types/semver": "*"
1075
+ }
1076
+ },
1077
+ "node_modules/@types/babel__generator": {
1078
+ "version": "7.6.8",
1079
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/generator-7.6.8.tgz",
1080
+ "integrity": "sha512-s212dp6eE2Q35Y4eKEtogEwDGB4v4WlV7iP01ump9zJ7lxIUmwmd09PF6iFfJjIeWf/z/xkd6rqR6MhXm/1lQ=="
1081
+ },
1082
+ "node_modules/@types/babel__template": {
1083
+ "version": "7.4.5",
1084
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/template-7.4.5.tgz",
1085
+ "integrity": "sha512-o/GkPgJjSggh2ZgOh/Y70yR717qzesAiKTiWOQZgE8C7YJ7lTGy+rOZw93/JikE0616a/sOhH/bEuEpSyR/kEQ=="
1086
+ },
1087
+ "node_modules/@types/babel__traverse": {
1088
+ "version": "7.20.5",
1089
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/traverse-7.20.5.tgz",
1090
+ "integrity": "sha512-7d7L9o+s+2hQi/j7PZ+2HnJ7KzW5Qx8K5bQc+2/1P0xWnKx3/uTfH0vK6+R2yK9v8L7I3F1/qG3sQ+j47wLQQ==",
1091
+ "dependencies": {
1092
+ "@types/babel__parser": "*"
1093
+ }
1094
+ },
1095
+ "node_modules/@types/chalk": {
1096
+ "version": "2.2.0",
1097
+ "resolved": "https://registry.npmjs.org/@types/chalk/-/chalk-2.2.0.tgz",
1098
+ "integrity": "sha512-hQ+MGRoC9yY86Wpdr7jsQPU08Jmn2iJfVd9mE996nZruHkP4jSK9LQNJ944gV6qi9R2m/mFgnn0K/47WLo8XQ=="
1099
+ },
1100
+ "node_modules/@types/color-name": {
1101
+ "version": "1.1.3",
1102
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.3.tgz",
1103
+ "integrity": "sha512-rEuNlgRBRo6+FQVuB003v/pjpiyQcxW/Vv+PauQznqJZHoPQG+WJvGmG2jY/fCIE29Z2kSCLs9v0p/fE/h83YQ=="
1104
+ },
1105
+ "node_modules/@types/eslint": {
1106
+ "version": "8.44.7",
1107
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz",
1108
+ "integrity": "sha512-W7s9L7hY4cW00+DkVW85w/w+s8x/7vQz4h9c4F6F2P6dK15v8c1uFfF2qB3XJ2J+s8c/e5tWz4J/P/9w844/g==",
1109
+ "dependencies": {
1110
+ "@jest/types": "*",
1111
+ "@types/estree": "*",
1112
+ "@types/json-schema": "*",
1113
+ "@types/node": "*"
1114
+ }
1115
+ },
1116
+ "node_modules/@types/estree": {
1117
+ "version": "2.0.0",
1118
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-2.0.0.tgz",
1119
+ "integrity": "sha512-jGm4w4jQtR51rA3Oz4y993U9lV9qKZuQ1iE+4qvOaE7CZ3YkR2pZ5j3YxW61010W0q8GkF/8n2pL4P+2/0iZ4w=="
1120
+ },
1121
+ "node_modules/@types/glob": {
1122
+ "version": "8.1.0",
1123
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz",
1124
+ "integrity": "sha512-p4P75IPy+wRLfW3j90o0nkU5bRdEpa4ScaWw9P6i8h1YhJ48E/i8E9e1uK6r7bU8f7J8vXh/4FkQ6r2zO9xvg==",
1125
+ "dependencies": {
1126
+ "@types/node": "*"
1127
+ }
1128
+ },
1129
+ "node_modules/@types/hoist-non-react-statics": {
1130
+ "version": "3.3.1",
1131
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
1132
+ "integrity": "sha512-gS39b7x0QhQ0L5q6C0R55wQK1gpL5EvS5x6n6T18x/Vj3W7bXjTKhbEIm78g4zlq62x952y3o3L/1XW7jQe/Q=="
1133
+ },
1134
+ "node_modules/@types/jest": {
1135
+ "version": "29.5.5",
1136
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.5.tgz",
1137
+ "integrity": "sha512-H2mD3q3xi1vKPs/rG4e8b7H4k7qO5hH+WqR0nK7K86Gt0p82a8g6N/q+EPZ8zK7Xg206R04zXz8V0r7X+56hQ==",
1138
+ "dependencies": {
1139
+ "@types/estree": "*",
1140
+ "@types/node": "*",
1141
+ "@types/promises-aplus": "*",
1142
+ "@types/testing-library__dom": "*",
1143
+ "@types/ungap__structured-clone": "*",
1144
+ "expect-type": "0.8.1"
1145
+ }
1146
+ },
1147
+ "node_modules/@types/json-schema": {
1148
+ "version": "7.0.12",
1149
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
1150
+ "integrity": "sha512-0b9lYoHjh191cZxC1kK0E9oXwQo8X56/00C7mXzV10e8TjE5p5c4j7rR+O7oE754wL9b330A+9g4v8/gJ3pvw=="
1151
+ },
1152
+ "node_modules/@types/json5": {
1153
+ "version": "0.0.2",
1154
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.2.tgz",
1155
+ "integrity": "sha512-e4cWl1rN+1g6D6iWzB0i9r8o+8a4+V7K+d6u07Q/h3f9W6uWuh08OW/zK+a4fFzXj23x5o07J1Gk581V2k/kQ=="
1156
+ },
1157
+ "node_modules/@types/minimatch": {
1158
+ "version": "5.1.0",
1159
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.0.tgz",
1160
+ "integrity": "sha512-Q57VIM8zYQoH8mD/1m2kI8mFIm9sHwK2sJEqSjBvK/4yB+S5C9t2/5jWJvXb4w/w2v7a4u7i37w59eI/9sY9w=="
1161
+ },
1162
+ "node_modules/@types/node": {
1163
+ "version": "20.8.9",
1164
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.9.tgz",
1165
+ "integrity": "sha512-P/x424wla9p7pSHdkpPxbP9C+8hJ5Lvt9qWyK6PfGwzlrr/bXLj9i4YUkcQg3d6wS7WlZCWK8fH3WGEeQvH0oA=="
1166
+ },
1167
+ "node_modules/@types/parse-json": {
1168
+ "version": "4.0.0",
1169
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
1170
+ "integrity": "sha512-06CvHn7fFQ3/nQk8do0ncgYhV/W2R9lFpnuwD3n1aQyYg+m/b02/kHw68Uq88JgM6bWpC42GzK20z+1s8m39wA=="
1171
+ },
1172
+ "node_modules/@types/prettier": {
1173
+ "version": "2.7.3",
1174
+ "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz",
1175
+ "integrity": "sha512-5m4295s14mS1Wy5KDO/aEo4VXLv9hXpYc4h3Wq3k3/E5PZGrN2W4B6iC7mUfKjG5xG3aF4w7ZtQ4/6uN5j3/wA=="
1176
+ },
1177
+ "node_modules/@types/promises-aplus": {
1178
+ "version": "2.0.5",
1179
+ "resolved": "https://registry.npmjs.org/@types/promises-aplus/-/promises-aplus-2.0.5.tgz",
1180
+ "integrity": "sha512-lX7QJcIRyK1L30YPrkF3l9L310y/nQ4E517F4GvG8lBwA9T46jP3p59G18+YfB0pX14YvC5P6wZ9s24e1fWvg==",
1181
+ "dependencies": {
1182
+ "@types/node": "*"
1183
+ }
1184
+ },
1185
+ "node_modules/@types/react": {
1186
+ "version": "18.2.33",
1187
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.33.tgz",
1188
+ "integrity": "sha512-lmgB341w2K0VpY4X4sE2Z41i0n/0j/6W2/WpG+sP+1q88bA6xW/lC1f8o1T5e1g3/dJ2/P+J/v5i2aQnFv6Q==",
1189
+ "dependencies": {
1190
+ "@types/prop-types": "*",
1191
+ "@types/scheduler": "*",
1192
+ "csstype": "^3.0.5"
1193
+ }
1194
+ },
1195
+ "node_modules/@types/react-dom": {
1196
+ "version": "18.2.14",
1197
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz",
1198
+ "integrity": "sha512-qsc2jF0hJOmJ98Uvp9Xw9PHz1yvY/H26Mv7L69Y+o7a0w7iK6m/6/9t+w5520e4iN0Z06996/m45U+oQW9i7Q==",
1199
+ "dependencies": {
1200
+ "@types/react": "*"
1201
+ }
1202
+ },
1203
+ "node_modules/@types/resolve": {
1204
+ "version": "1.20.2",
1205
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
1206
+ "integrity": "sha512-5pLuotWzR/lZ55yC7/5803bw0dPd1k4p1w1e/Kk/9K7/o96w2T7hP1gqJ5wOq6p/wO+01+j9g8+d5iS/d8G7w=="
1207
+ },
1208
+ "node_modules/@types/scheduler": {
1209
+ "version": "0.16.4",
1210
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz",
1211
+ "integrity": "sha512-/8919kS57o10+XNP2+JzuP+L5f2f8/24pX6W5g0Q+R/n+k+rP/bKz7rXw3fF4J/cK/rR9+aW9iR9+fR8X48/w=="
1212
+ },
1213
+ "node_modules/@types/semver": {
1214
+ "version": "7.5.3",
1215
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz",
1216
+ "integrity": "sha512-UA5rG29H/o/5eOa01+SfhQz5bTf18H2Z8QpxL7d7e9QvXvUcd9qjQZ1GjF8xQ+wH7P9+v3QZ3vL0W9m8oE4aQ=="
1217
+ },
1218
+ "node_modules/@types/stack-trace-parser": {
1219
+ "version": "1.3.2",
1220
+ "resolved": "https://registry.npmjs.org/@types/stack-trace-parser/-/stack-trace-parser-1.3.2.tgz",
1221
+ "integrity": "sha512-lS22pAP3vKi4k26z/0p3Q5p7S5wVn+kE5E3e9176E+92sT7s3kXF7q0Qz+eW7fX8xVv8s33K/4yK6/R564B1g=="
1222
+ },
1223
+ "node_modules/@types/testing-library__dom": {
1224
+ "version": "7.5.0",
1225
+ "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/dom-7.5.0.tgz",
1226
+ "integrity": "sha512-U03yV676K92B49s8w8oP97L5r1/rN4eF/c8Yg/cE6+o+yU6Q/l0/B6Z+9f/70H5WvR5vF30f7o97I7/wJqFfQ==",
1227
+ "dependencies": {
1228
+ "@types/node": "*"
1229
+ }
1230
+ },
1231
+ "node_modules/@types/ungap__structured-clone": {
1232
+ "version": "0.3.0",
1233
+ "resolved": "https://registry.npmjs.org/@types/ungap__structured-clone/-/structured-clone-0.3.0.tgz",
1234
+ "integrity": "sha512-wznUj/nBo3oQy1218b9oEoxE3V/G/wR97lQun90N3/8du/kO10/vE2e8XW/s6vj80Xb+J0rK3l18rP8p2Z52qA=="
1235
+ },
1236
+ "node_modules/@vercel/nft": {
1237
+ "version": "0.25.0",
1238
+ "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.25.0.tgz",
1239
+ "integrity": "sha512-n0w/n66/j2+j4sZ7tK92zH1z/hZ1/i52+n+5+7/n/1/n/7/n/6/n5uH0n7p/s71n7/57703+77t02r3A==",
1240
+ "dependencies": {
1241
+ "@types/glob": "^8.0.0",
1242
+ "cacache": "^16.1.0",
1243
+ "esbuild": "0.19.5",
1244
+ "fast-glob": "^3.2.12",
1245
+ "ignore": "^7.0.0",
1246
+ "ora": "^5.4.1",
1247
+ "resolve": "^1.22.8",
1248
+ "walker": "^1.0.8"
1249
+ },
1250
+ "engines": {
1251
+ "node": ">=16.7.0"
1252
+ }
1253
+ },
1254
+ "node_modules/ajv": {
1255
+ "version": "6.12.6",
1256
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1257
+ "integrity": "sha512-j5sQCJoefcpga1o5ajgMochi4fVUyyruuvlWqjKObkhEW/5b0k7xfQEkj5Q6aCw0uF6RJ3XhKtKjY+gBAIEepA==",
1258
+ "dependencies": {
1259
+ "fast-deep-equal": "^3.1.1",
1260
+ "json-schema-traverse": "^0.4.1",
1261
+ "uri-js": "^4.2.2"
1262
+ },
1263
+ "engines": {
1264
+ "node": ">=6.9"
1265
+ }
1266
+ },
1267
+ "node_modules/ansi-styles": {
1268
+ "version": "3.2.1",
1269
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1270
+ "integrity": "sha512-gnPPBMb7Uv3r6FnC9j9q4v+J/v9YFzO0QWfH0WeN48psgrgE/jR0H2GGg6wT1baL1j77V3X/CjYv4b1p33J4g==",
1271
+ "dependencies": {
1272
+ "color-convert": "^1.9.0"
1273
+ },
1274
+ "engines": {
1275
+ "node": ">=4"
1276
+ }
1277
+ },
1278
+ "node_modules/arg": {
1279
+ "version": "5.0.2",
1280
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1281
+ "integrity": "sha512-H-sU9a635Q/R57P+l8cUTnB8/N+99f8Q1f0qQp/l2s9gZ2R/q6hLq5zO5s1P1g0nO6f8n1g0n6f8g8g8/g==",
1282
+ "engines": {
1283
+ "node": ">=14"
1284
+ }
1285
+ },
1286
+ "node_modules/assert": {
1287
+ "version": "1.5.0",
1288
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
1289
+ "integrity": "sha512-n8QrIxW+1oE3vN8t8/wWu55lFm/s5k9fQj/vRTI/Vn7mC/Rsp/s4yZ7v/fM155y+91Q9t24yv0e9ZfG88H0xg==",
1290
+ "dependencies": {
1291
+ "ieee754": "^1.1.13",
1292
+ "util": "0.10.4"
1293
+ }
1294
+ },
1295
+ "node_modules/autoprefixer": {
1296
+ "version": "10.4.16",
1297
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
1298
+ "integrity": "sha512-vyNnHpA1Q0lp4/vOQhR14FMtB9W6As6O7l2+K4uE0b4vJxY4kxlw7a+Zit5zW3ipZ8uKq0HnYO1B7c5k2a+7Aw==",
1299
+ "dependencies": {
1300
+ "browserslist": "^4.22.1",
1301
+ "caniuse-lite": "1.0.30015751",
1302
+ "chokidar": "^3.5.3",
1303
+ "escalade": "^3.1.1",
1304
+ "nanoid": "^3.3.6",
1305
+ "picocolors": "^1.0.0",
1306
+ "postcss": "^8.4.31",
1307
+ "postcss-value-parser": "^6.0.5"
1308
+ },
1309
+ "funding": {
1310
+ "url": "https://opencollective.com/postcss"
1311
+ },
1312
+ "peerDependencies": {
1313
+ "postcss": "^8.1.0"
1314
+ }
1315
+ },
1316
+ "node_modules/balanced-match": {
1317
+ "version": "1.0.2",
1318
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1319
+ "integrity": "sha512-3oSeUO0tmvyZgL6nAGlpdpYBalzKHxRmjtOPknjbbtN9ynoDLzPu7GaRs1jQ8WYxBaNWnPSpNrp37jtDZvQg=="
1320
+ },
1321
+ "node_modules/browserslist": {
1322
+ "version": "4.22.2",
1323
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
1324
+ "integrity": "sha512-W1yqp8T5wzMvK4y1E/L6vS45b/n7W4yqS0Yy/T1v6/89G/Z5Y3Lp1qXlP1qW1p0qXlP1v6/89G/Z5Y3Lp1qXlP1v6w==",
1325
+ "funding": {
1326
+ "type": "opencollective",
1327
+ "url": "https://opencollective.com/browserslist"
1328
+ },
1329
+ "engines": {
1330
+ "node": ">=6"
1331
+ }
1332
+ },
1333
+ "node_modules/cacache": {
1334
+ "version": "16.1.1",
1335
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz",
1336
+ "integrity": "sha512-m4yP7k8eM0W/L/3h/m9xR0V54a9n2t7q/9K/1a30f/2+w87g/s9w/s7w9z7+w+w87/w+w7z7z7z8w==",
1337
+ "dependencies": {
1338
+ "@npmcli/ci-detect": "^2.0.0",
1339
+ "@npmcli/fs": "^3.1.0",
1340
+ "@npmcli/move-file": "^2.0.0",
1341
+ "chownr": "^3.0.0",
1342
+ "fs-minipass": "^3.0.0",
1343
+ "lru-cache": "^7.1.5",
1344
+ "minipass": "^5.0.0",
1345
+ "minipass-collect": "^2.0.0",
1346
+ "minipass-fetch": "^2.0.3",
1347
+ "minipass-pipeline": "^1.2.0",
1348
+ "minipass-sized": "^2.0.0",
1349
+ "mkdirp": "^1.0.4",
1350
+ "rimraf": "^4.1.0",
1351
+ "ssri": "^9.0.0",
1352
+ "tar": "^6.1.11"
1353
+ },
1354
+ "engines": {
1355
+ "node": ">=12"
1356
+ }
1357
+ },
1358
+ "node_modules/camelcase": {
1359
+ "version": "6.3.0",
1360
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
1361
+ "integrity": "sha512-GvgU7Ghcx9YvEfB9LQjY1UgW99bXG1P6i0pYW1Ia+m4QnbaPwKqt53dUQWsgr17rEzqj26ykQC6JE5/yL0yA==",
1362
+ "engines": {
1363
+ "node": ">=10"
1364
+ }
1365
+ },
1366
+ "node_modules/caniuse-lite": {
1367
+ "version": "1.0.30015751",
1368
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30015751.tgz",
1369
+ "integrity": "sha512-p/L+Qo1lZ6b0h7mGf+86c3WqXQ/T0e1QkKj7YqP5Q+45c/p5d/i+e+e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/e/p5d/p7P+
1370
+ "version": "1.2.0",
1371
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
1372
+ "integrity": "sha512-5nb/n9CJFt1zlOlkAHgZ4rXoEcQp9K7wB+4dJmRbnGfE6GfZo9v12qZ4e7K3oYg9f309gU88z6sH+b/c81Y0yg==",
1373
+ "dependencies": {
1374
+ "ansi-styles": "^3.2.1",
1375
+ "escape-string-regexp": "^1.0.5",
1376
+ "supports-color": "^5.3.0"
1377
+ },
1378
+ "engines": {
1379
+ "node": ">=4"
1380
+ }
1381
+ },
1382
+ "node_modules/chokidar": {
1383
+ "version": "3.5.3",
1384
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1385
+ "integrity": "sha512-gNnaePLIqt4JTDVtkmvg3S/r97FtEQOzjEUWnM/23m3yUK56qTzGYswLsE8P9Ozu1zgQtSzCAOxlxGvRZ9+Bg==",
1386
+ "dependencies": {
1387
+ "anymatch": "~3.1.3",
1388
+ "braces": "~3.0.2",
1389
+ "glob-parent": "~5.1.2",
1390
+ "is-binary-path": "~2.1.0",
1391
+ "is-glob": "~4.0.3",
1392
+ "normalize-path": "~3.0.0",
1393
+ "readdirp": "~3.6.0"
1394
+ },
1395
+ "engines": {
1396
+ "node": ">= 8.16.0"
1397
+ },
1398
+ "optionalDependencies": {
1399
+ "fsevents": "~2.3.2"
1400
+ }
1401
+ },
1402
+ "node_modules/chownr": {
1403
+ "version": "3.0.0",
1404
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
1405
+ "integrity": "sha512-jWP+795S/oH3bEgomrVpL8eN+3x0j5br8J543L6+uB8zWJ3mYg8Uv/F6fO8j0sJt1lV/1L3vF4jU0I0A0O8bA==",
1406
+ "engines": {
1407
+ "node": ">=12"
1408
+ }
1409
+ },
1410
+ "node_modules/class-variance-authority": {
1411
+ "version": "0.7.0",
1412
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
1413
+ "integrity": "sha512-7+QkS/T9kCq0n+V4mR9q0dG3P7w1z9tI3sHhxt7Z5K/S2i5T3/o8h2R1/R5O3uK1+0Y3t3nK2/S5W5B5C5C5Q=="
1414
+ },
1415
+ "node_modules/cli-boxes": {
1416
+ "version": "2.2.1",
1417
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
1418
+ "integrity": "sha512-y4/rdiJOTz5H6f1dRRZuC/rW9XlJ08q4CCTgX+30S6s6V/T2dOS5i+d+K67y8fL2B9B+s/5b/9y5j0i8y9J4g==",
1419
+ "engines": {
1420
+ "node": ">=12"
1421
+ }
1422
+ },
1423
+ "node_modules/clsx": {
1424
+ "version": "2.1.0",
1425
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
1426
+ "integrity": "sha512-R++QW9lX8R4w/t+gV2Rr4o3w63j09/Y4OQ1hB/7+Z5o6h2+0W4lXw5jU2/Xl7z+p6f7g4z8x9v2z8x9v2w=="
1427
+ },
1428
+ "node_modules/color-convert": {
1429
+ "version": "1.9.3",
1430
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
1431
+ "integrity": "sha512-v7KKlGqrjJ/IspVj2VVVt3tH/JVOsUYim3TpQg2ez/oeai6sdw+j+3l7YPP3gEZtXD+A/1iue/0AaRb9h9ejw==",
1432
+ "dependencies": {
1433
+ "color-name": "1.1.3"
1434
+ },
1435
+ "engines": {
1436
+ "node": ">=0.4.0"
1437
+ }
1438
+ },
1439
+ "node_modules/color-name": {
1440
+ "version": "1.1.3",
1441
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1442
+ "integrity": "sha512-72fsenjCmErZkjoKx92vdYh/Y67x5m76WysUe1Y9xP0V8zVz/pWlV6c7mU+s/g8Q/g8q7+3y5g0p7h6H8j9h9w==",
1443
+ "engines": {
1444
+ "node": ">=0.1.90"
1445
+ }
1446
+ },
1447
+ "node_modules/colorette": {
1448
+ "version": "2.0.20",
1449
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
1450
+ "integrity": "sha512-jZz96nss5W+901Y1Y6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oY4qX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX6oYqX
1451
+
1452
+ "fastapi": {
1453
+ "files": {
1454
+ "main.py": """from fastapi import FastAPI
1455
+
1456
+ app = FastAPI()
1457
+
1458
+ @app.get("/")
1459
+ async def read_root():
1460
+ return {"Hello": "World from FastAPI"}
1461
+ """,
1462
+ "requirements.txt": "fastapi\nuvicorn",
1463
+ ".gitignore": "__pycache__/\nvenv/\n"
1464
+ }
1465
+ },
1466
+ }
1467
+
1468
  def get_file_content(owner, repo_name, path, branch="main"):
1469
  """Fetches file content from a GitHub repository."""
1470
  url = f"https://raw.githubusercontent.com/{owner}/{repo_name}/{branch}/{path}"