Spaces:
Running
Running
Commit ·
7db2a6d
1
Parent(s): 656995f
commit update 0000001
Browse files- package-lock.json +490 -4
- package.json +3 -0
- public/index.html +1 -1
- src/App.css +108 -0
- src/App.js +75 -27
- src/components/ChatBox.css +66 -1
- src/components/ChatBox.jsx +67 -22
- src/components/ChatInput.jsx +1 -1
- src/index.css +17 -16
package-lock.json
CHANGED
|
@@ -8,6 +8,9 @@
|
|
| 8 |
"name": "react-template",
|
| 9 |
"version": "0.1.0",
|
| 10 |
"dependencies": {
|
|
|
|
|
|
|
|
|
|
| 11 |
"@testing-library/dom": "^10.4.0",
|
| 12 |
"@testing-library/jest-dom": "^6.6.3",
|
| 13 |
"@testing-library/react": "^16.3.0",
|
|
@@ -2380,6 +2383,167 @@
|
|
| 2380 |
"postcss-selector-parser": "^6.0.10"
|
| 2381 |
}
|
| 2382 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2383 |
"node_modules/@eslint-community/eslint-utils": {
|
| 2384 |
"version": "4.7.0",
|
| 2385 |
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
|
|
@@ -2952,6 +3116,225 @@
|
|
| 2952 |
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
|
| 2953 |
"license": "MIT"
|
| 2954 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2955 |
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
|
| 2956 |
"version": "5.1.1-v1",
|
| 2957 |
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
|
|
@@ -3076,6 +3459,16 @@
|
|
| 3076 |
}
|
| 3077 |
}
|
| 3078 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3079 |
"node_modules/@rollup/plugin-babel": {
|
| 3080 |
"version": "5.3.1",
|
| 3081 |
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
|
@@ -3801,6 +4194,12 @@
|
|
| 3801 |
"integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
|
| 3802 |
"license": "MIT"
|
| 3803 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3804 |
"node_modules/@types/q": {
|
| 3805 |
"version": "1.5.8",
|
| 3806 |
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
|
|
@@ -3819,6 +4218,25 @@
|
|
| 3819 |
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
|
| 3820 |
"license": "MIT"
|
| 3821 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3822 |
"node_modules/@types/resolve": {
|
| 3823 |
"version": "1.17.1",
|
| 3824 |
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
|
@@ -5683,6 +6101,15 @@
|
|
| 5683 |
"wrap-ansi": "^7.0.0"
|
| 5684 |
}
|
| 5685 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5686 |
"node_modules/co": {
|
| 5687 |
"version": "4.6.0",
|
| 5688 |
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
|
@@ -6423,6 +6850,12 @@
|
|
| 6423 |
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
|
| 6424 |
"license": "MIT"
|
| 6425 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6426 |
"node_modules/damerau-levenshtein": {
|
| 6427 |
"version": "1.0.8",
|
| 6428 |
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
|
|
@@ -6749,6 +7182,16 @@
|
|
| 6749 |
"utila": "~0.4"
|
| 6750 |
}
|
| 6751 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6752 |
"node_modules/dom-serializer": {
|
| 6753 |
"version": "1.4.1",
|
| 6754 |
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
|
|
@@ -8215,6 +8658,12 @@
|
|
| 8215 |
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
|
| 8216 |
}
|
| 8217 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8218 |
"node_modules/find-up": {
|
| 8219 |
"version": "4.1.0",
|
| 8220 |
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
|
@@ -8957,6 +9406,21 @@
|
|
| 8957 |
"integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
|
| 8958 |
"license": "CC0-1.0"
|
| 8959 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8960 |
"node_modules/hoopy": {
|
| 8961 |
"version": "0.1.4",
|
| 8962 |
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
|
|
@@ -14233,6 +14697,22 @@
|
|
| 14233 |
"react": ">= 0.14.0"
|
| 14234 |
}
|
| 14235 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14236 |
"node_modules/read-cache": {
|
| 14237 |
"version": "1.0.0",
|
| 14238 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
|
@@ -15850,6 +16330,12 @@
|
|
| 15850 |
"postcss": "^8.2.15"
|
| 15851 |
}
|
| 15852 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15853 |
"node_modules/sucrase": {
|
| 15854 |
"version": "3.35.0",
|
| 15855 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
|
|
@@ -16621,9 +17107,9 @@
|
|
| 16621 |
}
|
| 16622 |
},
|
| 16623 |
"node_modules/typescript": {
|
| 16624 |
-
"version": "
|
| 16625 |
-
"resolved": "https://registry.npmjs.org/typescript/-/typescript-
|
| 16626 |
-
"integrity": "sha512-
|
| 16627 |
"license": "Apache-2.0",
|
| 16628 |
"peer": true,
|
| 16629 |
"bin": {
|
|
@@ -16631,7 +17117,7 @@
|
|
| 16631 |
"tsserver": "bin/tsserver"
|
| 16632 |
},
|
| 16633 |
"engines": {
|
| 16634 |
-
"node": ">=
|
| 16635 |
}
|
| 16636 |
},
|
| 16637 |
"node_modules/unbox-primitive": {
|
|
|
|
| 8 |
"name": "react-template",
|
| 9 |
"version": "0.1.0",
|
| 10 |
"dependencies": {
|
| 11 |
+
"@emotion/react": "^11.14.0",
|
| 12 |
+
"@emotion/styled": "^11.14.1",
|
| 13 |
+
"@mui/material": "^7.2.0",
|
| 14 |
"@testing-library/dom": "^10.4.0",
|
| 15 |
"@testing-library/jest-dom": "^6.6.3",
|
| 16 |
"@testing-library/react": "^16.3.0",
|
|
|
|
| 2383 |
"postcss-selector-parser": "^6.0.10"
|
| 2384 |
}
|
| 2385 |
},
|
| 2386 |
+
"node_modules/@emotion/babel-plugin": {
|
| 2387 |
+
"version": "11.13.5",
|
| 2388 |
+
"resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
|
| 2389 |
+
"integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
|
| 2390 |
+
"license": "MIT",
|
| 2391 |
+
"dependencies": {
|
| 2392 |
+
"@babel/helper-module-imports": "^7.16.7",
|
| 2393 |
+
"@babel/runtime": "^7.18.3",
|
| 2394 |
+
"@emotion/hash": "^0.9.2",
|
| 2395 |
+
"@emotion/memoize": "^0.9.0",
|
| 2396 |
+
"@emotion/serialize": "^1.3.3",
|
| 2397 |
+
"babel-plugin-macros": "^3.1.0",
|
| 2398 |
+
"convert-source-map": "^1.5.0",
|
| 2399 |
+
"escape-string-regexp": "^4.0.0",
|
| 2400 |
+
"find-root": "^1.1.0",
|
| 2401 |
+
"source-map": "^0.5.7",
|
| 2402 |
+
"stylis": "4.2.0"
|
| 2403 |
+
}
|
| 2404 |
+
},
|
| 2405 |
+
"node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
|
| 2406 |
+
"version": "1.9.0",
|
| 2407 |
+
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
|
| 2408 |
+
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
|
| 2409 |
+
"license": "MIT"
|
| 2410 |
+
},
|
| 2411 |
+
"node_modules/@emotion/babel-plugin/node_modules/source-map": {
|
| 2412 |
+
"version": "0.5.7",
|
| 2413 |
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
| 2414 |
+
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
|
| 2415 |
+
"license": "BSD-3-Clause",
|
| 2416 |
+
"engines": {
|
| 2417 |
+
"node": ">=0.10.0"
|
| 2418 |
+
}
|
| 2419 |
+
},
|
| 2420 |
+
"node_modules/@emotion/cache": {
|
| 2421 |
+
"version": "11.14.0",
|
| 2422 |
+
"resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
|
| 2423 |
+
"integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
|
| 2424 |
+
"license": "MIT",
|
| 2425 |
+
"dependencies": {
|
| 2426 |
+
"@emotion/memoize": "^0.9.0",
|
| 2427 |
+
"@emotion/sheet": "^1.4.0",
|
| 2428 |
+
"@emotion/utils": "^1.4.2",
|
| 2429 |
+
"@emotion/weak-memoize": "^0.4.0",
|
| 2430 |
+
"stylis": "4.2.0"
|
| 2431 |
+
}
|
| 2432 |
+
},
|
| 2433 |
+
"node_modules/@emotion/hash": {
|
| 2434 |
+
"version": "0.9.2",
|
| 2435 |
+
"resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
|
| 2436 |
+
"integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
|
| 2437 |
+
"license": "MIT"
|
| 2438 |
+
},
|
| 2439 |
+
"node_modules/@emotion/is-prop-valid": {
|
| 2440 |
+
"version": "1.3.1",
|
| 2441 |
+
"resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz",
|
| 2442 |
+
"integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==",
|
| 2443 |
+
"license": "MIT",
|
| 2444 |
+
"dependencies": {
|
| 2445 |
+
"@emotion/memoize": "^0.9.0"
|
| 2446 |
+
}
|
| 2447 |
+
},
|
| 2448 |
+
"node_modules/@emotion/memoize": {
|
| 2449 |
+
"version": "0.9.0",
|
| 2450 |
+
"resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
|
| 2451 |
+
"integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
|
| 2452 |
+
"license": "MIT"
|
| 2453 |
+
},
|
| 2454 |
+
"node_modules/@emotion/react": {
|
| 2455 |
+
"version": "11.14.0",
|
| 2456 |
+
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
|
| 2457 |
+
"integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
|
| 2458 |
+
"license": "MIT",
|
| 2459 |
+
"dependencies": {
|
| 2460 |
+
"@babel/runtime": "^7.18.3",
|
| 2461 |
+
"@emotion/babel-plugin": "^11.13.5",
|
| 2462 |
+
"@emotion/cache": "^11.14.0",
|
| 2463 |
+
"@emotion/serialize": "^1.3.3",
|
| 2464 |
+
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
|
| 2465 |
+
"@emotion/utils": "^1.4.2",
|
| 2466 |
+
"@emotion/weak-memoize": "^0.4.0",
|
| 2467 |
+
"hoist-non-react-statics": "^3.3.1"
|
| 2468 |
+
},
|
| 2469 |
+
"peerDependencies": {
|
| 2470 |
+
"react": ">=16.8.0"
|
| 2471 |
+
},
|
| 2472 |
+
"peerDependenciesMeta": {
|
| 2473 |
+
"@types/react": {
|
| 2474 |
+
"optional": true
|
| 2475 |
+
}
|
| 2476 |
+
}
|
| 2477 |
+
},
|
| 2478 |
+
"node_modules/@emotion/serialize": {
|
| 2479 |
+
"version": "1.3.3",
|
| 2480 |
+
"resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
|
| 2481 |
+
"integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
|
| 2482 |
+
"license": "MIT",
|
| 2483 |
+
"dependencies": {
|
| 2484 |
+
"@emotion/hash": "^0.9.2",
|
| 2485 |
+
"@emotion/memoize": "^0.9.0",
|
| 2486 |
+
"@emotion/unitless": "^0.10.0",
|
| 2487 |
+
"@emotion/utils": "^1.4.2",
|
| 2488 |
+
"csstype": "^3.0.2"
|
| 2489 |
+
}
|
| 2490 |
+
},
|
| 2491 |
+
"node_modules/@emotion/sheet": {
|
| 2492 |
+
"version": "1.4.0",
|
| 2493 |
+
"resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
|
| 2494 |
+
"integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
|
| 2495 |
+
"license": "MIT"
|
| 2496 |
+
},
|
| 2497 |
+
"node_modules/@emotion/styled": {
|
| 2498 |
+
"version": "11.14.1",
|
| 2499 |
+
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz",
|
| 2500 |
+
"integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
|
| 2501 |
+
"license": "MIT",
|
| 2502 |
+
"dependencies": {
|
| 2503 |
+
"@babel/runtime": "^7.18.3",
|
| 2504 |
+
"@emotion/babel-plugin": "^11.13.5",
|
| 2505 |
+
"@emotion/is-prop-valid": "^1.3.0",
|
| 2506 |
+
"@emotion/serialize": "^1.3.3",
|
| 2507 |
+
"@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
|
| 2508 |
+
"@emotion/utils": "^1.4.2"
|
| 2509 |
+
},
|
| 2510 |
+
"peerDependencies": {
|
| 2511 |
+
"@emotion/react": "^11.0.0-rc.0",
|
| 2512 |
+
"react": ">=16.8.0"
|
| 2513 |
+
},
|
| 2514 |
+
"peerDependenciesMeta": {
|
| 2515 |
+
"@types/react": {
|
| 2516 |
+
"optional": true
|
| 2517 |
+
}
|
| 2518 |
+
}
|
| 2519 |
+
},
|
| 2520 |
+
"node_modules/@emotion/unitless": {
|
| 2521 |
+
"version": "0.10.0",
|
| 2522 |
+
"resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
|
| 2523 |
+
"integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
|
| 2524 |
+
"license": "MIT"
|
| 2525 |
+
},
|
| 2526 |
+
"node_modules/@emotion/use-insertion-effect-with-fallbacks": {
|
| 2527 |
+
"version": "1.2.0",
|
| 2528 |
+
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
|
| 2529 |
+
"integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
|
| 2530 |
+
"license": "MIT",
|
| 2531 |
+
"peerDependencies": {
|
| 2532 |
+
"react": ">=16.8.0"
|
| 2533 |
+
}
|
| 2534 |
+
},
|
| 2535 |
+
"node_modules/@emotion/utils": {
|
| 2536 |
+
"version": "1.4.2",
|
| 2537 |
+
"resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
|
| 2538 |
+
"integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
|
| 2539 |
+
"license": "MIT"
|
| 2540 |
+
},
|
| 2541 |
+
"node_modules/@emotion/weak-memoize": {
|
| 2542 |
+
"version": "0.4.0",
|
| 2543 |
+
"resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
|
| 2544 |
+
"integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
|
| 2545 |
+
"license": "MIT"
|
| 2546 |
+
},
|
| 2547 |
"node_modules/@eslint-community/eslint-utils": {
|
| 2548 |
"version": "4.7.0",
|
| 2549 |
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
|
|
|
|
| 3116 |
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
|
| 3117 |
"license": "MIT"
|
| 3118 |
},
|
| 3119 |
+
"node_modules/@mui/core-downloads-tracker": {
|
| 3120 |
+
"version": "7.2.0",
|
| 3121 |
+
"resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz",
|
| 3122 |
+
"integrity": "sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==",
|
| 3123 |
+
"license": "MIT",
|
| 3124 |
+
"funding": {
|
| 3125 |
+
"type": "opencollective",
|
| 3126 |
+
"url": "https://opencollective.com/mui-org"
|
| 3127 |
+
}
|
| 3128 |
+
},
|
| 3129 |
+
"node_modules/@mui/material": {
|
| 3130 |
+
"version": "7.2.0",
|
| 3131 |
+
"resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz",
|
| 3132 |
+
"integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==",
|
| 3133 |
+
"license": "MIT",
|
| 3134 |
+
"dependencies": {
|
| 3135 |
+
"@babel/runtime": "^7.27.6",
|
| 3136 |
+
"@mui/core-downloads-tracker": "^7.2.0",
|
| 3137 |
+
"@mui/system": "^7.2.0",
|
| 3138 |
+
"@mui/types": "^7.4.4",
|
| 3139 |
+
"@mui/utils": "^7.2.0",
|
| 3140 |
+
"@popperjs/core": "^2.11.8",
|
| 3141 |
+
"@types/react-transition-group": "^4.4.12",
|
| 3142 |
+
"clsx": "^2.1.1",
|
| 3143 |
+
"csstype": "^3.1.3",
|
| 3144 |
+
"prop-types": "^15.8.1",
|
| 3145 |
+
"react-is": "^19.1.0",
|
| 3146 |
+
"react-transition-group": "^4.4.5"
|
| 3147 |
+
},
|
| 3148 |
+
"engines": {
|
| 3149 |
+
"node": ">=14.0.0"
|
| 3150 |
+
},
|
| 3151 |
+
"funding": {
|
| 3152 |
+
"type": "opencollective",
|
| 3153 |
+
"url": "https://opencollective.com/mui-org"
|
| 3154 |
+
},
|
| 3155 |
+
"peerDependencies": {
|
| 3156 |
+
"@emotion/react": "^11.5.0",
|
| 3157 |
+
"@emotion/styled": "^11.3.0",
|
| 3158 |
+
"@mui/material-pigment-css": "^7.2.0",
|
| 3159 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
| 3160 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
| 3161 |
+
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3162 |
+
},
|
| 3163 |
+
"peerDependenciesMeta": {
|
| 3164 |
+
"@emotion/react": {
|
| 3165 |
+
"optional": true
|
| 3166 |
+
},
|
| 3167 |
+
"@emotion/styled": {
|
| 3168 |
+
"optional": true
|
| 3169 |
+
},
|
| 3170 |
+
"@mui/material-pigment-css": {
|
| 3171 |
+
"optional": true
|
| 3172 |
+
},
|
| 3173 |
+
"@types/react": {
|
| 3174 |
+
"optional": true
|
| 3175 |
+
}
|
| 3176 |
+
}
|
| 3177 |
+
},
|
| 3178 |
+
"node_modules/@mui/material/node_modules/react-is": {
|
| 3179 |
+
"version": "19.1.0",
|
| 3180 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz",
|
| 3181 |
+
"integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==",
|
| 3182 |
+
"license": "MIT"
|
| 3183 |
+
},
|
| 3184 |
+
"node_modules/@mui/private-theming": {
|
| 3185 |
+
"version": "7.2.0",
|
| 3186 |
+
"resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz",
|
| 3187 |
+
"integrity": "sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==",
|
| 3188 |
+
"license": "MIT",
|
| 3189 |
+
"dependencies": {
|
| 3190 |
+
"@babel/runtime": "^7.27.6",
|
| 3191 |
+
"@mui/utils": "^7.2.0",
|
| 3192 |
+
"prop-types": "^15.8.1"
|
| 3193 |
+
},
|
| 3194 |
+
"engines": {
|
| 3195 |
+
"node": ">=14.0.0"
|
| 3196 |
+
},
|
| 3197 |
+
"funding": {
|
| 3198 |
+
"type": "opencollective",
|
| 3199 |
+
"url": "https://opencollective.com/mui-org"
|
| 3200 |
+
},
|
| 3201 |
+
"peerDependencies": {
|
| 3202 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
| 3203 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3204 |
+
},
|
| 3205 |
+
"peerDependenciesMeta": {
|
| 3206 |
+
"@types/react": {
|
| 3207 |
+
"optional": true
|
| 3208 |
+
}
|
| 3209 |
+
}
|
| 3210 |
+
},
|
| 3211 |
+
"node_modules/@mui/styled-engine": {
|
| 3212 |
+
"version": "7.2.0",
|
| 3213 |
+
"resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz",
|
| 3214 |
+
"integrity": "sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==",
|
| 3215 |
+
"license": "MIT",
|
| 3216 |
+
"dependencies": {
|
| 3217 |
+
"@babel/runtime": "^7.27.6",
|
| 3218 |
+
"@emotion/cache": "^11.14.0",
|
| 3219 |
+
"@emotion/serialize": "^1.3.3",
|
| 3220 |
+
"@emotion/sheet": "^1.4.0",
|
| 3221 |
+
"csstype": "^3.1.3",
|
| 3222 |
+
"prop-types": "^15.8.1"
|
| 3223 |
+
},
|
| 3224 |
+
"engines": {
|
| 3225 |
+
"node": ">=14.0.0"
|
| 3226 |
+
},
|
| 3227 |
+
"funding": {
|
| 3228 |
+
"type": "opencollective",
|
| 3229 |
+
"url": "https://opencollective.com/mui-org"
|
| 3230 |
+
},
|
| 3231 |
+
"peerDependencies": {
|
| 3232 |
+
"@emotion/react": "^11.4.1",
|
| 3233 |
+
"@emotion/styled": "^11.3.0",
|
| 3234 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3235 |
+
},
|
| 3236 |
+
"peerDependenciesMeta": {
|
| 3237 |
+
"@emotion/react": {
|
| 3238 |
+
"optional": true
|
| 3239 |
+
},
|
| 3240 |
+
"@emotion/styled": {
|
| 3241 |
+
"optional": true
|
| 3242 |
+
}
|
| 3243 |
+
}
|
| 3244 |
+
},
|
| 3245 |
+
"node_modules/@mui/system": {
|
| 3246 |
+
"version": "7.2.0",
|
| 3247 |
+
"resolved": "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz",
|
| 3248 |
+
"integrity": "sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==",
|
| 3249 |
+
"license": "MIT",
|
| 3250 |
+
"dependencies": {
|
| 3251 |
+
"@babel/runtime": "^7.27.6",
|
| 3252 |
+
"@mui/private-theming": "^7.2.0",
|
| 3253 |
+
"@mui/styled-engine": "^7.2.0",
|
| 3254 |
+
"@mui/types": "^7.4.4",
|
| 3255 |
+
"@mui/utils": "^7.2.0",
|
| 3256 |
+
"clsx": "^2.1.1",
|
| 3257 |
+
"csstype": "^3.1.3",
|
| 3258 |
+
"prop-types": "^15.8.1"
|
| 3259 |
+
},
|
| 3260 |
+
"engines": {
|
| 3261 |
+
"node": ">=14.0.0"
|
| 3262 |
+
},
|
| 3263 |
+
"funding": {
|
| 3264 |
+
"type": "opencollective",
|
| 3265 |
+
"url": "https://opencollective.com/mui-org"
|
| 3266 |
+
},
|
| 3267 |
+
"peerDependencies": {
|
| 3268 |
+
"@emotion/react": "^11.5.0",
|
| 3269 |
+
"@emotion/styled": "^11.3.0",
|
| 3270 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
| 3271 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3272 |
+
},
|
| 3273 |
+
"peerDependenciesMeta": {
|
| 3274 |
+
"@emotion/react": {
|
| 3275 |
+
"optional": true
|
| 3276 |
+
},
|
| 3277 |
+
"@emotion/styled": {
|
| 3278 |
+
"optional": true
|
| 3279 |
+
},
|
| 3280 |
+
"@types/react": {
|
| 3281 |
+
"optional": true
|
| 3282 |
+
}
|
| 3283 |
+
}
|
| 3284 |
+
},
|
| 3285 |
+
"node_modules/@mui/types": {
|
| 3286 |
+
"version": "7.4.4",
|
| 3287 |
+
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz",
|
| 3288 |
+
"integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==",
|
| 3289 |
+
"license": "MIT",
|
| 3290 |
+
"dependencies": {
|
| 3291 |
+
"@babel/runtime": "^7.27.6"
|
| 3292 |
+
},
|
| 3293 |
+
"peerDependencies": {
|
| 3294 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3295 |
+
},
|
| 3296 |
+
"peerDependenciesMeta": {
|
| 3297 |
+
"@types/react": {
|
| 3298 |
+
"optional": true
|
| 3299 |
+
}
|
| 3300 |
+
}
|
| 3301 |
+
},
|
| 3302 |
+
"node_modules/@mui/utils": {
|
| 3303 |
+
"version": "7.2.0",
|
| 3304 |
+
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz",
|
| 3305 |
+
"integrity": "sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==",
|
| 3306 |
+
"license": "MIT",
|
| 3307 |
+
"dependencies": {
|
| 3308 |
+
"@babel/runtime": "^7.27.6",
|
| 3309 |
+
"@mui/types": "^7.4.4",
|
| 3310 |
+
"@types/prop-types": "^15.7.15",
|
| 3311 |
+
"clsx": "^2.1.1",
|
| 3312 |
+
"prop-types": "^15.8.1",
|
| 3313 |
+
"react-is": "^19.1.0"
|
| 3314 |
+
},
|
| 3315 |
+
"engines": {
|
| 3316 |
+
"node": ">=14.0.0"
|
| 3317 |
+
},
|
| 3318 |
+
"funding": {
|
| 3319 |
+
"type": "opencollective",
|
| 3320 |
+
"url": "https://opencollective.com/mui-org"
|
| 3321 |
+
},
|
| 3322 |
+
"peerDependencies": {
|
| 3323 |
+
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
| 3324 |
+
"react": "^17.0.0 || ^18.0.0 || ^19.0.0"
|
| 3325 |
+
},
|
| 3326 |
+
"peerDependenciesMeta": {
|
| 3327 |
+
"@types/react": {
|
| 3328 |
+
"optional": true
|
| 3329 |
+
}
|
| 3330 |
+
}
|
| 3331 |
+
},
|
| 3332 |
+
"node_modules/@mui/utils/node_modules/react-is": {
|
| 3333 |
+
"version": "19.1.0",
|
| 3334 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz",
|
| 3335 |
+
"integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==",
|
| 3336 |
+
"license": "MIT"
|
| 3337 |
+
},
|
| 3338 |
"node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
|
| 3339 |
"version": "5.1.1-v1",
|
| 3340 |
"resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
|
|
|
|
| 3459 |
}
|
| 3460 |
}
|
| 3461 |
},
|
| 3462 |
+
"node_modules/@popperjs/core": {
|
| 3463 |
+
"version": "2.11.8",
|
| 3464 |
+
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
|
| 3465 |
+
"integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
|
| 3466 |
+
"license": "MIT",
|
| 3467 |
+
"funding": {
|
| 3468 |
+
"type": "opencollective",
|
| 3469 |
+
"url": "https://opencollective.com/popperjs"
|
| 3470 |
+
}
|
| 3471 |
+
},
|
| 3472 |
"node_modules/@rollup/plugin-babel": {
|
| 3473 |
"version": "5.3.1",
|
| 3474 |
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
|
|
|
|
| 4194 |
"integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
|
| 4195 |
"license": "MIT"
|
| 4196 |
},
|
| 4197 |
+
"node_modules/@types/prop-types": {
|
| 4198 |
+
"version": "15.7.15",
|
| 4199 |
+
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
|
| 4200 |
+
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
|
| 4201 |
+
"license": "MIT"
|
| 4202 |
+
},
|
| 4203 |
"node_modules/@types/q": {
|
| 4204 |
"version": "1.5.8",
|
| 4205 |
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
|
|
|
|
| 4218 |
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
|
| 4219 |
"license": "MIT"
|
| 4220 |
},
|
| 4221 |
+
"node_modules/@types/react": {
|
| 4222 |
+
"version": "19.1.8",
|
| 4223 |
+
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.8.tgz",
|
| 4224 |
+
"integrity": "sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==",
|
| 4225 |
+
"license": "MIT",
|
| 4226 |
+
"peer": true,
|
| 4227 |
+
"dependencies": {
|
| 4228 |
+
"csstype": "^3.0.2"
|
| 4229 |
+
}
|
| 4230 |
+
},
|
| 4231 |
+
"node_modules/@types/react-transition-group": {
|
| 4232 |
+
"version": "4.4.12",
|
| 4233 |
+
"resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
|
| 4234 |
+
"integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
|
| 4235 |
+
"license": "MIT",
|
| 4236 |
+
"peerDependencies": {
|
| 4237 |
+
"@types/react": "*"
|
| 4238 |
+
}
|
| 4239 |
+
},
|
| 4240 |
"node_modules/@types/resolve": {
|
| 4241 |
"version": "1.17.1",
|
| 4242 |
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
|
|
|
|
| 6101 |
"wrap-ansi": "^7.0.0"
|
| 6102 |
}
|
| 6103 |
},
|
| 6104 |
+
"node_modules/clsx": {
|
| 6105 |
+
"version": "2.1.1",
|
| 6106 |
+
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
| 6107 |
+
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
|
| 6108 |
+
"license": "MIT",
|
| 6109 |
+
"engines": {
|
| 6110 |
+
"node": ">=6"
|
| 6111 |
+
}
|
| 6112 |
+
},
|
| 6113 |
"node_modules/co": {
|
| 6114 |
"version": "4.6.0",
|
| 6115 |
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
|
|
|
| 6850 |
"integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
|
| 6851 |
"license": "MIT"
|
| 6852 |
},
|
| 6853 |
+
"node_modules/csstype": {
|
| 6854 |
+
"version": "3.1.3",
|
| 6855 |
+
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
| 6856 |
+
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
| 6857 |
+
"license": "MIT"
|
| 6858 |
+
},
|
| 6859 |
"node_modules/damerau-levenshtein": {
|
| 6860 |
"version": "1.0.8",
|
| 6861 |
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
|
|
|
|
| 7182 |
"utila": "~0.4"
|
| 7183 |
}
|
| 7184 |
},
|
| 7185 |
+
"node_modules/dom-helpers": {
|
| 7186 |
+
"version": "5.2.1",
|
| 7187 |
+
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
|
| 7188 |
+
"integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
|
| 7189 |
+
"license": "MIT",
|
| 7190 |
+
"dependencies": {
|
| 7191 |
+
"@babel/runtime": "^7.8.7",
|
| 7192 |
+
"csstype": "^3.0.2"
|
| 7193 |
+
}
|
| 7194 |
+
},
|
| 7195 |
"node_modules/dom-serializer": {
|
| 7196 |
"version": "1.4.1",
|
| 7197 |
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
|
|
|
|
| 8658 |
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
|
| 8659 |
}
|
| 8660 |
},
|
| 8661 |
+
"node_modules/find-root": {
|
| 8662 |
+
"version": "1.1.0",
|
| 8663 |
+
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
|
| 8664 |
+
"integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
|
| 8665 |
+
"license": "MIT"
|
| 8666 |
+
},
|
| 8667 |
"node_modules/find-up": {
|
| 8668 |
"version": "4.1.0",
|
| 8669 |
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
|
|
|
| 9406 |
"integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
|
| 9407 |
"license": "CC0-1.0"
|
| 9408 |
},
|
| 9409 |
+
"node_modules/hoist-non-react-statics": {
|
| 9410 |
+
"version": "3.3.2",
|
| 9411 |
+
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
| 9412 |
+
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
|
| 9413 |
+
"license": "BSD-3-Clause",
|
| 9414 |
+
"dependencies": {
|
| 9415 |
+
"react-is": "^16.7.0"
|
| 9416 |
+
}
|
| 9417 |
+
},
|
| 9418 |
+
"node_modules/hoist-non-react-statics/node_modules/react-is": {
|
| 9419 |
+
"version": "16.13.1",
|
| 9420 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
| 9421 |
+
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
|
| 9422 |
+
"license": "MIT"
|
| 9423 |
+
},
|
| 9424 |
"node_modules/hoopy": {
|
| 9425 |
"version": "0.1.4",
|
| 9426 |
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
|
|
|
|
| 14697 |
"react": ">= 0.14.0"
|
| 14698 |
}
|
| 14699 |
},
|
| 14700 |
+
"node_modules/react-transition-group": {
|
| 14701 |
+
"version": "4.4.5",
|
| 14702 |
+
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
|
| 14703 |
+
"integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
|
| 14704 |
+
"license": "BSD-3-Clause",
|
| 14705 |
+
"dependencies": {
|
| 14706 |
+
"@babel/runtime": "^7.5.5",
|
| 14707 |
+
"dom-helpers": "^5.0.1",
|
| 14708 |
+
"loose-envify": "^1.4.0",
|
| 14709 |
+
"prop-types": "^15.6.2"
|
| 14710 |
+
},
|
| 14711 |
+
"peerDependencies": {
|
| 14712 |
+
"react": ">=16.6.0",
|
| 14713 |
+
"react-dom": ">=16.6.0"
|
| 14714 |
+
}
|
| 14715 |
+
},
|
| 14716 |
"node_modules/read-cache": {
|
| 14717 |
"version": "1.0.0",
|
| 14718 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
|
|
|
| 16330 |
"postcss": "^8.2.15"
|
| 16331 |
}
|
| 16332 |
},
|
| 16333 |
+
"node_modules/stylis": {
|
| 16334 |
+
"version": "4.2.0",
|
| 16335 |
+
"resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
|
| 16336 |
+
"integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
|
| 16337 |
+
"license": "MIT"
|
| 16338 |
+
},
|
| 16339 |
"node_modules/sucrase": {
|
| 16340 |
"version": "3.35.0",
|
| 16341 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
|
|
|
|
| 17107 |
}
|
| 17108 |
},
|
| 17109 |
"node_modules/typescript": {
|
| 17110 |
+
"version": "4.9.5",
|
| 17111 |
+
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
| 17112 |
+
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
|
| 17113 |
"license": "Apache-2.0",
|
| 17114 |
"peer": true,
|
| 17115 |
"bin": {
|
|
|
|
| 17117 |
"tsserver": "bin/tsserver"
|
| 17118 |
},
|
| 17119 |
"engines": {
|
| 17120 |
+
"node": ">=4.2.0"
|
| 17121 |
}
|
| 17122 |
},
|
| 17123 |
"node_modules/unbox-primitive": {
|
package.json
CHANGED
|
@@ -3,6 +3,9 @@
|
|
| 3 |
"version": "0.1.0",
|
| 4 |
"private": true,
|
| 5 |
"dependencies": {
|
|
|
|
|
|
|
|
|
|
| 6 |
"@testing-library/dom": "^10.4.0",
|
| 7 |
"@testing-library/jest-dom": "^6.6.3",
|
| 8 |
"@testing-library/react": "^16.3.0",
|
|
|
|
| 3 |
"version": "0.1.0",
|
| 4 |
"private": true,
|
| 5 |
"dependencies": {
|
| 6 |
+
"@emotion/react": "^11.14.0",
|
| 7 |
+
"@emotion/styled": "^11.14.1",
|
| 8 |
+
"@mui/material": "^7.2.0",
|
| 9 |
"@testing-library/dom": "^10.4.0",
|
| 10 |
"@testing-library/jest-dom": "^6.6.3",
|
| 11 |
"@testing-library/react": "^16.3.0",
|
public/index.html
CHANGED
|
@@ -24,7 +24,7 @@
|
|
| 24 |
work correctly both with client-side routing and a non-root public URL.
|
| 25 |
Learn how to configure a non-root public URL by running `npm run build`.
|
| 26 |
-->
|
| 27 |
-
<title>
|
| 28 |
</head>
|
| 29 |
<body>
|
| 30 |
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
|
|
| 24 |
work correctly both with client-side routing and a non-root public URL.
|
| 25 |
Learn how to configure a non-root public URL by running `npm run build`.
|
| 26 |
-->
|
| 27 |
+
<title>DevMate App</title>
|
| 28 |
</head>
|
| 29 |
<body>
|
| 30 |
<noscript>You need to enable JavaScript to run this app.</noscript>
|
src/App.css
CHANGED
|
@@ -28,6 +28,19 @@
|
|
| 28 |
color: #61dafb;
|
| 29 |
}
|
| 30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
@keyframes App-logo-spin {
|
| 32 |
from {
|
| 33 |
transform: rotate(0deg);
|
|
@@ -42,3 +55,98 @@
|
|
| 42 |
line-height: 1.5;
|
| 43 |
margin-bottom: 8px;
|
| 44 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
color: #61dafb;
|
| 29 |
}
|
| 30 |
|
| 31 |
+
body {
|
| 32 |
+
font-family: 'Roboto', sans-serif;
|
| 33 |
+
background: #121212;
|
| 34 |
+
color: #ffffff;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
h2 {
|
| 38 |
+
|
| 39 |
+
color: #bb86fc;
|
| 40 |
+
margin-bottom: 20px;
|
| 41 |
+
font-weight: 500;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
@keyframes App-logo-spin {
|
| 45 |
from {
|
| 46 |
transform: rotate(0deg);
|
|
|
|
| 55 |
line-height: 1.5;
|
| 56 |
margin-bottom: 8px;
|
| 57 |
}
|
| 58 |
+
|
| 59 |
+
/* Global scrollbar styles */
|
| 60 |
+
* {
|
| 61 |
+
scrollbar-width: thin; /* Firefox */
|
| 62 |
+
scrollbar-color: #555 #1e1e2f; /* Firefox */
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/* Chrome, Edge, Safari */
|
| 66 |
+
::-webkit-scrollbar {
|
| 67 |
+
width: 8px;
|
| 68 |
+
height: 6px;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
::-webkit-scrollbar-track {
|
| 72 |
+
background: #1e1e2f;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
::-webkit-scrollbar-thumb {
|
| 76 |
+
background-color: #555;
|
| 77 |
+
border-radius: 6px;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
::-webkit-scrollbar-thumb:hover {
|
| 81 |
+
background-color: #777;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
.chat-container {
|
| 86 |
+
max-width: 800px;
|
| 87 |
+
margin: 0 auto;
|
| 88 |
+
display: flex;
|
| 89 |
+
flex-direction: column;
|
| 90 |
+
height: 100vh;
|
| 91 |
+
color: #ffffff;
|
| 92 |
+
background: #2a2a2a;
|
| 93 |
+
background: #2a2a2a;
|
| 94 |
+
border-radius: 12px;
|
| 95 |
+
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
|
| 96 |
+
overflow: hidden; /* prevent accidental scrollbars */
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
.header-area {
|
| 100 |
+
display: flex;
|
| 101 |
+
justify-content: center;
|
| 102 |
+
text-align: center;
|
| 103 |
+
background: #383838;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
.chat-input {
|
| 107 |
+
display: flex;
|
| 108 |
+
padding: 10px;
|
| 109 |
+
background: #383838;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
textarea {
|
| 113 |
+
flex-grow: 1;
|
| 114 |
+
padding: 10px 12px;
|
| 115 |
+
resize: none;
|
| 116 |
+
border-radius: 6px;
|
| 117 |
+
background: #2a2a2a;
|
| 118 |
+
color: #fff;
|
| 119 |
+
border: 1px solid #444;
|
| 120 |
+
font-size: 14px;
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
.message {
|
| 126 |
+
display: block; /* ensures full-width layout */
|
| 127 |
+
width: fit-content;
|
| 128 |
+
max-width: 85%;
|
| 129 |
+
margin-bottom: 12px;
|
| 130 |
+
padding: 10px 14px;
|
| 131 |
+
border-radius: 16px;
|
| 132 |
+
line-height: 1.5;
|
| 133 |
+
word-wrap: break-word;
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
.message.user {
|
| 137 |
+
align-self: flex-end;
|
| 138 |
+
margin-left: auto;
|
| 139 |
+
background: #333c4d;
|
| 140 |
+
color: #e3f2fd;
|
| 141 |
+
border-bottom-right-radius: 0;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
.message.assistant {
|
| 145 |
+
align-self: flex-start;
|
| 146 |
+
margin-right: auto;
|
| 147 |
+
background: #383838;
|
| 148 |
+
border-bottom-left-radius: 0;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
|
| 152 |
+
|
src/App.js
CHANGED
|
@@ -3,7 +3,9 @@ import ChatBox from "./components/ChatBox";
|
|
| 3 |
import ChatInput from "./components/ChatInput";
|
| 4 |
import FileUpload from "./components/FileUpload";
|
| 5 |
import { streamChat } from "./utils/streamChat";
|
|
|
|
| 6 |
import "./index.css";
|
|
|
|
| 7 |
|
| 8 |
export default function App() {
|
| 9 |
const [messages, setMessages] = useState([]);
|
|
@@ -60,34 +62,80 @@ export default function App() {
|
|
| 60 |
if (lastCode) handleSend("Fix the bug in this code and explain");
|
| 61 |
};
|
| 62 |
|
| 63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
<div className="app">
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
<div className="
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
</div>
|
| 92 |
</div>
|
| 93 |
);
|
|
|
|
| 3 |
import ChatInput from "./components/ChatInput";
|
| 4 |
import FileUpload from "./components/FileUpload";
|
| 5 |
import { streamChat } from "./utils/streamChat";
|
| 6 |
+
import { Button, Box, Typography } from "@mui/material";
|
| 7 |
import "./index.css";
|
| 8 |
+
import "./App.css";
|
| 9 |
|
| 10 |
export default function App() {
|
| 11 |
const [messages, setMessages] = useState([]);
|
|
|
|
| 62 |
if (lastCode) handleSend("Fix the bug in this code and explain");
|
| 63 |
};
|
| 64 |
|
| 65 |
+
const handleClear = () => {
|
| 66 |
+
setMessages([]);
|
| 67 |
+
setLastCode("");
|
| 68 |
+
setFileUploaded(false);
|
| 69 |
+
setResetKey((k) => k + 1);
|
| 70 |
+
};
|
| 71 |
+
|
| 72 |
+
return (
|
| 73 |
<div className="app">
|
| 74 |
+
|
| 75 |
+
|
| 76 |
+
<div className="chat-container">
|
| 77 |
+
<div className="header-area">
|
| 78 |
+
<Box display="flex" alignItems="center" gap={1} >
|
| 79 |
+
<Typography variant="h4" component="h1" gutterBottom>
|
| 80 |
+
🧑💻 DevMate
|
| 81 |
+
</Typography>
|
| 82 |
+
</Box>
|
| 83 |
+
</div>
|
| 84 |
+
<ChatBox messages={messages} loading={loading} />
|
| 85 |
+
|
| 86 |
+
<Box className="buttons"
|
| 87 |
+
sx={{
|
| 88 |
+
display: "flex",
|
| 89 |
+
justifyContent: "space-between",
|
| 90 |
+
alignItems: "center",
|
| 91 |
+
mt: 1,
|
| 92 |
+
ml: 1,
|
| 93 |
+
flexWrap: "wrap",
|
| 94 |
+
gap: 2,
|
| 95 |
+
}}
|
| 96 |
+
>
|
| 97 |
+
<FileUpload
|
| 98 |
+
reset={resetKey}
|
| 99 |
+
onUpload={() => setFileUploaded(true)}
|
| 100 |
+
onCodeParsed={(code, filename) => {
|
| 101 |
+
const lang = detectLanguage(filename);
|
| 102 |
+
const formatted = `\`\`\`${lang}\n${code}\n\`\`\``;
|
| 103 |
+
setLastCode(formatted);
|
| 104 |
+
setMessages((prev) => [
|
| 105 |
+
...prev,
|
| 106 |
+
{ role: "user", content: `Here's my code:\n\n${formatted}` },
|
| 107 |
+
]);
|
| 108 |
+
setFileUploaded(true);
|
| 109 |
+
}}
|
| 110 |
+
/>
|
| 111 |
+
|
| 112 |
+
<Box sx={{ display: 'flex', gap: 1 ,mr:1}}>
|
| 113 |
+
<Button
|
| 114 |
+
variant="contained"
|
| 115 |
+
onClick={handleExplain}
|
| 116 |
+
disabled={!fileUploaded || loading}
|
| 117 |
+
>
|
| 118 |
+
Explain Code
|
| 119 |
+
</Button>
|
| 120 |
+
<Button
|
| 121 |
+
variant="contained"
|
| 122 |
+
onClick={handleFixBug}
|
| 123 |
+
disabled={!fileUploaded || loading}
|
| 124 |
+
color="warning"
|
| 125 |
+
>
|
| 126 |
+
Fix Bug
|
| 127 |
+
</Button>
|
| 128 |
+
<Button
|
| 129 |
+
variant="outlined"
|
| 130 |
+
onClick={handleClear}
|
| 131 |
+
color="error"
|
| 132 |
+
>
|
| 133 |
+
Clear Chat
|
| 134 |
+
</Button>
|
| 135 |
+
</Box>
|
| 136 |
+
</Box>
|
| 137 |
+
|
| 138 |
+
<ChatInput onSend={handleSend} fileUploaded={fileUploaded} />
|
| 139 |
</div>
|
| 140 |
</div>
|
| 141 |
);
|
src/components/ChatBox.css
CHANGED
|
@@ -2,7 +2,6 @@
|
|
| 2 |
display: flex;
|
| 3 |
gap: 6px;
|
| 4 |
padding: 0.5rem;
|
| 5 |
-
margin-left: 1rem;
|
| 6 |
align-items: center;
|
| 7 |
}
|
| 8 |
|
|
@@ -25,3 +24,69 @@
|
|
| 25 |
0%, 80%, 100% { opacity: 0; }
|
| 26 |
40% { opacity: 1; }
|
| 27 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
display: flex;
|
| 3 |
gap: 6px;
|
| 4 |
padding: 0.5rem;
|
|
|
|
| 5 |
align-items: center;
|
| 6 |
}
|
| 7 |
|
|
|
|
| 24 |
0%, 80%, 100% { opacity: 0; }
|
| 25 |
40% { opacity: 1; }
|
| 26 |
}
|
| 27 |
+
|
| 28 |
+
.message {
|
| 29 |
+
display: block; /* ensures full-width layout */
|
| 30 |
+
width: fit-content;
|
| 31 |
+
max-width: 85%;
|
| 32 |
+
margin-bottom: 12px;
|
| 33 |
+
padding: 10px 14px;
|
| 34 |
+
border-radius: 16px;
|
| 35 |
+
line-height: 1.5;
|
| 36 |
+
word-wrap: break-word;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.message.user {
|
| 40 |
+
align-self: flex-end;
|
| 41 |
+
margin-left: auto;
|
| 42 |
+
background: #333c4d;
|
| 43 |
+
color: #e3f2fd;
|
| 44 |
+
border-bottom-right-radius: 0;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.message.assistant {
|
| 48 |
+
align-self: flex-start;
|
| 49 |
+
margin-right: auto;
|
| 50 |
+
background: #383838;
|
| 51 |
+
border-bottom-left-radius: 0;
|
| 52 |
+
}
|
| 53 |
+
.chat-box {
|
| 54 |
+
flex-grow: 1;
|
| 55 |
+
overflow-y: auto;
|
| 56 |
+
padding: 12px;
|
| 57 |
+
border: 1px solid #2d2d2d;
|
| 58 |
+
border-radius: 8px;
|
| 59 |
+
background: #2a2a2a;
|
| 60 |
+
margin-bottom: 16px;
|
| 61 |
+
display: flex;
|
| 62 |
+
flex-direction: column;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
.chat-box p {
|
| 66 |
+
margin: 0.5em 0;
|
| 67 |
+
line-height: 1.6;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.chat-box li {
|
| 71 |
+
margin: 0.3em 0;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
.chat-box ul, .chat-box ol {
|
| 75 |
+
margin: 0.5em 0 0.5em 1.2em;
|
| 76 |
+
padding: 0;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
.code-block-wrapper pre {
|
| 81 |
+
background: #2d2d2d; /* override if needed */
|
| 82 |
+
padding: 1em;
|
| 83 |
+
font-size: 0.9em;
|
| 84 |
+
line-height: 1.5;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
.code-block-wrapper {
|
| 88 |
+
margin: 12px 0;
|
| 89 |
+
background-color: #2d2d2d;
|
| 90 |
+
border-radius: 8px;
|
| 91 |
+
overflow: auto;
|
| 92 |
+
}
|
src/components/ChatBox.jsx
CHANGED
|
@@ -1,30 +1,71 @@
|
|
| 1 |
-
import React from
|
| 2 |
import CodeBlock from "./CodeBlock";
|
|
|
|
| 3 |
import "./ChatBox.css"; // Add dot animation CSS
|
| 4 |
|
| 5 |
export default function ChatBox({ messages, loading }) {
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
-
{/* ✅ Typing indicator when loading */}
|
| 18 |
{loading && (
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
);
|
| 29 |
}
|
| 30 |
const formatText = (text) => {
|
|
@@ -116,11 +157,15 @@ function Message({ content }) {
|
|
| 116 |
return (
|
| 117 |
<>
|
| 118 |
{parts.map((part, i) =>
|
| 119 |
-
i % 2 === 1 ?
|
|
|
|
|
|
|
|
|
|
| 120 |
key={i}
|
| 121 |
className="formatted-text"
|
| 122 |
dangerouslySetInnerHTML={{ __html: formatText(part) }}
|
| 123 |
/>
|
|
|
|
| 124 |
)}
|
| 125 |
</>
|
| 126 |
);
|
|
|
|
| 1 |
+
import React, { useRef, useEffect } from 'react';
|
| 2 |
import CodeBlock from "./CodeBlock";
|
| 3 |
+
import { Box, Paper, CircularProgress, Typography } from "@mui/material";
|
| 4 |
import "./ChatBox.css"; // Add dot animation CSS
|
| 5 |
|
| 6 |
export default function ChatBox({ messages, loading }) {
|
| 7 |
+
const bottomRef = useRef(null);
|
| 8 |
+
|
| 9 |
+
useEffect(() => {
|
| 10 |
+
if (bottomRef.current) {
|
| 11 |
+
bottomRef.current.scrollIntoView({ behavior: 'smooth' });
|
| 12 |
+
}
|
| 13 |
+
}, [messages, loading]);
|
| 14 |
+
|
| 15 |
+
return (
|
| 16 |
+
<Box className="chat-box">
|
| 17 |
+
{messages.map((msg, i) =>
|
| 18 |
+
msg.content?.trim() ? (
|
| 19 |
+
<Box
|
| 20 |
+
key={i}
|
| 21 |
+
className={`message ${msg.role}`}
|
| 22 |
+
// sx={{
|
| 23 |
+
// display: "flex",
|
| 24 |
+
// justifyContent: msg.role === "user" ? "flex-end" : "flex-start",
|
| 25 |
+
// mb: 1.5,
|
| 26 |
+
// }}
|
| 27 |
+
>
|
| 28 |
+
<Paper
|
| 29 |
+
elevation={3}
|
| 30 |
+
sx={{
|
| 31 |
+
p: 1.5,
|
| 32 |
+
bgcolor: msg.role === "user" ? "#1e1e2f" : "#2c2c3e",
|
| 33 |
+
color: "#fff",
|
| 34 |
+
maxWidth: "100%",
|
| 35 |
+
borderRadius: 2,
|
| 36 |
+
// overflowX: "auto",
|
| 37 |
+
}}
|
| 38 |
+
>
|
| 39 |
+
<div className="bubble">
|
| 40 |
+
<Message content={msg.content} />
|
| 41 |
+
</div>
|
| 42 |
+
</Paper>
|
| 43 |
+
</Box>
|
| 44 |
+
|
| 45 |
+
) : null
|
| 46 |
+
)}
|
| 47 |
|
|
|
|
| 48 |
{loading && (
|
| 49 |
+
<Box
|
| 50 |
+
className="message assistant"
|
| 51 |
+
sx={{
|
| 52 |
+
display: "flex",
|
| 53 |
+
justifyContent: "flex-start",
|
| 54 |
+
pl: 1,
|
| 55 |
+
mt: 1,
|
| 56 |
+
}}
|
| 57 |
+
>
|
| 58 |
+
|
| 59 |
+
<Box className="typing-indicator">
|
| 60 |
+
<span className="dot" />
|
| 61 |
+
<span className="dot" />
|
| 62 |
+
<span className="dot" />
|
| 63 |
+
</Box>
|
| 64 |
+
|
| 65 |
+
</Box>
|
| 66 |
+
)}
|
| 67 |
+
<Box ref={bottomRef} />
|
| 68 |
+
</Box>
|
| 69 |
);
|
| 70 |
}
|
| 71 |
const formatText = (text) => {
|
|
|
|
| 157 |
return (
|
| 158 |
<>
|
| 159 |
{parts.map((part, i) =>
|
| 160 |
+
i % 2 === 1 ? (
|
| 161 |
+
<CodeBlock key={i} code={part.trim()} />
|
| 162 |
+
) : (
|
| 163 |
+
<div
|
| 164 |
key={i}
|
| 165 |
className="formatted-text"
|
| 166 |
dangerouslySetInnerHTML={{ __html: formatText(part) }}
|
| 167 |
/>
|
| 168 |
+
)
|
| 169 |
)}
|
| 170 |
</>
|
| 171 |
);
|
src/components/ChatInput.jsx
CHANGED
|
@@ -18,7 +18,7 @@ export default function ChatInput({ onSend, fileUploaded }) {
|
|
| 18 |
const isButtonDisabled = fileUploaded || !input.trim();
|
| 19 |
return (
|
| 20 |
<div className="chat-input">
|
| 21 |
-
<
|
| 22 |
placeholder="Paste error, ask DevMate..."
|
| 23 |
value={input}
|
| 24 |
onChange={(e) => setInput(e.target.value)}
|
|
|
|
| 18 |
const isButtonDisabled = fileUploaded || !input.trim();
|
| 19 |
return (
|
| 20 |
<div className="chat-input">
|
| 21 |
+
<textarea
|
| 22 |
placeholder="Paste error, ask DevMate..."
|
| 23 |
value={input}
|
| 24 |
onChange={(e) => setInput(e.target.value)}
|
src/index.css
CHANGED
|
@@ -1,14 +1,15 @@
|
|
| 1 |
body {
|
| 2 |
margin: 0;
|
| 3 |
-
font-family:
|
| 4 |
-
|
| 5 |
-
|
|
|
|
|
|
|
| 6 |
}
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
margin: auto;
|
| 12 |
}
|
| 13 |
|
| 14 |
h1 {
|
|
@@ -17,12 +18,12 @@ h1 {
|
|
| 17 |
margin-bottom: 1rem;
|
| 18 |
}
|
| 19 |
|
| 20 |
-
.main {
|
| 21 |
background: #2a2a2a;
|
| 22 |
-
|
| 23 |
border-radius: 8px;
|
| 24 |
-
}
|
| 25 |
-
|
| 26 |
.chat-box {
|
| 27 |
max-height: 60vh;
|
| 28 |
overflow-y: auto;
|
|
@@ -35,22 +36,22 @@ h1 {
|
|
| 35 |
|
| 36 |
.message.user {
|
| 37 |
text-align: right;
|
| 38 |
-
}
|
| 39 |
|
| 40 |
-
.bubble {
|
| 41 |
display: inline-block;
|
| 42 |
padding: 0.75rem;
|
| 43 |
border-radius: 8px;
|
| 44 |
background: #3b3b3b;
|
| 45 |
max-width: 100%;
|
| 46 |
white-space: pre-wrap;
|
| 47 |
-
}
|
| 48 |
|
| 49 |
-
.chat-input {
|
| 50 |
display: flex;
|
| 51 |
gap: 0.5rem;
|
| 52 |
margin-top: 1rem;
|
| 53 |
-
}
|
| 54 |
|
| 55 |
.chat-input input {
|
| 56 |
flex: 1;
|
|
|
|
| 1 |
body {
|
| 2 |
margin: 0;
|
| 3 |
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
| 4 |
+
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
| 5 |
+
sans-serif;
|
| 6 |
+
-webkit-font-smoothing: antialiased;
|
| 7 |
+
-moz-osx-font-smoothing: grayscale;
|
| 8 |
}
|
| 9 |
|
| 10 |
+
code {
|
| 11 |
+
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
| 12 |
+
monospace;
|
|
|
|
| 13 |
}
|
| 14 |
|
| 15 |
h1 {
|
|
|
|
| 18 |
margin-bottom: 1rem;
|
| 19 |
}
|
| 20 |
|
| 21 |
+
/* .main {
|
| 22 |
background: #2a2a2a;
|
| 23 |
+
padding: 1rem;
|
| 24 |
border-radius: 8px;
|
| 25 |
+
} */
|
| 26 |
+
/*
|
| 27 |
.chat-box {
|
| 28 |
max-height: 60vh;
|
| 29 |
overflow-y: auto;
|
|
|
|
| 36 |
|
| 37 |
.message.user {
|
| 38 |
text-align: right;
|
| 39 |
+
} */
|
| 40 |
|
| 41 |
+
/* .bubble {
|
| 42 |
display: inline-block;
|
| 43 |
padding: 0.75rem;
|
| 44 |
border-radius: 8px;
|
| 45 |
background: #3b3b3b;
|
| 46 |
max-width: 100%;
|
| 47 |
white-space: pre-wrap;
|
| 48 |
+
} */
|
| 49 |
|
| 50 |
+
/* .chat-input {
|
| 51 |
display: flex;
|
| 52 |
gap: 0.5rem;
|
| 53 |
margin-top: 1rem;
|
| 54 |
+
} */
|
| 55 |
|
| 56 |
.chat-input input {
|
| 57 |
flex: 1;
|