├── .gitignore ├── main.py ├── package-lock.json ├── package.json ├── readme.md ├── static ├── css │ └── main.css ├── input.css └── js │ └── script.js ├── tailwind.config.js └── templates └── index.html /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.pyc 3 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template, jsonify, request 2 | from flask_pymongo import PyMongo 3 | import openai 4 | 5 | openai.api_key = "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" 6 | 7 | 8 | 9 | 10 | app = Flask(__name__) 11 | app.config["MONGO_URI"] = "mongodb+srv://harry123:7*Q9KMh%409XHW4rg@mongoyoutube.nhtraxd.mongodb.net/chatgpt" 12 | mongo = PyMongo(app) 13 | 14 | @app.route("/") 15 | def home(): 16 | chats = mongo.db.chats.find({}) 17 | myChats = [chat for chat in chats] 18 | print(myChats) 19 | return render_template("index.html", myChats = myChats) 20 | 21 | @app.route("/api", methods=["GET", "POST"]) 22 | def qa(): 23 | if request.method == "POST": 24 | print(request.json) 25 | question = request.json.get("question") 26 | chat = mongo.db.chats.find_one({"question": question}) 27 | print(chat) 28 | if chat: 29 | data = {"question": question, "answer": f"{chat['answer']}"} 30 | return jsonify(data) 31 | else: 32 | response = openai.Completion.create( 33 | model="text-davinci-003", 34 | prompt=question, 35 | temperature=0.7, 36 | max_tokens=256, 37 | top_p=1, 38 | frequency_penalty=0, 39 | presence_penalty=0 40 | ) 41 | print(response) 42 | data = {"question": question, "answer": response["choices"][0]["text"]} 43 | mongo.db.chats.insert_one({"question": question, "answer": response["choices"][0]["text"]}) 44 | return jsonify(data) 45 | data = {"result": "Thank you! I'm just a machine learning model designed to respond to questions and generate text based on my training data. Is there anything specific you'd like to ask or discuss? "} 46 | 47 | return jsonify(data) 48 | 49 | app.run(debug=True, port=5001) -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chatgpt-clone", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "chatgpt-clone", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "tailwindcss": "^3.3.2" 13 | } 14 | }, 15 | "node_modules/@alloc/quick-lru": { 16 | "version": "5.2.0", 17 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 18 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 19 | "engines": { 20 | "node": ">=10" 21 | }, 22 | "funding": { 23 | "url": "https://github.com/sponsors/sindresorhus" 24 | } 25 | }, 26 | "node_modules/@jridgewell/gen-mapping": { 27 | "version": "0.3.3", 28 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 29 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 30 | "dependencies": { 31 | "@jridgewell/set-array": "^1.0.1", 32 | "@jridgewell/sourcemap-codec": "^1.4.10", 33 | "@jridgewell/trace-mapping": "^0.3.9" 34 | }, 35 | "engines": { 36 | "node": ">=6.0.0" 37 | } 38 | }, 39 | "node_modules/@jridgewell/resolve-uri": { 40 | "version": "3.1.0", 41 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 42 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 43 | "engines": { 44 | "node": ">=6.0.0" 45 | } 46 | }, 47 | "node_modules/@jridgewell/set-array": { 48 | "version": "1.1.2", 49 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 50 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 51 | "engines": { 52 | "node": ">=6.0.0" 53 | } 54 | }, 55 | "node_modules/@jridgewell/sourcemap-codec": { 56 | "version": "1.4.15", 57 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 58 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 59 | }, 60 | "node_modules/@jridgewell/trace-mapping": { 61 | "version": "0.3.18", 62 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", 63 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", 64 | "dependencies": { 65 | "@jridgewell/resolve-uri": "3.1.0", 66 | "@jridgewell/sourcemap-codec": "1.4.14" 67 | } 68 | }, 69 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { 70 | "version": "1.4.14", 71 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 72 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" 73 | }, 74 | "node_modules/@nodelib/fs.scandir": { 75 | "version": "2.1.5", 76 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 77 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 78 | "dependencies": { 79 | "@nodelib/fs.stat": "2.0.5", 80 | "run-parallel": "^1.1.9" 81 | }, 82 | "engines": { 83 | "node": ">= 8" 84 | } 85 | }, 86 | "node_modules/@nodelib/fs.stat": { 87 | "version": "2.0.5", 88 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 89 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 90 | "engines": { 91 | "node": ">= 8" 92 | } 93 | }, 94 | "node_modules/@nodelib/fs.walk": { 95 | "version": "1.2.8", 96 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 97 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 98 | "dependencies": { 99 | "@nodelib/fs.scandir": "2.1.5", 100 | "fastq": "^1.6.0" 101 | }, 102 | "engines": { 103 | "node": ">= 8" 104 | } 105 | }, 106 | "node_modules/any-promise": { 107 | "version": "1.3.0", 108 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 109 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" 110 | }, 111 | "node_modules/anymatch": { 112 | "version": "3.1.3", 113 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 114 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 115 | "dependencies": { 116 | "normalize-path": "^3.0.0", 117 | "picomatch": "^2.0.4" 118 | }, 119 | "engines": { 120 | "node": ">= 8" 121 | } 122 | }, 123 | "node_modules/arg": { 124 | "version": "5.0.2", 125 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 126 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 127 | }, 128 | "node_modules/balanced-match": { 129 | "version": "1.0.2", 130 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 131 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 132 | }, 133 | "node_modules/binary-extensions": { 134 | "version": "2.2.0", 135 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 136 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 137 | "engines": { 138 | "node": ">=8" 139 | } 140 | }, 141 | "node_modules/brace-expansion": { 142 | "version": "1.1.11", 143 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 144 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 145 | "dependencies": { 146 | "balanced-match": "^1.0.0", 147 | "concat-map": "0.0.1" 148 | } 149 | }, 150 | "node_modules/braces": { 151 | "version": "3.0.2", 152 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 153 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 154 | "dependencies": { 155 | "fill-range": "^7.0.1" 156 | }, 157 | "engines": { 158 | "node": ">=8" 159 | } 160 | }, 161 | "node_modules/camelcase-css": { 162 | "version": "2.0.1", 163 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 164 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 165 | "engines": { 166 | "node": ">= 6" 167 | } 168 | }, 169 | "node_modules/chokidar": { 170 | "version": "3.5.3", 171 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 172 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 173 | "funding": [ 174 | { 175 | "type": "individual", 176 | "url": "https://paulmillr.com/funding/" 177 | } 178 | ], 179 | "dependencies": { 180 | "anymatch": "~3.1.2", 181 | "braces": "~3.0.2", 182 | "glob-parent": "~5.1.2", 183 | "is-binary-path": "~2.1.0", 184 | "is-glob": "~4.0.1", 185 | "normalize-path": "~3.0.0", 186 | "readdirp": "~3.6.0" 187 | }, 188 | "engines": { 189 | "node": ">= 8.10.0" 190 | }, 191 | "optionalDependencies": { 192 | "fsevents": "~2.3.2" 193 | } 194 | }, 195 | "node_modules/chokidar/node_modules/glob-parent": { 196 | "version": "5.1.2", 197 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 198 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 199 | "dependencies": { 200 | "is-glob": "^4.0.1" 201 | }, 202 | "engines": { 203 | "node": ">= 6" 204 | } 205 | }, 206 | "node_modules/commander": { 207 | "version": "4.1.1", 208 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 209 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 210 | "engines": { 211 | "node": ">= 6" 212 | } 213 | }, 214 | "node_modules/concat-map": { 215 | "version": "0.0.1", 216 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 217 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 218 | }, 219 | "node_modules/cssesc": { 220 | "version": "3.0.0", 221 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 222 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 223 | "bin": { 224 | "cssesc": "bin/cssesc" 225 | }, 226 | "engines": { 227 | "node": ">=4" 228 | } 229 | }, 230 | "node_modules/didyoumean": { 231 | "version": "1.2.2", 232 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 233 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 234 | }, 235 | "node_modules/dlv": { 236 | "version": "1.1.3", 237 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 238 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 239 | }, 240 | "node_modules/fast-glob": { 241 | "version": "3.2.12", 242 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 243 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 244 | "dependencies": { 245 | "@nodelib/fs.stat": "^2.0.2", 246 | "@nodelib/fs.walk": "^1.2.3", 247 | "glob-parent": "^5.1.2", 248 | "merge2": "^1.3.0", 249 | "micromatch": "^4.0.4" 250 | }, 251 | "engines": { 252 | "node": ">=8.6.0" 253 | } 254 | }, 255 | "node_modules/fast-glob/node_modules/glob-parent": { 256 | "version": "5.1.2", 257 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 258 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 259 | "dependencies": { 260 | "is-glob": "^4.0.1" 261 | }, 262 | "engines": { 263 | "node": ">= 6" 264 | } 265 | }, 266 | "node_modules/fastq": { 267 | "version": "1.15.0", 268 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 269 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 270 | "dependencies": { 271 | "reusify": "^1.0.4" 272 | } 273 | }, 274 | "node_modules/fill-range": { 275 | "version": "7.0.1", 276 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 277 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 278 | "dependencies": { 279 | "to-regex-range": "^5.0.1" 280 | }, 281 | "engines": { 282 | "node": ">=8" 283 | } 284 | }, 285 | "node_modules/fs.realpath": { 286 | "version": "1.0.0", 287 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 288 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 289 | }, 290 | "node_modules/fsevents": { 291 | "version": "2.3.2", 292 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 293 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 294 | "hasInstallScript": true, 295 | "optional": true, 296 | "os": [ 297 | "darwin" 298 | ], 299 | "engines": { 300 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 301 | } 302 | }, 303 | "node_modules/function-bind": { 304 | "version": "1.1.1", 305 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 306 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 307 | }, 308 | "node_modules/glob": { 309 | "version": "7.1.6", 310 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 311 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 312 | "dependencies": { 313 | "fs.realpath": "^1.0.0", 314 | "inflight": "^1.0.4", 315 | "inherits": "2", 316 | "minimatch": "^3.0.4", 317 | "once": "^1.3.0", 318 | "path-is-absolute": "^1.0.0" 319 | }, 320 | "engines": { 321 | "node": "*" 322 | }, 323 | "funding": { 324 | "url": "https://github.com/sponsors/isaacs" 325 | } 326 | }, 327 | "node_modules/glob-parent": { 328 | "version": "6.0.2", 329 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 330 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 331 | "dependencies": { 332 | "is-glob": "^4.0.3" 333 | }, 334 | "engines": { 335 | "node": ">=10.13.0" 336 | } 337 | }, 338 | "node_modules/has": { 339 | "version": "1.0.3", 340 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 341 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 342 | "dependencies": { 343 | "function-bind": "^1.1.1" 344 | }, 345 | "engines": { 346 | "node": ">= 0.4.0" 347 | } 348 | }, 349 | "node_modules/inflight": { 350 | "version": "1.0.6", 351 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 352 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 353 | "dependencies": { 354 | "once": "^1.3.0", 355 | "wrappy": "1" 356 | } 357 | }, 358 | "node_modules/inherits": { 359 | "version": "2.0.4", 360 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 361 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 362 | }, 363 | "node_modules/is-binary-path": { 364 | "version": "2.1.0", 365 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 366 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 367 | "dependencies": { 368 | "binary-extensions": "^2.0.0" 369 | }, 370 | "engines": { 371 | "node": ">=8" 372 | } 373 | }, 374 | "node_modules/is-core-module": { 375 | "version": "2.12.0", 376 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", 377 | "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", 378 | "dependencies": { 379 | "has": "^1.0.3" 380 | }, 381 | "funding": { 382 | "url": "https://github.com/sponsors/ljharb" 383 | } 384 | }, 385 | "node_modules/is-extglob": { 386 | "version": "2.1.1", 387 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 388 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 389 | "engines": { 390 | "node": ">=0.10.0" 391 | } 392 | }, 393 | "node_modules/is-glob": { 394 | "version": "4.0.3", 395 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 396 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 397 | "dependencies": { 398 | "is-extglob": "^2.1.1" 399 | }, 400 | "engines": { 401 | "node": ">=0.10.0" 402 | } 403 | }, 404 | "node_modules/is-number": { 405 | "version": "7.0.0", 406 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 407 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 408 | "engines": { 409 | "node": ">=0.12.0" 410 | } 411 | }, 412 | "node_modules/jiti": { 413 | "version": "1.18.2", 414 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", 415 | "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==", 416 | "bin": { 417 | "jiti": "bin/jiti.js" 418 | } 419 | }, 420 | "node_modules/lilconfig": { 421 | "version": "2.1.0", 422 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 423 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 424 | "engines": { 425 | "node": ">=10" 426 | } 427 | }, 428 | "node_modules/lines-and-columns": { 429 | "version": "1.2.4", 430 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 431 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" 432 | }, 433 | "node_modules/merge2": { 434 | "version": "1.4.1", 435 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 436 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 437 | "engines": { 438 | "node": ">= 8" 439 | } 440 | }, 441 | "node_modules/micromatch": { 442 | "version": "4.0.5", 443 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 444 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 445 | "dependencies": { 446 | "braces": "^3.0.2", 447 | "picomatch": "^2.3.1" 448 | }, 449 | "engines": { 450 | "node": ">=8.6" 451 | } 452 | }, 453 | "node_modules/minimatch": { 454 | "version": "3.1.2", 455 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 456 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 457 | "dependencies": { 458 | "brace-expansion": "^1.1.7" 459 | }, 460 | "engines": { 461 | "node": "*" 462 | } 463 | }, 464 | "node_modules/mz": { 465 | "version": "2.7.0", 466 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 467 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 468 | "dependencies": { 469 | "any-promise": "^1.0.0", 470 | "object-assign": "^4.0.1", 471 | "thenify-all": "^1.0.0" 472 | } 473 | }, 474 | "node_modules/nanoid": { 475 | "version": "3.3.6", 476 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 477 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 478 | "funding": [ 479 | { 480 | "type": "github", 481 | "url": "https://github.com/sponsors/ai" 482 | } 483 | ], 484 | "bin": { 485 | "nanoid": "bin/nanoid.cjs" 486 | }, 487 | "engines": { 488 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 489 | } 490 | }, 491 | "node_modules/normalize-path": { 492 | "version": "3.0.0", 493 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 494 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 495 | "engines": { 496 | "node": ">=0.10.0" 497 | } 498 | }, 499 | "node_modules/object-assign": { 500 | "version": "4.1.1", 501 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 502 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 503 | "engines": { 504 | "node": ">=0.10.0" 505 | } 506 | }, 507 | "node_modules/object-hash": { 508 | "version": "3.0.0", 509 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 510 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 511 | "engines": { 512 | "node": ">= 6" 513 | } 514 | }, 515 | "node_modules/once": { 516 | "version": "1.4.0", 517 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 518 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 519 | "dependencies": { 520 | "wrappy": "1" 521 | } 522 | }, 523 | "node_modules/path-is-absolute": { 524 | "version": "1.0.1", 525 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 526 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 527 | "engines": { 528 | "node": ">=0.10.0" 529 | } 530 | }, 531 | "node_modules/path-parse": { 532 | "version": "1.0.7", 533 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 534 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 535 | }, 536 | "node_modules/picocolors": { 537 | "version": "1.0.0", 538 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 539 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 540 | }, 541 | "node_modules/picomatch": { 542 | "version": "2.3.1", 543 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 544 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 545 | "engines": { 546 | "node": ">=8.6" 547 | }, 548 | "funding": { 549 | "url": "https://github.com/sponsors/jonschlinkert" 550 | } 551 | }, 552 | "node_modules/pify": { 553 | "version": "2.3.0", 554 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 555 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 556 | "engines": { 557 | "node": ">=0.10.0" 558 | } 559 | }, 560 | "node_modules/pirates": { 561 | "version": "4.0.5", 562 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", 563 | "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", 564 | "engines": { 565 | "node": ">= 6" 566 | } 567 | }, 568 | "node_modules/postcss": { 569 | "version": "8.4.23", 570 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", 571 | "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==", 572 | "funding": [ 573 | { 574 | "type": "opencollective", 575 | "url": "https://opencollective.com/postcss/" 576 | }, 577 | { 578 | "type": "tidelift", 579 | "url": "https://tidelift.com/funding/github/npm/postcss" 580 | }, 581 | { 582 | "type": "github", 583 | "url": "https://github.com/sponsors/ai" 584 | } 585 | ], 586 | "dependencies": { 587 | "nanoid": "^3.3.6", 588 | "picocolors": "^1.0.0", 589 | "source-map-js": "^1.0.2" 590 | }, 591 | "engines": { 592 | "node": "^10 || ^12 || >=14" 593 | } 594 | }, 595 | "node_modules/postcss-import": { 596 | "version": "15.1.0", 597 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 598 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 599 | "dependencies": { 600 | "postcss-value-parser": "^4.0.0", 601 | "read-cache": "^1.0.0", 602 | "resolve": "^1.1.7" 603 | }, 604 | "engines": { 605 | "node": ">=14.0.0" 606 | }, 607 | "peerDependencies": { 608 | "postcss": "^8.0.0" 609 | } 610 | }, 611 | "node_modules/postcss-js": { 612 | "version": "4.0.1", 613 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 614 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 615 | "dependencies": { 616 | "camelcase-css": "^2.0.1" 617 | }, 618 | "engines": { 619 | "node": "^12 || ^14 || >= 16" 620 | }, 621 | "funding": { 622 | "type": "opencollective", 623 | "url": "https://opencollective.com/postcss/" 624 | }, 625 | "peerDependencies": { 626 | "postcss": "^8.4.21" 627 | } 628 | }, 629 | "node_modules/postcss-load-config": { 630 | "version": "4.0.1", 631 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", 632 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", 633 | "dependencies": { 634 | "lilconfig": "^2.0.5", 635 | "yaml": "^2.1.1" 636 | }, 637 | "engines": { 638 | "node": ">= 14" 639 | }, 640 | "funding": { 641 | "type": "opencollective", 642 | "url": "https://opencollective.com/postcss/" 643 | }, 644 | "peerDependencies": { 645 | "postcss": ">=8.0.9", 646 | "ts-node": ">=9.0.0" 647 | }, 648 | "peerDependenciesMeta": { 649 | "postcss": { 650 | "optional": true 651 | }, 652 | "ts-node": { 653 | "optional": true 654 | } 655 | } 656 | }, 657 | "node_modules/postcss-nested": { 658 | "version": "6.0.1", 659 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 660 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 661 | "dependencies": { 662 | "postcss-selector-parser": "^6.0.11" 663 | }, 664 | "engines": { 665 | "node": ">=12.0" 666 | }, 667 | "funding": { 668 | "type": "opencollective", 669 | "url": "https://opencollective.com/postcss/" 670 | }, 671 | "peerDependencies": { 672 | "postcss": "^8.2.14" 673 | } 674 | }, 675 | "node_modules/postcss-selector-parser": { 676 | "version": "6.0.11", 677 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", 678 | "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", 679 | "dependencies": { 680 | "cssesc": "^3.0.0", 681 | "util-deprecate": "^1.0.2" 682 | }, 683 | "engines": { 684 | "node": ">=4" 685 | } 686 | }, 687 | "node_modules/postcss-value-parser": { 688 | "version": "4.2.0", 689 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 690 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 691 | }, 692 | "node_modules/queue-microtask": { 693 | "version": "1.2.3", 694 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 695 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 696 | "funding": [ 697 | { 698 | "type": "github", 699 | "url": "https://github.com/sponsors/feross" 700 | }, 701 | { 702 | "type": "patreon", 703 | "url": "https://www.patreon.com/feross" 704 | }, 705 | { 706 | "type": "consulting", 707 | "url": "https://feross.org/support" 708 | } 709 | ] 710 | }, 711 | "node_modules/read-cache": { 712 | "version": "1.0.0", 713 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 714 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 715 | "dependencies": { 716 | "pify": "^2.3.0" 717 | } 718 | }, 719 | "node_modules/readdirp": { 720 | "version": "3.6.0", 721 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 722 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 723 | "dependencies": { 724 | "picomatch": "^2.2.1" 725 | }, 726 | "engines": { 727 | "node": ">=8.10.0" 728 | } 729 | }, 730 | "node_modules/resolve": { 731 | "version": "1.22.2", 732 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", 733 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", 734 | "dependencies": { 735 | "is-core-module": "^2.11.0", 736 | "path-parse": "^1.0.7", 737 | "supports-preserve-symlinks-flag": "^1.0.0" 738 | }, 739 | "bin": { 740 | "resolve": "bin/resolve" 741 | }, 742 | "funding": { 743 | "url": "https://github.com/sponsors/ljharb" 744 | } 745 | }, 746 | "node_modules/reusify": { 747 | "version": "1.0.4", 748 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 749 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 750 | "engines": { 751 | "iojs": ">=1.0.0", 752 | "node": ">=0.10.0" 753 | } 754 | }, 755 | "node_modules/run-parallel": { 756 | "version": "1.2.0", 757 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 758 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 759 | "funding": [ 760 | { 761 | "type": "github", 762 | "url": "https://github.com/sponsors/feross" 763 | }, 764 | { 765 | "type": "patreon", 766 | "url": "https://www.patreon.com/feross" 767 | }, 768 | { 769 | "type": "consulting", 770 | "url": "https://feross.org/support" 771 | } 772 | ], 773 | "dependencies": { 774 | "queue-microtask": "^1.2.2" 775 | } 776 | }, 777 | "node_modules/source-map-js": { 778 | "version": "1.0.2", 779 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 780 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 781 | "engines": { 782 | "node": ">=0.10.0" 783 | } 784 | }, 785 | "node_modules/sucrase": { 786 | "version": "3.32.0", 787 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", 788 | "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", 789 | "dependencies": { 790 | "@jridgewell/gen-mapping": "^0.3.2", 791 | "commander": "^4.0.0", 792 | "glob": "7.1.6", 793 | "lines-and-columns": "^1.1.6", 794 | "mz": "^2.7.0", 795 | "pirates": "^4.0.1", 796 | "ts-interface-checker": "^0.1.9" 797 | }, 798 | "bin": { 799 | "sucrase": "bin/sucrase", 800 | "sucrase-node": "bin/sucrase-node" 801 | }, 802 | "engines": { 803 | "node": ">=8" 804 | } 805 | }, 806 | "node_modules/supports-preserve-symlinks-flag": { 807 | "version": "1.0.0", 808 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 809 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 810 | "engines": { 811 | "node": ">= 0.4" 812 | }, 813 | "funding": { 814 | "url": "https://github.com/sponsors/ljharb" 815 | } 816 | }, 817 | "node_modules/tailwindcss": { 818 | "version": "3.3.2", 819 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", 820 | "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", 821 | "dependencies": { 822 | "@alloc/quick-lru": "^5.2.0", 823 | "arg": "^5.0.2", 824 | "chokidar": "^3.5.3", 825 | "didyoumean": "^1.2.2", 826 | "dlv": "^1.1.3", 827 | "fast-glob": "^3.2.12", 828 | "glob-parent": "^6.0.2", 829 | "is-glob": "^4.0.3", 830 | "jiti": "^1.18.2", 831 | "lilconfig": "^2.1.0", 832 | "micromatch": "^4.0.5", 833 | "normalize-path": "^3.0.0", 834 | "object-hash": "^3.0.0", 835 | "picocolors": "^1.0.0", 836 | "postcss": "^8.4.23", 837 | "postcss-import": "^15.1.0", 838 | "postcss-js": "^4.0.1", 839 | "postcss-load-config": "^4.0.1", 840 | "postcss-nested": "^6.0.1", 841 | "postcss-selector-parser": "^6.0.11", 842 | "postcss-value-parser": "^4.2.0", 843 | "resolve": "^1.22.2", 844 | "sucrase": "^3.32.0" 845 | }, 846 | "bin": { 847 | "tailwind": "lib/cli.js", 848 | "tailwindcss": "lib/cli.js" 849 | }, 850 | "engines": { 851 | "node": ">=14.0.0" 852 | } 853 | }, 854 | "node_modules/thenify": { 855 | "version": "3.3.1", 856 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 857 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 858 | "dependencies": { 859 | "any-promise": "^1.0.0" 860 | } 861 | }, 862 | "node_modules/thenify-all": { 863 | "version": "1.6.0", 864 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 865 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 866 | "dependencies": { 867 | "thenify": ">= 3.1.0 < 4" 868 | }, 869 | "engines": { 870 | "node": ">=0.8" 871 | } 872 | }, 873 | "node_modules/to-regex-range": { 874 | "version": "5.0.1", 875 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 876 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 877 | "dependencies": { 878 | "is-number": "^7.0.0" 879 | }, 880 | "engines": { 881 | "node": ">=8.0" 882 | } 883 | }, 884 | "node_modules/ts-interface-checker": { 885 | "version": "0.1.13", 886 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 887 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" 888 | }, 889 | "node_modules/util-deprecate": { 890 | "version": "1.0.2", 891 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 892 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 893 | }, 894 | "node_modules/wrappy": { 895 | "version": "1.0.2", 896 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 897 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 898 | }, 899 | "node_modules/yaml": { 900 | "version": "2.2.2", 901 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", 902 | "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", 903 | "engines": { 904 | "node": ">= 14" 905 | } 906 | } 907 | } 908 | } 909 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chatgpt-clone", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "tailwind": "npx tailwindcss -i ./static/input.css -o ./static/css/main.css --watch" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "tailwindcss": "^3.3.2" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | CodeWithHarry YouTube video source code for [ChatGPT clone:](https://www.youtube.com/watch?v=OAr6AIvH9VY) 2 | -------------------------------------------------------------------------------- /static/css/main.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.3.2 | 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. Correct the odd `em` font sizing in all browsers. 126 | */ 127 | 128 | code, 129 | kbd, 130 | samp, 131 | pre { 132 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 133 | /* 1 */ 134 | font-size: 1em; 135 | /* 2 */ 136 | } 137 | 138 | /* 139 | Add the correct font size in all browsers. 140 | */ 141 | 142 | small { 143 | font-size: 80%; 144 | } 145 | 146 | /* 147 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 148 | */ 149 | 150 | sub, 151 | sup { 152 | font-size: 75%; 153 | line-height: 0; 154 | position: relative; 155 | vertical-align: baseline; 156 | } 157 | 158 | sub { 159 | bottom: -0.25em; 160 | } 161 | 162 | sup { 163 | top: -0.5em; 164 | } 165 | 166 | /* 167 | 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) 168 | 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) 169 | 3. Remove gaps between table borders by default. 170 | */ 171 | 172 | table { 173 | text-indent: 0; 174 | /* 1 */ 175 | border-color: inherit; 176 | /* 2 */ 177 | border-collapse: collapse; 178 | /* 3 */ 179 | } 180 | 181 | /* 182 | 1. Change the font styles in all browsers. 183 | 2. Remove the margin in Firefox and Safari. 184 | 3. Remove default padding in all browsers. 185 | */ 186 | 187 | button, 188 | input, 189 | optgroup, 190 | select, 191 | textarea { 192 | font-family: inherit; 193 | /* 1 */ 194 | font-size: 100%; 195 | /* 1 */ 196 | font-weight: inherit; 197 | /* 1 */ 198 | line-height: inherit; 199 | /* 1 */ 200 | color: inherit; 201 | /* 1 */ 202 | margin: 0; 203 | /* 2 */ 204 | padding: 0; 205 | /* 3 */ 206 | } 207 | 208 | /* 209 | Remove the inheritance of text transform in Edge and Firefox. 210 | */ 211 | 212 | button, 213 | select { 214 | text-transform: none; 215 | } 216 | 217 | /* 218 | 1. Correct the inability to style clickable types in iOS and Safari. 219 | 2. Remove default button styles. 220 | */ 221 | 222 | button, 223 | [type='button'], 224 | [type='reset'], 225 | [type='submit'] { 226 | -webkit-appearance: button; 227 | /* 1 */ 228 | background-color: transparent; 229 | /* 2 */ 230 | background-image: none; 231 | /* 2 */ 232 | } 233 | 234 | /* 235 | Use the modern Firefox focus style for all focusable elements. 236 | */ 237 | 238 | :-moz-focusring { 239 | outline: auto; 240 | } 241 | 242 | /* 243 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 244 | */ 245 | 246 | :-moz-ui-invalid { 247 | box-shadow: none; 248 | } 249 | 250 | /* 251 | Add the correct vertical alignment in Chrome and Firefox. 252 | */ 253 | 254 | progress { 255 | vertical-align: baseline; 256 | } 257 | 258 | /* 259 | Correct the cursor style of increment and decrement buttons in Safari. 260 | */ 261 | 262 | ::-webkit-inner-spin-button, 263 | ::-webkit-outer-spin-button { 264 | height: auto; 265 | } 266 | 267 | /* 268 | 1. Correct the odd appearance in Chrome and Safari. 269 | 2. Correct the outline style in Safari. 270 | */ 271 | 272 | [type='search'] { 273 | -webkit-appearance: textfield; 274 | /* 1 */ 275 | outline-offset: -2px; 276 | /* 2 */ 277 | } 278 | 279 | /* 280 | Remove the inner padding in Chrome and Safari on macOS. 281 | */ 282 | 283 | ::-webkit-search-decoration { 284 | -webkit-appearance: none; 285 | } 286 | 287 | /* 288 | 1. Correct the inability to style clickable types in iOS and Safari. 289 | 2. Change font properties to `inherit` in Safari. 290 | */ 291 | 292 | ::-webkit-file-upload-button { 293 | -webkit-appearance: button; 294 | /* 1 */ 295 | font: inherit; 296 | /* 2 */ 297 | } 298 | 299 | /* 300 | Add the correct display in Chrome and Safari. 301 | */ 302 | 303 | summary { 304 | display: list-item; 305 | } 306 | 307 | /* 308 | Removes the default spacing and border for appropriate elements. 309 | */ 310 | 311 | blockquote, 312 | dl, 313 | dd, 314 | h1, 315 | h2, 316 | h3, 317 | h4, 318 | h5, 319 | h6, 320 | hr, 321 | figure, 322 | p, 323 | pre { 324 | margin: 0; 325 | } 326 | 327 | fieldset { 328 | margin: 0; 329 | padding: 0; 330 | } 331 | 332 | legend { 333 | padding: 0; 334 | } 335 | 336 | ol, 337 | ul, 338 | menu { 339 | list-style: none; 340 | margin: 0; 341 | padding: 0; 342 | } 343 | 344 | /* 345 | Prevent resizing textareas horizontally by default. 346 | */ 347 | 348 | textarea { 349 | resize: vertical; 350 | } 351 | 352 | /* 353 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 354 | 2. Set the default placeholder color to the user's configured gray 400 color. 355 | */ 356 | 357 | input::-moz-placeholder, textarea::-moz-placeholder { 358 | opacity: 1; 359 | /* 1 */ 360 | color: #9ca3af; 361 | /* 2 */ 362 | } 363 | 364 | input::placeholder, 365 | textarea::placeholder { 366 | opacity: 1; 367 | /* 1 */ 368 | color: #9ca3af; 369 | /* 2 */ 370 | } 371 | 372 | /* 373 | Set the default cursor for buttons. 374 | */ 375 | 376 | button, 377 | [role="button"] { 378 | cursor: pointer; 379 | } 380 | 381 | /* 382 | Make sure disabled buttons don't get the pointer cursor. 383 | */ 384 | 385 | :disabled { 386 | cursor: default; 387 | } 388 | 389 | /* 390 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 391 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 392 | This can trigger a poorly considered lint error in some tools but is included by design. 393 | */ 394 | 395 | img, 396 | svg, 397 | video, 398 | canvas, 399 | audio, 400 | iframe, 401 | embed, 402 | object { 403 | display: block; 404 | /* 1 */ 405 | vertical-align: middle; 406 | /* 2 */ 407 | } 408 | 409 | /* 410 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 411 | */ 412 | 413 | img, 414 | video { 415 | max-width: 100%; 416 | height: auto; 417 | } 418 | 419 | /* Make elements with the HTML hidden attribute stay hidden by default */ 420 | 421 | [hidden] { 422 | display: none; 423 | } 424 | 425 | *, ::before, ::after { 426 | --tw-border-spacing-x: 0; 427 | --tw-border-spacing-y: 0; 428 | --tw-translate-x: 0; 429 | --tw-translate-y: 0; 430 | --tw-rotate: 0; 431 | --tw-skew-x: 0; 432 | --tw-skew-y: 0; 433 | --tw-scale-x: 1; 434 | --tw-scale-y: 1; 435 | --tw-pan-x: ; 436 | --tw-pan-y: ; 437 | --tw-pinch-zoom: ; 438 | --tw-scroll-snap-strictness: proximity; 439 | --tw-gradient-from-position: ; 440 | --tw-gradient-via-position: ; 441 | --tw-gradient-to-position: ; 442 | --tw-ordinal: ; 443 | --tw-slashed-zero: ; 444 | --tw-numeric-figure: ; 445 | --tw-numeric-spacing: ; 446 | --tw-numeric-fraction: ; 447 | --tw-ring-inset: ; 448 | --tw-ring-offset-width: 0px; 449 | --tw-ring-offset-color: #fff; 450 | --tw-ring-color: rgb(59 130 246 / 0.5); 451 | --tw-ring-offset-shadow: 0 0 #0000; 452 | --tw-ring-shadow: 0 0 #0000; 453 | --tw-shadow: 0 0 #0000; 454 | --tw-shadow-colored: 0 0 #0000; 455 | --tw-blur: ; 456 | --tw-brightness: ; 457 | --tw-contrast: ; 458 | --tw-grayscale: ; 459 | --tw-hue-rotate: ; 460 | --tw-invert: ; 461 | --tw-saturate: ; 462 | --tw-sepia: ; 463 | --tw-drop-shadow: ; 464 | --tw-backdrop-blur: ; 465 | --tw-backdrop-brightness: ; 466 | --tw-backdrop-contrast: ; 467 | --tw-backdrop-grayscale: ; 468 | --tw-backdrop-hue-rotate: ; 469 | --tw-backdrop-invert: ; 470 | --tw-backdrop-opacity: ; 471 | --tw-backdrop-saturate: ; 472 | --tw-backdrop-sepia: ; 473 | } 474 | 475 | ::backdrop { 476 | --tw-border-spacing-x: 0; 477 | --tw-border-spacing-y: 0; 478 | --tw-translate-x: 0; 479 | --tw-translate-y: 0; 480 | --tw-rotate: 0; 481 | --tw-skew-x: 0; 482 | --tw-skew-y: 0; 483 | --tw-scale-x: 1; 484 | --tw-scale-y: 1; 485 | --tw-pan-x: ; 486 | --tw-pan-y: ; 487 | --tw-pinch-zoom: ; 488 | --tw-scroll-snap-strictness: proximity; 489 | --tw-gradient-from-position: ; 490 | --tw-gradient-via-position: ; 491 | --tw-gradient-to-position: ; 492 | --tw-ordinal: ; 493 | --tw-slashed-zero: ; 494 | --tw-numeric-figure: ; 495 | --tw-numeric-spacing: ; 496 | --tw-numeric-fraction: ; 497 | --tw-ring-inset: ; 498 | --tw-ring-offset-width: 0px; 499 | --tw-ring-offset-color: #fff; 500 | --tw-ring-color: rgb(59 130 246 / 0.5); 501 | --tw-ring-offset-shadow: 0 0 #0000; 502 | --tw-ring-shadow: 0 0 #0000; 503 | --tw-shadow: 0 0 #0000; 504 | --tw-shadow-colored: 0 0 #0000; 505 | --tw-blur: ; 506 | --tw-brightness: ; 507 | --tw-contrast: ; 508 | --tw-grayscale: ; 509 | --tw-hue-rotate: ; 510 | --tw-invert: ; 511 | --tw-saturate: ; 512 | --tw-sepia: ; 513 | --tw-drop-shadow: ; 514 | --tw-backdrop-blur: ; 515 | --tw-backdrop-brightness: ; 516 | --tw-backdrop-contrast: ; 517 | --tw-backdrop-grayscale: ; 518 | --tw-backdrop-hue-rotate: ; 519 | --tw-backdrop-invert: ; 520 | --tw-backdrop-opacity: ; 521 | --tw-backdrop-saturate: ; 522 | --tw-backdrop-sepia: ; 523 | } 524 | 525 | .relative { 526 | position: relative; 527 | } 528 | 529 | .-left-20 { 530 | left: -5rem; 531 | } 532 | 533 | .m-2 { 534 | margin: 0.5rem; 535 | } 536 | 537 | .m-4 { 538 | margin: 1rem; 539 | } 540 | 541 | .m-auto { 542 | margin: auto; 543 | } 544 | 545 | .mx-4 { 546 | margin-left: 1rem; 547 | margin-right: 1rem; 548 | } 549 | 550 | .mx-8 { 551 | margin-left: 2rem; 552 | margin-right: 2rem; 553 | } 554 | 555 | .my-10 { 556 | margin-top: 2.5rem; 557 | margin-bottom: 2.5rem; 558 | } 559 | 560 | .my-2 { 561 | margin-top: 0.5rem; 562 | margin-bottom: 0.5rem; 563 | } 564 | 565 | .my-24 { 566 | margin-top: 6rem; 567 | margin-bottom: 6rem; 568 | } 569 | 570 | .mr-1 { 571 | margin-right: 0.25rem; 572 | } 573 | 574 | .mt-52 { 575 | margin-top: 13rem; 576 | } 577 | 578 | .flex { 579 | display: flex; 580 | } 581 | 582 | .h-4 { 583 | height: 1rem; 584 | } 585 | 586 | .h-6 { 587 | height: 1.5rem; 588 | } 589 | 590 | .h-9 { 591 | height: 2.25rem; 592 | } 593 | 594 | .h-\[100vh\] { 595 | height: 100vh; 596 | } 597 | 598 | .h-fit { 599 | height: -moz-fit-content; 600 | height: fit-content; 601 | } 602 | 603 | .w-10\/12 { 604 | width: 83.333333%; 605 | } 606 | 607 | .w-2\/12 { 608 | width: 16.666667%; 609 | } 610 | 611 | .w-4 { 612 | width: 1rem; 613 | } 614 | 615 | .w-6 { 616 | width: 1.5rem; 617 | } 618 | 619 | .w-9 { 620 | width: 2.25rem; 621 | } 622 | 623 | .w-\[13vw\] { 624 | width: 13vw; 625 | } 626 | 627 | .w-\[40vw\] { 628 | width: 40vw; 629 | } 630 | 631 | .w-\[43vw\] { 632 | width: 43vw; 633 | } 634 | 635 | .w-\[50vw\] { 636 | width: 50vw; 637 | } 638 | 639 | .w-\[90\%\] { 640 | width: 90%; 641 | } 642 | 643 | .w-full { 644 | width: 100%; 645 | } 646 | 647 | .cursor-pointer { 648 | cursor: pointer; 649 | } 650 | 651 | .flex-col { 652 | flex-direction: column; 653 | } 654 | 655 | .items-center { 656 | align-items: center; 657 | } 658 | 659 | .justify-start { 660 | justify-content: flex-start; 661 | } 662 | 663 | .justify-center { 664 | justify-content: center; 665 | } 666 | 667 | .justify-around { 668 | justify-content: space-around; 669 | } 670 | 671 | .space-x-2 > :not([hidden]) ~ :not([hidden]) { 672 | --tw-space-x-reverse: 0; 673 | margin-right: calc(0.5rem * var(--tw-space-x-reverse)); 674 | margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); 675 | } 676 | 677 | .space-x-6 > :not([hidden]) ~ :not([hidden]) { 678 | --tw-space-x-reverse: 0; 679 | margin-right: calc(1.5rem * var(--tw-space-x-reverse)); 680 | margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse))); 681 | } 682 | 683 | .space-y-4 > :not([hidden]) ~ :not([hidden]) { 684 | --tw-space-y-reverse: 0; 685 | margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse))); 686 | margin-bottom: calc(1rem * var(--tw-space-y-reverse)); 687 | } 688 | 689 | .space-y-2 > :not([hidden]) ~ :not([hidden]) { 690 | --tw-space-y-reverse: 0; 691 | margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); 692 | margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); 693 | } 694 | 695 | .rounded-md { 696 | border-radius: 0.375rem; 697 | } 698 | 699 | .border { 700 | border-width: 1px; 701 | } 702 | 703 | .border-white { 704 | --tw-border-opacity: 1; 705 | border-color: rgb(255 255 255 / var(--tw-border-opacity)); 706 | } 707 | 708 | .bg-\[\#202123\] { 709 | --tw-bg-opacity: 1; 710 | background-color: rgb(32 33 35 / var(--tw-bg-opacity)); 711 | } 712 | 713 | .bg-chatblack-50 { 714 | --tw-bg-opacity: 1; 715 | background-color: rgb(52 53 65 / var(--tw-bg-opacity)); 716 | } 717 | 718 | .bg-gray-600 { 719 | --tw-bg-opacity: 1; 720 | background-color: rgb(75 85 99 / var(--tw-bg-opacity)); 721 | } 722 | 723 | .p-4 { 724 | padding: 1rem; 725 | } 726 | 727 | .px-10 { 728 | padding-left: 2.5rem; 729 | padding-right: 2.5rem; 730 | } 731 | 732 | .px-4 { 733 | padding-left: 1rem; 734 | padding-right: 1rem; 735 | } 736 | 737 | .px-5 { 738 | padding-left: 1.25rem; 739 | padding-right: 1.25rem; 740 | } 741 | 742 | .py-2 { 743 | padding-top: 0.5rem; 744 | padding-bottom: 0.5rem; 745 | } 746 | 747 | .py-4 { 748 | padding-top: 1rem; 749 | padding-bottom: 1rem; 750 | } 751 | 752 | .py-7 { 753 | padding-top: 1.75rem; 754 | padding-bottom: 1.75rem; 755 | } 756 | 757 | .pl-10 { 758 | padding-left: 2.5rem; 759 | } 760 | 761 | .pl-16 { 762 | padding-left: 4rem; 763 | } 764 | 765 | .pr-10 { 766 | padding-right: 2.5rem; 767 | } 768 | 769 | .pt-80 { 770 | padding-top: 20rem; 771 | } 772 | 773 | .text-center { 774 | text-align: center; 775 | } 776 | 777 | .text-4xl { 778 | font-size: 2.25rem; 779 | line-height: 2.5rem; 780 | } 781 | 782 | .text-sm { 783 | font-size: 0.875rem; 784 | line-height: 1.25rem; 785 | } 786 | 787 | .text-xs { 788 | font-size: 0.75rem; 789 | line-height: 1rem; 790 | } 791 | 792 | .font-bold { 793 | font-weight: 700; 794 | } 795 | 796 | .text-gray-400 { 797 | --tw-text-opacity: 1; 798 | color: rgb(156 163 175 / var(--tw-text-opacity)); 799 | } 800 | 801 | .text-white { 802 | --tw-text-opacity: 1; 803 | color: rgb(255 255 255 / var(--tw-text-opacity)); 804 | } 805 | 806 | .underline { 807 | text-decoration-line: underline; 808 | } 809 | 810 | .opacity-70 { 811 | opacity: 0.7; 812 | } 813 | 814 | .opacity-80 { 815 | opacity: 0.8; 816 | } 817 | 818 | .hover\:bg-gray-700:hover { 819 | --tw-bg-opacity: 1; 820 | background-color: rgb(55 65 81 / var(--tw-bg-opacity)); 821 | } 822 | 823 | .hover\:opacity-70:hover { 824 | opacity: 0.7; 825 | } -------------------------------------------------------------------------------- /static/input.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /static/js/script.js: -------------------------------------------------------------------------------- 1 | // Example POST method implementation: 2 | async function postData(url = "", data = {}) { 3 | const response = await fetch(url, { 4 | method: "POST", headers: { 5 | "Content-Type": "application/json", 6 | }, body: JSON.stringify(data), 7 | }); 8 | return response.json(); 9 | } 10 | 11 | sendButton.addEventListener("click", async ()=>{ 12 | questionInput = document.getElementById("questionInput").value; 13 | document.getElementById("questionInput").value = ""; 14 | document.querySelector(".right2").style.display = "block" 15 | document.querySelector(".right1").style.display = "none" 16 | 17 | question1.innerHTML = questionInput; 18 | question2.innerHTML = questionInput; 19 | 20 | // Get the answer and populate it! 21 | let result = await postData("/api", {"question": questionInput}) 22 | solution.innerHTML = result.answer 23 | }) -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./templates/*.html"], 4 | theme: { 5 | extend: { 6 | colors:{ 7 | chatblack: {50: '#343541'} 8 | } 9 | }, 10 | }, 11 | plugins: [], 12 | } 13 | 14 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | New chat 16 | 17 | 18 | 19 |
20 |
21 | 22 | 31 |
Today
32 |
33 | 34 | 35 | {% for chat in myChats %} 36 |
37 | 40 | 41 | 42 | {{chat.question}} 43 |
44 | {% endfor %} 45 | 46 |
47 | 48 |
49 | 50 | 51 |
52 |
53 | ChatGPT 54 |
55 |
56 |
57 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 |
Examples
71 | 74 | 76 | 78 |
79 |
80 | 85 |
Capabilities
86 | 89 | 92 | 95 |
96 | 97 |
98 | 101 | 103 | 104 | 105 | 106 | 107 |
Limitations
108 | 110 | 112 | 115 |
116 |
117 | 118 |
119 |
120 | 122 | 123 | 131 |
132 |
Free Research Preview. ChatGPT may produce inaccurate 133 | information about people, places, or facts. ChatGPT Mar 23 135 | Version
136 |
137 |
138 | 139 |
140 |
141 | 144 |
Loading...
145 |
146 |
147 |
148 | 149 |
150 |
Loading...
151 |
Loading...
152 |
153 |
154 |
155 | 156 |
157 |
158 | 160 | 161 | 169 |
170 |
Free Research Preview. ChatGPT may produce inaccurate 171 | information about people, places, or facts. ChatGPT Mar 23 173 | Version
174 |
175 | 176 |
177 | 178 |
179 | 180 | 181 | 182 | --------------------------------------------------------------------------------