FrederickSundeep commited on
Commit
81814ba
·
1 Parent(s): 12b7639
Files changed (4) hide show
  1. package-lock.json +471 -4
  2. package.json +3 -0
  3. src/FileUploadForm.js +170 -46
  4. src/index.js +22 -14
package-lock.json CHANGED
@@ -8,11 +8,14 @@
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",
14
  "@testing-library/user-event": "^13.5.0",
15
  "axios": "^1.11.0",
 
16
  "react": "^19.1.0",
17
  "react-dom": "^19.1.0",
18
  "react-scripts": "5.0.1",
@@ -2380,6 +2383,68 @@
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 +3017,251 @@
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 +3386,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",
@@ -3779,6 +4099,12 @@
3779
  "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
3780
  "license": "MIT"
3781
  },
 
 
 
 
 
 
3782
  "node_modules/@types/q": {
3783
  "version": "1.5.8",
3784
  "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
@@ -3797,6 +4123,25 @@
3797
  "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
3798
  "license": "MIT"
3799
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3800
  "node_modules/@types/resolve": {
3801
  "version": "1.17.1",
3802
  "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
@@ -5648,6 +5993,15 @@
5648
  "wrap-ansi": "^7.0.0"
5649
  }
5650
  },
 
 
 
 
 
 
 
 
 
5651
  "node_modules/co": {
5652
  "version": "4.6.0",
5653
  "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -6378,6 +6732,12 @@
6378
  "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
6379
  "license": "MIT"
6380
  },
 
 
 
 
 
 
6381
  "node_modules/damerau-levenshtein": {
6382
  "version": "1.0.8",
6383
  "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
@@ -6704,6 +7064,16 @@
6704
  "utila": "~0.4"
6705
  }
6706
  },
 
 
 
 
 
 
 
 
 
 
6707
  "node_modules/dom-serializer": {
6708
  "version": "1.4.1",
6709
  "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
@@ -9165,6 +9535,12 @@
9165
  "node": ">= 4"
9166
  }
9167
  },
 
 
 
 
 
 
9168
  "node_modules/immer": {
9169
  "version": "9.0.21",
9170
  "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
@@ -11038,6 +11414,54 @@
11038
  "node": ">=4.0"
11039
  }
11040
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11041
  "node_modules/keyv": {
11042
  "version": "4.5.4",
11043
  "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
@@ -11124,6 +11548,15 @@
11124
  "node": ">= 0.8.0"
11125
  }
11126
  },
 
 
 
 
 
 
 
 
 
11127
  "node_modules/lilconfig": {
11128
  "version": "2.1.0",
11129
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@@ -11960,6 +12393,12 @@
11960
  "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
11961
  "license": "BlueOak-1.0.0"
11962
  },
 
 
 
 
 
 
11963
  "node_modules/param-case": {
11964
  "version": "3.0.4",
11965
  "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -14007,6 +14446,22 @@
14007
  }
14008
  }
14009
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14010
  "node_modules/read-cache": {
14011
  "version": "1.0.0",
14012
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -14886,6 +15341,12 @@
14886
  "node": ">= 0.4"
14887
  }
14888
  },
 
 
 
 
 
 
14889
  "node_modules/setprototypeof": {
14890
  "version": "1.2.0",
14891
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -15590,6 +16051,12 @@
15590
  "postcss": "^8.2.15"
15591
  }
15592
  },
 
 
 
 
 
 
15593
  "node_modules/sucrase": {
15594
  "version": "3.35.0",
15595
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
@@ -16361,9 +16828,9 @@
16361
  }
16362
  },
16363
  "node_modules/typescript": {
16364
- "version": "5.9.2",
16365
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
16366
- "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
16367
  "license": "Apache-2.0",
16368
  "peer": true,
16369
  "bin": {
@@ -16371,7 +16838,7 @@
16371
  "tsserver": "bin/tsserver"
16372
  },
16373
  "engines": {
16374
- "node": ">=14.17"
16375
  }
16376
  },
16377
  "node_modules/unbox-primitive": {
 
8
  "name": "react-template",
9
  "version": "0.1.0",
10
  "dependencies": {
11
+ "@mui/icons-material": "^7.2.0",
12
+ "@mui/material": "^7.2.0",
13
  "@testing-library/dom": "^10.4.0",
14
  "@testing-library/jest-dom": "^6.6.3",
15
  "@testing-library/react": "^16.3.0",
16
  "@testing-library/user-event": "^13.5.0",
17
  "axios": "^1.11.0",
18
+ "jszip": "^3.10.1",
19
  "react": "^19.1.0",
20
  "react-dom": "^19.1.0",
21
  "react-scripts": "5.0.1",
 
2383
  "postcss-selector-parser": "^6.0.10"
2384
  }
2385
  },
2386
+ "node_modules/@emotion/cache": {
2387
+ "version": "11.14.0",
2388
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
2389
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
2390
+ "license": "MIT",
2391
+ "dependencies": {
2392
+ "@emotion/memoize": "^0.9.0",
2393
+ "@emotion/sheet": "^1.4.0",
2394
+ "@emotion/utils": "^1.4.2",
2395
+ "@emotion/weak-memoize": "^0.4.0",
2396
+ "stylis": "4.2.0"
2397
+ }
2398
+ },
2399
+ "node_modules/@emotion/hash": {
2400
+ "version": "0.9.2",
2401
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
2402
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
2403
+ "license": "MIT"
2404
+ },
2405
+ "node_modules/@emotion/memoize": {
2406
+ "version": "0.9.0",
2407
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
2408
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
2409
+ "license": "MIT"
2410
+ },
2411
+ "node_modules/@emotion/serialize": {
2412
+ "version": "1.3.3",
2413
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
2414
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
2415
+ "license": "MIT",
2416
+ "dependencies": {
2417
+ "@emotion/hash": "^0.9.2",
2418
+ "@emotion/memoize": "^0.9.0",
2419
+ "@emotion/unitless": "^0.10.0",
2420
+ "@emotion/utils": "^1.4.2",
2421
+ "csstype": "^3.0.2"
2422
+ }
2423
+ },
2424
+ "node_modules/@emotion/sheet": {
2425
+ "version": "1.4.0",
2426
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
2427
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
2428
+ "license": "MIT"
2429
+ },
2430
+ "node_modules/@emotion/unitless": {
2431
+ "version": "0.10.0",
2432
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
2433
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
2434
+ "license": "MIT"
2435
+ },
2436
+ "node_modules/@emotion/utils": {
2437
+ "version": "1.4.2",
2438
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
2439
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
2440
+ "license": "MIT"
2441
+ },
2442
+ "node_modules/@emotion/weak-memoize": {
2443
+ "version": "0.4.0",
2444
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
2445
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
2446
+ "license": "MIT"
2447
+ },
2448
  "node_modules/@eslint-community/eslint-utils": {
2449
  "version": "4.7.0",
2450
  "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
 
3017
  "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
3018
  "license": "MIT"
3019
  },
3020
+ "node_modules/@mui/core-downloads-tracker": {
3021
+ "version": "7.2.0",
3022
+ "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-7.2.0.tgz",
3023
+ "integrity": "sha512-d49s7kEgI5iX40xb2YPazANvo7Bx0BLg/MNRwv+7BVpZUzXj1DaVCKlQTDex3gy/0jsCb4w7AY2uH4t4AJvSog==",
3024
+ "license": "MIT",
3025
+ "funding": {
3026
+ "type": "opencollective",
3027
+ "url": "https://opencollective.com/mui-org"
3028
+ }
3029
+ },
3030
+ "node_modules/@mui/icons-material": {
3031
+ "version": "7.2.0",
3032
+ "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-7.2.0.tgz",
3033
+ "integrity": "sha512-gRCspp3pfjHQyTmSOmYw7kUQTd9Udpdan4R8EnZvqPeoAtHnPzkvjBrBqzKaoAbbBp5bGF7BcD18zZJh4nwu0A==",
3034
+ "license": "MIT",
3035
+ "dependencies": {
3036
+ "@babel/runtime": "^7.27.6"
3037
+ },
3038
+ "engines": {
3039
+ "node": ">=14.0.0"
3040
+ },
3041
+ "funding": {
3042
+ "type": "opencollective",
3043
+ "url": "https://opencollective.com/mui-org"
3044
+ },
3045
+ "peerDependencies": {
3046
+ "@mui/material": "^7.2.0",
3047
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3048
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
3049
+ },
3050
+ "peerDependenciesMeta": {
3051
+ "@types/react": {
3052
+ "optional": true
3053
+ }
3054
+ }
3055
+ },
3056
+ "node_modules/@mui/material": {
3057
+ "version": "7.2.0",
3058
+ "resolved": "https://registry.npmjs.org/@mui/material/-/material-7.2.0.tgz",
3059
+ "integrity": "sha512-NTuyFNen5Z2QY+I242MDZzXnFIVIR6ERxo7vntFi9K1wCgSwvIl0HcAO2OOydKqqKApE6omRiYhpny1ZhGuH7Q==",
3060
+ "license": "MIT",
3061
+ "dependencies": {
3062
+ "@babel/runtime": "^7.27.6",
3063
+ "@mui/core-downloads-tracker": "^7.2.0",
3064
+ "@mui/system": "^7.2.0",
3065
+ "@mui/types": "^7.4.4",
3066
+ "@mui/utils": "^7.2.0",
3067
+ "@popperjs/core": "^2.11.8",
3068
+ "@types/react-transition-group": "^4.4.12",
3069
+ "clsx": "^2.1.1",
3070
+ "csstype": "^3.1.3",
3071
+ "prop-types": "^15.8.1",
3072
+ "react-is": "^19.1.0",
3073
+ "react-transition-group": "^4.4.5"
3074
+ },
3075
+ "engines": {
3076
+ "node": ">=14.0.0"
3077
+ },
3078
+ "funding": {
3079
+ "type": "opencollective",
3080
+ "url": "https://opencollective.com/mui-org"
3081
+ },
3082
+ "peerDependencies": {
3083
+ "@emotion/react": "^11.5.0",
3084
+ "@emotion/styled": "^11.3.0",
3085
+ "@mui/material-pigment-css": "^7.2.0",
3086
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3087
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3088
+ "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
3089
+ },
3090
+ "peerDependenciesMeta": {
3091
+ "@emotion/react": {
3092
+ "optional": true
3093
+ },
3094
+ "@emotion/styled": {
3095
+ "optional": true
3096
+ },
3097
+ "@mui/material-pigment-css": {
3098
+ "optional": true
3099
+ },
3100
+ "@types/react": {
3101
+ "optional": true
3102
+ }
3103
+ }
3104
+ },
3105
+ "node_modules/@mui/material/node_modules/react-is": {
3106
+ "version": "19.1.1",
3107
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
3108
+ "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
3109
+ "license": "MIT"
3110
+ },
3111
+ "node_modules/@mui/private-theming": {
3112
+ "version": "7.2.0",
3113
+ "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-7.2.0.tgz",
3114
+ "integrity": "sha512-y6N1Yt3T5RMxVFnCh6+zeSWBuQdNDm5/UlM0EAYZzZR/1u+XKJWYQmbpx4e+F+1EpkYi3Nk8KhPiQDi83M3zIw==",
3115
+ "license": "MIT",
3116
+ "dependencies": {
3117
+ "@babel/runtime": "^7.27.6",
3118
+ "@mui/utils": "^7.2.0",
3119
+ "prop-types": "^15.8.1"
3120
+ },
3121
+ "engines": {
3122
+ "node": ">=14.0.0"
3123
+ },
3124
+ "funding": {
3125
+ "type": "opencollective",
3126
+ "url": "https://opencollective.com/mui-org"
3127
+ },
3128
+ "peerDependencies": {
3129
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3130
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
3131
+ },
3132
+ "peerDependenciesMeta": {
3133
+ "@types/react": {
3134
+ "optional": true
3135
+ }
3136
+ }
3137
+ },
3138
+ "node_modules/@mui/styled-engine": {
3139
+ "version": "7.2.0",
3140
+ "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-7.2.0.tgz",
3141
+ "integrity": "sha512-yq08xynbrNYcB1nBcW9Fn8/h/iniM3ewRguGJXPIAbHvxEF7Pz95kbEEOAAhwzxMX4okhzvHmk0DFuC5ayvgIQ==",
3142
+ "license": "MIT",
3143
+ "dependencies": {
3144
+ "@babel/runtime": "^7.27.6",
3145
+ "@emotion/cache": "^11.14.0",
3146
+ "@emotion/serialize": "^1.3.3",
3147
+ "@emotion/sheet": "^1.4.0",
3148
+ "csstype": "^3.1.3",
3149
+ "prop-types": "^15.8.1"
3150
+ },
3151
+ "engines": {
3152
+ "node": ">=14.0.0"
3153
+ },
3154
+ "funding": {
3155
+ "type": "opencollective",
3156
+ "url": "https://opencollective.com/mui-org"
3157
+ },
3158
+ "peerDependencies": {
3159
+ "@emotion/react": "^11.4.1",
3160
+ "@emotion/styled": "^11.3.0",
3161
+ "react": "^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
+ }
3171
+ },
3172
+ "node_modules/@mui/system": {
3173
+ "version": "7.2.0",
3174
+ "resolved": "https://registry.npmjs.org/@mui/system/-/system-7.2.0.tgz",
3175
+ "integrity": "sha512-PG7cm/WluU6RAs+gNND2R9vDwNh+ERWxPkqTaiXQJGIFAyJ+VxhyKfzpdZNk0z0XdmBxxi9KhFOpgxjehf/O0A==",
3176
+ "license": "MIT",
3177
+ "dependencies": {
3178
+ "@babel/runtime": "^7.27.6",
3179
+ "@mui/private-theming": "^7.2.0",
3180
+ "@mui/styled-engine": "^7.2.0",
3181
+ "@mui/types": "^7.4.4",
3182
+ "@mui/utils": "^7.2.0",
3183
+ "clsx": "^2.1.1",
3184
+ "csstype": "^3.1.3",
3185
+ "prop-types": "^15.8.1"
3186
+ },
3187
+ "engines": {
3188
+ "node": ">=14.0.0"
3189
+ },
3190
+ "funding": {
3191
+ "type": "opencollective",
3192
+ "url": "https://opencollective.com/mui-org"
3193
+ },
3194
+ "peerDependencies": {
3195
+ "@emotion/react": "^11.5.0",
3196
+ "@emotion/styled": "^11.3.0",
3197
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3198
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
3199
+ },
3200
+ "peerDependenciesMeta": {
3201
+ "@emotion/react": {
3202
+ "optional": true
3203
+ },
3204
+ "@emotion/styled": {
3205
+ "optional": true
3206
+ },
3207
+ "@types/react": {
3208
+ "optional": true
3209
+ }
3210
+ }
3211
+ },
3212
+ "node_modules/@mui/types": {
3213
+ "version": "7.4.4",
3214
+ "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.4.4.tgz",
3215
+ "integrity": "sha512-p63yhbX52MO/ajXC7hDHJA5yjzJekvWD3q4YDLl1rSg+OXLczMYPvTuSuviPRCgRX8+E42RXz1D/dz9SxPSlWg==",
3216
+ "license": "MIT",
3217
+ "dependencies": {
3218
+ "@babel/runtime": "^7.27.6"
3219
+ },
3220
+ "peerDependencies": {
3221
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0"
3222
+ },
3223
+ "peerDependenciesMeta": {
3224
+ "@types/react": {
3225
+ "optional": true
3226
+ }
3227
+ }
3228
+ },
3229
+ "node_modules/@mui/utils": {
3230
+ "version": "7.2.0",
3231
+ "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-7.2.0.tgz",
3232
+ "integrity": "sha512-O0i1GQL6MDzhKdy9iAu5Yr0Sz1wZjROH1o3aoztuivdCXqEeQYnEjTDiRLGuFxI9zrUbTHBwobMyQH5sNtyacw==",
3233
+ "license": "MIT",
3234
+ "dependencies": {
3235
+ "@babel/runtime": "^7.27.6",
3236
+ "@mui/types": "^7.4.4",
3237
+ "@types/prop-types": "^15.7.15",
3238
+ "clsx": "^2.1.1",
3239
+ "prop-types": "^15.8.1",
3240
+ "react-is": "^19.1.0"
3241
+ },
3242
+ "engines": {
3243
+ "node": ">=14.0.0"
3244
+ },
3245
+ "funding": {
3246
+ "type": "opencollective",
3247
+ "url": "https://opencollective.com/mui-org"
3248
+ },
3249
+ "peerDependencies": {
3250
+ "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
3251
+ "react": "^17.0.0 || ^18.0.0 || ^19.0.0"
3252
+ },
3253
+ "peerDependenciesMeta": {
3254
+ "@types/react": {
3255
+ "optional": true
3256
+ }
3257
+ }
3258
+ },
3259
+ "node_modules/@mui/utils/node_modules/react-is": {
3260
+ "version": "19.1.1",
3261
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
3262
+ "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
3263
+ "license": "MIT"
3264
+ },
3265
  "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
3266
  "version": "5.1.1-v1",
3267
  "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
 
3386
  }
3387
  }
3388
  },
3389
+ "node_modules/@popperjs/core": {
3390
+ "version": "2.11.8",
3391
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz",
3392
+ "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==",
3393
+ "license": "MIT",
3394
+ "funding": {
3395
+ "type": "opencollective",
3396
+ "url": "https://opencollective.com/popperjs"
3397
+ }
3398
+ },
3399
  "node_modules/@rollup/plugin-babel": {
3400
  "version": "5.3.1",
3401
  "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
 
4099
  "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
4100
  "license": "MIT"
4101
  },
4102
+ "node_modules/@types/prop-types": {
4103
+ "version": "15.7.15",
4104
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
4105
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
4106
+ "license": "MIT"
4107
+ },
4108
  "node_modules/@types/q": {
4109
  "version": "1.5.8",
4110
  "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz",
 
4123
  "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
4124
  "license": "MIT"
4125
  },
4126
+ "node_modules/@types/react": {
4127
+ "version": "19.1.9",
4128
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz",
4129
+ "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==",
4130
+ "license": "MIT",
4131
+ "peer": true,
4132
+ "dependencies": {
4133
+ "csstype": "^3.0.2"
4134
+ }
4135
+ },
4136
+ "node_modules/@types/react-transition-group": {
4137
+ "version": "4.4.12",
4138
+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz",
4139
+ "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==",
4140
+ "license": "MIT",
4141
+ "peerDependencies": {
4142
+ "@types/react": "*"
4143
+ }
4144
+ },
4145
  "node_modules/@types/resolve": {
4146
  "version": "1.17.1",
4147
  "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
 
5993
  "wrap-ansi": "^7.0.0"
5994
  }
5995
  },
5996
+ "node_modules/clsx": {
5997
+ "version": "2.1.1",
5998
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
5999
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
6000
+ "license": "MIT",
6001
+ "engines": {
6002
+ "node": ">=6"
6003
+ }
6004
+ },
6005
  "node_modules/co": {
6006
  "version": "4.6.0",
6007
  "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
 
6732
  "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
6733
  "license": "MIT"
6734
  },
6735
+ "node_modules/csstype": {
6736
+ "version": "3.1.3",
6737
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
6738
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
6739
+ "license": "MIT"
6740
+ },
6741
  "node_modules/damerau-levenshtein": {
6742
  "version": "1.0.8",
6743
  "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
 
7064
  "utila": "~0.4"
7065
  }
7066
  },
7067
+ "node_modules/dom-helpers": {
7068
+ "version": "5.2.1",
7069
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
7070
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
7071
+ "license": "MIT",
7072
+ "dependencies": {
7073
+ "@babel/runtime": "^7.8.7",
7074
+ "csstype": "^3.0.2"
7075
+ }
7076
+ },
7077
  "node_modules/dom-serializer": {
7078
  "version": "1.4.1",
7079
  "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
 
9535
  "node": ">= 4"
9536
  }
9537
  },
9538
+ "node_modules/immediate": {
9539
+ "version": "3.0.6",
9540
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
9541
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
9542
+ "license": "MIT"
9543
+ },
9544
  "node_modules/immer": {
9545
  "version": "9.0.21",
9546
  "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
 
11414
  "node": ">=4.0"
11415
  }
11416
  },
11417
+ "node_modules/jszip": {
11418
+ "version": "3.10.1",
11419
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
11420
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
11421
+ "license": "(MIT OR GPL-3.0-or-later)",
11422
+ "dependencies": {
11423
+ "lie": "~3.3.0",
11424
+ "pako": "~1.0.2",
11425
+ "readable-stream": "~2.3.6",
11426
+ "setimmediate": "^1.0.5"
11427
+ }
11428
+ },
11429
+ "node_modules/jszip/node_modules/isarray": {
11430
+ "version": "1.0.0",
11431
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
11432
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
11433
+ "license": "MIT"
11434
+ },
11435
+ "node_modules/jszip/node_modules/readable-stream": {
11436
+ "version": "2.3.8",
11437
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
11438
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
11439
+ "license": "MIT",
11440
+ "dependencies": {
11441
+ "core-util-is": "~1.0.0",
11442
+ "inherits": "~2.0.3",
11443
+ "isarray": "~1.0.0",
11444
+ "process-nextick-args": "~2.0.0",
11445
+ "safe-buffer": "~5.1.1",
11446
+ "string_decoder": "~1.1.1",
11447
+ "util-deprecate": "~1.0.1"
11448
+ }
11449
+ },
11450
+ "node_modules/jszip/node_modules/safe-buffer": {
11451
+ "version": "5.1.2",
11452
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
11453
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
11454
+ "license": "MIT"
11455
+ },
11456
+ "node_modules/jszip/node_modules/string_decoder": {
11457
+ "version": "1.1.1",
11458
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
11459
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
11460
+ "license": "MIT",
11461
+ "dependencies": {
11462
+ "safe-buffer": "~5.1.0"
11463
+ }
11464
+ },
11465
  "node_modules/keyv": {
11466
  "version": "4.5.4",
11467
  "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
 
11548
  "node": ">= 0.8.0"
11549
  }
11550
  },
11551
+ "node_modules/lie": {
11552
+ "version": "3.3.0",
11553
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
11554
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
11555
+ "license": "MIT",
11556
+ "dependencies": {
11557
+ "immediate": "~3.0.5"
11558
+ }
11559
+ },
11560
  "node_modules/lilconfig": {
11561
  "version": "2.1.0",
11562
  "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
 
12393
  "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
12394
  "license": "BlueOak-1.0.0"
12395
  },
12396
+ "node_modules/pako": {
12397
+ "version": "1.0.11",
12398
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
12399
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
12400
+ "license": "(MIT AND Zlib)"
12401
+ },
12402
  "node_modules/param-case": {
12403
  "version": "3.0.4",
12404
  "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
 
14446
  }
14447
  }
14448
  },
14449
+ "node_modules/react-transition-group": {
14450
+ "version": "4.4.5",
14451
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
14452
+ "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==",
14453
+ "license": "BSD-3-Clause",
14454
+ "dependencies": {
14455
+ "@babel/runtime": "^7.5.5",
14456
+ "dom-helpers": "^5.0.1",
14457
+ "loose-envify": "^1.4.0",
14458
+ "prop-types": "^15.6.2"
14459
+ },
14460
+ "peerDependencies": {
14461
+ "react": ">=16.6.0",
14462
+ "react-dom": ">=16.6.0"
14463
+ }
14464
+ },
14465
  "node_modules/read-cache": {
14466
  "version": "1.0.0",
14467
  "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
 
15341
  "node": ">= 0.4"
15342
  }
15343
  },
15344
+ "node_modules/setimmediate": {
15345
+ "version": "1.0.5",
15346
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
15347
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
15348
+ "license": "MIT"
15349
+ },
15350
  "node_modules/setprototypeof": {
15351
  "version": "1.2.0",
15352
  "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
 
16051
  "postcss": "^8.2.15"
16052
  }
16053
  },
16054
+ "node_modules/stylis": {
16055
+ "version": "4.2.0",
16056
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
16057
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
16058
+ "license": "MIT"
16059
+ },
16060
  "node_modules/sucrase": {
16061
  "version": "3.35.0",
16062
  "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
 
16828
  }
16829
  },
16830
  "node_modules/typescript": {
16831
+ "version": "4.9.5",
16832
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
16833
+ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
16834
  "license": "Apache-2.0",
16835
  "peer": true,
16836
  "bin": {
 
16838
  "tsserver": "bin/tsserver"
16839
  },
16840
  "engines": {
16841
+ "node": ">=4.2.0"
16842
  }
16843
  },
16844
  "node_modules/unbox-primitive": {
package.json CHANGED
@@ -3,11 +3,14 @@
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",
9
  "@testing-library/user-event": "^13.5.0",
10
  "axios": "^1.11.0",
 
11
  "react": "^19.1.0",
12
  "react-dom": "^19.1.0",
13
  "react-scripts": "5.0.1",
 
3
  "version": "0.1.0",
4
  "private": true,
5
  "dependencies": {
6
+ "@mui/icons-material": "^7.2.0",
7
+ "@mui/material": "^7.2.0",
8
  "@testing-library/dom": "^10.4.0",
9
  "@testing-library/jest-dom": "^6.6.3",
10
  "@testing-library/react": "^16.3.0",
11
  "@testing-library/user-event": "^13.5.0",
12
  "axios": "^1.11.0",
13
+ "jszip": "^3.10.1",
14
  "react": "^19.1.0",
15
  "react-dom": "^19.1.0",
16
  "react-scripts": "5.0.1",
src/FileUploadForm.js CHANGED
@@ -1,6 +1,28 @@
1
- // src/FileUploadForm.js
2
- import React, { useState } from 'react';
3
- import axios from 'axios';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  const FileUploadForm = () => {
6
  const [file, setFile] = useState(null);
@@ -8,10 +30,14 @@ const FileUploadForm = () => {
8
  const [backend, setBackend] = useState("Flask");
9
  const [database, setDatabase] = useState("PostgreSQL");
10
  const [loading, setLoading] = useState(false);
 
 
 
 
11
 
12
  const handleDownload = async (e) => {
13
  e.preventDefault();
14
- if (!file) return alert("Please select a file!");
15
 
16
  const formData = new FormData();
17
  formData.append("file", file);
@@ -22,60 +48,158 @@ const FileUploadForm = () => {
22
  try {
23
  setLoading(true);
24
  const response = await axios.post(
25
- "https://fredericksundeep-aichatmatedev.hf.space/chat-stream-doc", // ✅ Update to actual URL
26
  formData,
27
- {
28
- responseType: "blob", // important for zip file
29
- }
30
  );
31
 
32
- // create download link
33
  const blob = new Blob([response.data], { type: "application/zip" });
34
- const url = window.URL.createObjectURL(blob);
35
- const a = document.createElement("a");
36
- a.href = url;
37
- a.download = "generated_project.zip";
38
- document.body.appendChild(a);
39
- a.click();
40
- window.URL.revokeObjectURL(url);
 
41
  } catch (error) {
42
  console.error("Error downloading ZIP:", error);
43
- alert("Failed to generate ZIP. Check your input or server logs.");
44
  } finally {
45
  setLoading(false);
46
  }
47
  };
48
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  return (
50
- <form onSubmit={handleDownload}>
51
- <h2>Upload Requirement Document</h2>
52
- <input type="file" onChange={(e) => setFile(e.target.files[0])} accept=".txt,.pdf" required />
53
- <br />
54
- <label>Frontend:</label>
55
- <select value={frontend} onChange={(e) => setFrontend(e.target.value)}>
56
- <option value="React">React</option>
57
- <option value="Angular">Angular</option>
58
- <option value="Vue">Vue</option>
59
- </select>
60
- <br />
61
- <label>Backend:</label>
62
- <select value={backend} onChange={(e) => setBackend(e.target.value)}>
63
- <option value="Flask">Flask</option>
64
- <option value="Node.js">Node.js</option>
65
- <option value="Django">Django</option>
66
- </select>
67
- <br />
68
- <label>Database:</label>
69
- <select value={database} onChange={(e) => setDatabase(e.target.value)}>
70
- <option value="PostgreSQL">PostgreSQL</option>
71
- <option value="MongoDB">MongoDB</option>
72
- <option value="MySQL">MySQL</option>
73
- </select>
74
- <br /><br />
75
- <button type="submit" disabled={loading}>
76
- {loading ? "Generating..." : "Generate ZIP"}
77
- </button>
78
- </form>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  );
80
  };
81
 
 
1
+ import React, { useState } from "react";
2
+ import axios from "axios";
3
+ import {
4
+ Box,
5
+ Button,
6
+ CircularProgress,
7
+ InputLabel,
8
+ MenuItem,
9
+ Select,
10
+ Typography,
11
+ FormControl,
12
+ Grid,
13
+ Paper,
14
+ Snackbar,
15
+ Alert,
16
+ Dialog,
17
+ DialogTitle,
18
+ DialogContent,
19
+ DialogActions,
20
+ List,
21
+ ListItem,
22
+ ListItemText,
23
+ } from "@mui/material";
24
+ import CloudUploadIcon from "@mui/icons-material/CloudUpload";
25
+ import DownloadIcon from "@mui/icons-material/Download";
26
 
27
  const FileUploadForm = () => {
28
  const [file, setFile] = useState(null);
 
30
  const [backend, setBackend] = useState("Flask");
31
  const [database, setDatabase] = useState("PostgreSQL");
32
  const [loading, setLoading] = useState(false);
33
+ const [showSnackbar, setShowSnackbar] = useState(false);
34
+ const [showModal, setShowModal] = useState(false);
35
+ const [fileList, setFileList] = useState([]);
36
+ const [zipBlob, setZipBlob] = useState(null);
37
 
38
  const handleDownload = async (e) => {
39
  e.preventDefault();
40
+ if (!file) return alert("Please select a requirement document!");
41
 
42
  const formData = new FormData();
43
  formData.append("file", file);
 
48
  try {
49
  setLoading(true);
50
  const response = await axios.post(
51
+ "https://fredericksundeep-aichatmatedev.hf.space/chat-stream-doc",
52
  formData,
53
+ { responseType: "blob" }
 
 
54
  );
55
 
 
56
  const blob = new Blob([response.data], { type: "application/zip" });
57
+ setZipBlob(blob);
58
+
59
+ // Parse file names from inside the ZIP blob using JSZip (client-side)
60
+ const JSZip = (await import("jszip")).default;
61
+ const zip = await JSZip.loadAsync(blob);
62
+ const filenames = Object.keys(zip.files);
63
+ setFileList(filenames);
64
+ setShowModal(true);
65
  } catch (error) {
66
  console.error("Error downloading ZIP:", error);
67
+ alert("Failed to generate project. Check server logs.");
68
  } finally {
69
  setLoading(false);
70
  }
71
  };
72
 
73
+ const handleZipDownload = () => {
74
+ const url = window.URL.createObjectURL(zipBlob);
75
+ const a = document.createElement("a");
76
+ a.href = url;
77
+ a.download = "generated_project.zip";
78
+ document.body.appendChild(a);
79
+ a.click();
80
+ window.URL.revokeObjectURL(url);
81
+ setShowSnackbar(true);
82
+ setShowModal(false);
83
+ };
84
+
85
  return (
86
+ <Box
87
+ sx={{
88
+ backgroundColor: "#121212",
89
+ minHeight: "100vh",
90
+ color: "#fff",
91
+ padding: 4,
92
+ display: "flex",
93
+ justifyContent: "center",
94
+ alignItems: "center",
95
+ }}
96
+ >
97
+ <Paper elevation={6} sx={{ padding: 4, backgroundColor: "#1e1e1e", maxWidth: 600, width: "100%" }}>
98
+ <Typography variant="h5" gutterBottom color="primary">
99
+ 📄 Generate Full-Stack Project from Requirements
100
+ </Typography>
101
+
102
+ <form onSubmit={handleDownload}>
103
+ <Grid container spacing={2}>
104
+ <Grid item xs={12}>
105
+ <Button
106
+ variant="contained"
107
+ component="label"
108
+ startIcon={<CloudUploadIcon />}
109
+ fullWidth
110
+ >
111
+ {file ? file.name : "Upload Requirement Document"}
112
+ <input
113
+ type="file"
114
+ hidden
115
+ required
116
+ onChange={(e) => setFile(e.target.files[0])}
117
+ accept=".pdf,.txt"
118
+ />
119
+ </Button>
120
+ </Grid>
121
+
122
+ <Grid item xs={12} sm={4}>
123
+ <FormControl fullWidth>
124
+ <InputLabel>Frontend</InputLabel>
125
+ <Select value={frontend} onChange={(e) => setFrontend(e.target.value)} label="Frontend">
126
+ <MenuItem value="React">React</MenuItem>
127
+ <MenuItem value="Angular">Angular</MenuItem>
128
+ <MenuItem value="Vue">Vue</MenuItem>
129
+ </Select>
130
+ </FormControl>
131
+ </Grid>
132
+
133
+ <Grid item xs={12} sm={4}>
134
+ <FormControl fullWidth>
135
+ <InputLabel>Backend</InputLabel>
136
+ <Select value={backend} onChange={(e) => setBackend(e.target.value)} label="Backend">
137
+ <MenuItem value="Flask">Flask</MenuItem>
138
+ <MenuItem value="Node.js">Node.js</MenuItem>
139
+ <MenuItem value="Django">Django</MenuItem>
140
+ </Select>
141
+ </FormControl>
142
+ </Grid>
143
+
144
+ <Grid item xs={12} sm={4}>
145
+ <FormControl fullWidth>
146
+ <InputLabel>Database</InputLabel>
147
+ <Select value={database} onChange={(e) => setDatabase(e.target.value)} label="Database">
148
+ <MenuItem value="PostgreSQL">PostgreSQL</MenuItem>
149
+ <MenuItem value="MongoDB">MongoDB</MenuItem>
150
+ <MenuItem value="MySQL">MySQL</MenuItem>
151
+ </Select>
152
+ </FormControl>
153
+ </Grid>
154
+
155
+ <Grid item xs={12}>
156
+ <Button
157
+ type="submit"
158
+ variant="contained"
159
+ color="secondary"
160
+ startIcon={loading ? <CircularProgress size={20} /> : <DownloadIcon />}
161
+ fullWidth
162
+ disabled={loading}
163
+ >
164
+ {loading ? "Generating..." : "Generate Project ZIP"}
165
+ </Button>
166
+ </Grid>
167
+ </Grid>
168
+ </form>
169
+ </Paper>
170
+
171
+ {/* ✅ File Preview Modal */}
172
+ <Dialog open={showModal} onClose={() => setShowModal(false)} maxWidth="sm" fullWidth>
173
+ <DialogTitle>📦 Generated Files Preview</DialogTitle>
174
+ <DialogContent dividers>
175
+ <List dense>
176
+ {fileList.map((filename, i) => (
177
+ <ListItem key={i}>
178
+ <ListItemText primary={filename} />
179
+ </ListItem>
180
+ ))}
181
+ </List>
182
+ </DialogContent>
183
+ <DialogActions>
184
+ <Button onClick={handleZipDownload} variant="contained" color="primary">
185
+ Download ZIP
186
+ </Button>
187
+ <Button onClick={() => setShowModal(false)}>Cancel</Button>
188
+ </DialogActions>
189
+ </Dialog>
190
+
191
+ {/* ✅ Success Snackbar */}
192
+ <Snackbar
193
+ open={showSnackbar}
194
+ autoHideDuration={4000}
195
+ onClose={() => setShowSnackbar(false)}
196
+ anchorOrigin={{ vertical: "bottom", horizontal: "center" }}
197
+ >
198
+ <Alert onClose={() => setShowSnackbar(false)} severity="success" sx={{ width: "100%" }}>
199
+ ✅ ZIP downloaded successfully!
200
+ </Alert>
201
+ </Snackbar>
202
+ </Box>
203
  );
204
  };
205
 
src/index.js CHANGED
@@ -1,17 +1,25 @@
1
- import React from 'react';
2
- import ReactDOM from 'react-dom/client';
3
- import './index.css';
4
- import App from './App';
5
- import reportWebVitals from './reportWebVitals';
6
 
7
- const root = ReactDOM.createRoot(document.getElementById('root'));
8
- root.render(
9
- <React.StrictMode>
 
 
 
 
 
 
 
 
 
 
 
 
10
  <App />
11
- </React.StrictMode>
 
12
  );
13
-
14
- // If you want to start measuring performance in your app, pass a function
15
- // to log results (for example: reportWebVitals(console.log))
16
- // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17
- reportWebVitals();
 
1
+ import React from "react";
2
+ import ReactDOM from "react-dom";
3
+ import App from "./App";
4
+ import { createTheme, ThemeProvider } from "@mui/material/styles";
5
+ import CssBaseline from "@mui/material/CssBaseline";
6
 
7
+ const darkTheme = createTheme({
8
+ palette: {
9
+ mode: "dark",
10
+ primary: {
11
+ main: "#90caf9",
12
+ },
13
+ secondary: {
14
+ main: "#f48fb1",
15
+ },
16
+ },
17
+ });
18
+
19
+ ReactDOM.render(
20
+ <ThemeProvider theme={darkTheme}>
21
+ <CssBaseline />
22
  <App />
23
+ </ThemeProvider>,
24
+ document.getElementById("root")
25
  );