diff --git a/README.md b/README.md index f768e33f..19bf978d 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,78 @@ Currently, two official plugins are available: - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +📝 `NOTE` Use this template to initialize the contents of a README.md file for your application. As you work on your assignment over the course of the week, update the required or stretch features lists to indicate which features you have completed by changing `[ ]` to `[x]`. (🚫 Remove this paragraph before submitting your assignment.) + +## Unit Assignment: Flixster + +Submitted by: Oluwatosin Oyekeye + +Estimated time spent: 25 hours spent in total + +Deployed Application (optional): [Flixster Deployed Site] https://flixster-starter-1cb8.onrender.com/ + +### Application Features + +#### CORE FEATURES + + +- [X ] **Display Movies** + - [ X] Users can view a list of current movies from The Movie Database API. + - [X ] For each movie displayed, users can see its title, poster image, and votes. + - [ X] Users can load more current movies by clicking a button at the bottom of the list (page should not be reloaded). +- [X ] **Search Functionality** + - [X ] Users can search for movies and view the results in a grid. + - [X ] Users can clear results and view previous current movies displayed. +- [X ] **Accessibility Features** + - [ X] Website implements accessibility features (semantic HTML, color contrast, font sizing, alt text for images). +- [ x] **Responsive Design** + - [x ] Website implements responsive web design. +- [x ] **Movie Details** + - [ x] Users can view more details about a movie in a popup, such as runtime in minutes, backdrop poster, release date, genres, and/or an overview. +- [ x] **Sorting Options** + - [ x] Users can click on a filter by drop down to sort product by type (alphabetic, release date, rating). +- [ x] **Layout** + - [x] Website displays header, banner, search, movie grid, about, contact, and footer section. + +#### STRETCH FEATURES + +- [ x] **Deployment** + - [x ] Website is deployed via Render. +- [x ] **Embedded Movie Trailers** + - [ x] Within the popup displaying a movie's details, users can play the movie trailer. +- [x ] **Watched Checkbox** + - [ x] For each movie displayed, users can mark the movie as watched. +- [ x] **Favorite Button** + - [ x] For each movie displayed, users can favorite the movie. +- [x ] **Sidebar** + - [ x] Users can open a sidebar + - [ x] The sidebar displays the user's favorited and watched movies + +### Walkthrough Video + +`TODO://` +`ADD_EMBEDDED_CODE_HERE` https://www.loom.com/share/7917f1c647d0416797f0ac1e811f3728?sid=9b4a8429-b055-4c8a-a64b-974190caff0a + +### Reflection + +* Did the topics discussed in your labs prepare you to complete the assignment? Be specific, which features in your weekly assignment did you feel unprepared to complete? + +They prepared me for only a little part the project. Lectures on useState and API calls did help + +* If you had more time, what would you have done differently? Would you have added additional features? Changed the way your project responded to a particular event, etc. + +With more time, I would have done some more unique designs for User experience + +* Reflect on your project demo, what went well? Were there things that maybe didn't go as planned? Did you notice something that your peer did that you would like to try next time? + +Using APIs for the first time stood out to me. I always thought it was a really hard and long process + +### Open-source libraries used + +- Add any links to open-source libraries used in your project. + +### Shout out + +Give a shout out to somebody from your cohort that especially helped you during your project. This can be a fellow peer, instructor, TA, mentor, etc. +I would like to shout out to my manager for taking her time to break down concepts for my understanding. Also special appreciation to Paige, Sammy, and Erika for the quick fixes and debugging help. And to my peers like Izu, Dara, Ian, shoutout for brainstorming solutions with me. diff --git a/index.html b/index.html index 0abcfe5f..6fafd91a 100644 --- a/index.html +++ b/index.html @@ -9,5 +9,16 @@
+ + diff --git a/package-lock.json b/package-lock.json index 92a683d2..0d8b43ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,10 @@ "name": "flixster", "version": "0.0.0", "dependencies": { +<<<<<<< HEAD + "axios": "^1.7.2", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -22,6 +26,8 @@ "vite": "^5.2.0" } }, +<<<<<<< HEAD +======= "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", @@ -31,6 +37,7 @@ "node": ">=0.10.0" } }, +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -45,12 +52,21 @@ } }, "node_modules/@babel/code-frame": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", +======= "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", "dev": true, "dependencies": { "@babel/highlight": "^7.24.2", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "picocolors": "^1.0.0" }, "engines": { @@ -58,15 +74,38 @@ } }, "node_modules/@babel/compat-data": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", +======= "version": "7.24.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", @@ -82,6 +121,7 @@ "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -97,12 +137,21 @@ } }, "node_modules/@babel/generator": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7", +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", "dev": true, "dependencies": { "@babel/types": "^7.24.0", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -112,6 +161,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", +======= "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", @@ -119,6 +177,7 @@ "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -128,15 +187,34 @@ } }, "node_modules/@babel/helper-environment-visitor": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, +======= "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" +======= "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", @@ -144,36 +222,68 @@ "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" +======= "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" +======= "version": "7.24.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", "dev": true, "dependencies": { "@babel/types": "^7.24.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" +======= "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", @@ -184,6 +294,7 @@ "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "@babel/helper-validator-identifier": "^7.22.20" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" @@ -193,66 +304,118 @@ } }, "node_modules/@babel/helper-plugin-utils": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", +======= "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" +======= "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" +======= "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { "@babel/types": "^7.22.5" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", +======= "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", +======= "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", @@ -261,18 +424,28 @@ "@babel/template": "^7.24.0", "@babel/traverse": "^7.24.1", "@babel/types": "^7.24.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", +======= "version": "7.24.2", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -282,9 +455,15 @@ } }, "node_modules/@babel/parser": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -294,12 +473,21 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" @@ -309,12 +497,21 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.24.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" @@ -324,6 +521,16 @@ } }, "node_modules/@babel/template": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" +======= "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", @@ -332,12 +539,28 @@ "@babel/code-frame": "^7.23.5", "@babel/parser": "^7.24.0", "@babel/types": "^7.24.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", +======= "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", @@ -351,6 +574,7 @@ "@babel/helper-split-export-declaration": "^7.22.6", "@babel/parser": "^7.24.1", "@babel/types": "^7.24.0", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -359,6 +583,15 @@ } }, "node_modules/@babel/types": { +<<<<<<< HEAD + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", +======= "version": "7.24.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", @@ -366,6 +599,7 @@ "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "to-fast-properties": "^2.0.0" }, "engines": { @@ -756,9 +990,15 @@ } }, "node_modules/@eslint-community/regexpp": { +<<<<<<< HEAD + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", +======= "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -815,6 +1055,10 @@ "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", +<<<<<<< HEAD + "deprecated": "Use @eslint/config-array instead", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", @@ -842,6 +1086,10 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", +<<<<<<< HEAD + "deprecated": "Use @eslint/object-schema instead", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -928,9 +1176,15 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm" ], @@ -941,9 +1195,15 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm64" ], @@ -954,9 +1214,15 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm64" ], @@ -967,9 +1233,15 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "x64" ], @@ -980,9 +1252,28 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm" ], @@ -993,9 +1284,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm64" ], @@ -1006,9 +1303,15 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm64" ], @@ -1019,11 +1322,19 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", "cpu": [ "ppc64le" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 ], "dev": true, "optional": true, @@ -1032,9 +1343,15 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "riscv64" ], @@ -1045,9 +1362,15 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "s390x" ], @@ -1058,9 +1381,15 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "x64" ], @@ -1071,9 +1400,15 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "x64" ], @@ -1084,9 +1419,15 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "arm64" ], @@ -1097,9 +1438,15 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "ia32" ], @@ -1110,9 +1457,15 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", + "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "cpu": [ "x64" ], @@ -1155,9 +1508,15 @@ } }, "node_modules/@types/babel__traverse": { +<<<<<<< HEAD + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", +======= "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -1176,9 +1535,15 @@ "dev": true }, "node_modules/@types/react": { +<<<<<<< HEAD + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", +======= "version": "18.2.74", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.74.tgz", "integrity": "sha512-9AEqNZZyBx8OdZpxzQlaFEVCSFUM2YXJH46yPOiOpm078k6ZLOCcuAzGum/zK8YBwY+dbahVNbHrbgrAwIRlqw==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "@types/prop-types": "*", @@ -1186,9 +1551,15 @@ } }, "node_modules/@types/react-dom": { +<<<<<<< HEAD + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", +======= "version": "18.2.23", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "@types/react": "*" @@ -1201,6 +1572,18 @@ "dev": true }, "node_modules/@vitejs/plugin-react": { +<<<<<<< HEAD + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" +======= "version": "4.2.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", @@ -1211,6 +1594,7 @@ "@babel/plugin-transform-react-jsx-source": "^7.23.3", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1388,6 +1772,21 @@ } }, "node_modules/array.prototype.tosorted": { +<<<<<<< HEAD + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" +======= "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", @@ -1398,6 +1797,7 @@ "es-abstract": "^1.22.3", "es-errors": "^1.1.0", "es-shim-unscopables": "^1.0.2" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 } }, "node_modules/arraybuffer.prototype.slice": { @@ -1422,6 +1822,14 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1437,6 +1845,19 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1454,9 +1875,15 @@ } }, "node_modules/browserslist": { +<<<<<<< HEAD + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", +======= "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "funding": [ { @@ -1473,10 +1900,17 @@ } ], "dependencies": { +<<<<<<< HEAD + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" +======= "caniuse-lite": "^1.0.30001587", "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "bin": { "browserslist": "cli.js" @@ -1514,9 +1948,15 @@ } }, "node_modules/caniuse-lite": { +<<<<<<< HEAD + "version": "1.0.30001632", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001632.tgz", + "integrity": "sha512-udx3o7yHJfUxMLkGohMlVHCvFvWmirKh9JAH/d7WOLPetlH+LTL5cocMZ0t7oZx/mdlOWXti97xLZWc8uURRHg==", +======= "version": "1.0.30001605", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "funding": [ { @@ -1562,6 +2002,20 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, +<<<<<<< HEAD + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1646,9 +2100,15 @@ } }, "node_modules/debug": { +<<<<<<< HEAD + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", +======= "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "ms": "2.1.2" @@ -1702,6 +2162,17 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -1715,9 +2186,15 @@ } }, "node_modules/electron-to-chromium": { +<<<<<<< HEAD + "version": "1.4.796", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", + "integrity": "sha512-NglN/xprcM+SHD2XCli4oC6bWe6kHoytcyLKCWXmRL854F0qhPhaYgUswUsglnPxYaNQIg2uMY4BvaomIf3kLA==", +======= "version": "1.4.724", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz", "integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true }, "node_modules/es-abstract": { @@ -1802,14 +2279,24 @@ } }, "node_modules/es-iterator-helpers": { +<<<<<<< HEAD + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", +======= "version": "1.0.18", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", +<<<<<<< HEAD + "es-abstract": "^1.23.3", +======= "es-abstract": "^1.23.0", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", @@ -1990,6 +2477,15 @@ } }, "node_modules/eslint-plugin-react": { +<<<<<<< HEAD + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", +======= "version": "7.34.1", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", @@ -1997,10 +2493,25 @@ "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlast": "^1.2.4", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "array.prototype.flatmap": "^1.3.2", "array.prototype.toreversed": "^1.1.2", "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", +<<<<<<< HEAD + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" +======= "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", @@ -2013,6 +2524,7 @@ "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.10" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">=4" @@ -2022,9 +2534,15 @@ } }, "node_modules/eslint-plugin-react-hooks": { +<<<<<<< HEAD + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", +======= "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=10" @@ -2034,9 +2552,15 @@ } }, "node_modules/eslint-plugin-react-refresh": { +<<<<<<< HEAD + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", +======= "version": "0.4.6", "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "peerDependencies": { "eslint": ">=7" @@ -2313,6 +2837,28 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, +<<<<<<< HEAD + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", @@ -2322,6 +2868,22 @@ "is-callable": "^1.1.3" } }, +<<<<<<< HEAD + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2427,6 +2989,10 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", +<<<<<<< HEAD + "deprecated": "Glob versions prior to v9 are no longer supported", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -2465,12 +3031,22 @@ } }, "node_modules/globalthis": { +<<<<<<< HEAD + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" +======= "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", "dev": true, "dependencies": { "define-properties": "^1.1.3" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">= 0.4" @@ -2616,6 +3192,10 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", +<<<<<<< HEAD + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "once": "^1.3.0", @@ -3141,6 +3721,28 @@ "yallist": "^3.0.2" } }, +<<<<<<< HEAD + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3310,17 +3912,30 @@ } }, "node_modules/optionator": { +<<<<<<< HEAD + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { +======= "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", +<<<<<<< HEAD + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" +======= "type-check": "^0.4.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "engines": { "node": ">= 0.8.0" @@ -3402,9 +4017,15 @@ "dev": true }, "node_modules/picocolors": { +<<<<<<< HEAD + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", +======= "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true }, "node_modules/possible-typed-array-names": { @@ -3464,6 +4085,14 @@ "react-is": "^16.13.1" } }, +<<<<<<< HEAD + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3494,9 +4123,15 @@ ] }, "node_modules/react": { +<<<<<<< HEAD + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", +======= "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dependencies": { "loose-envify": "^1.1.0" }, @@ -3505,6 +4140,17 @@ } }, "node_modules/react-dom": { +<<<<<<< HEAD + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" +======= "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", @@ -3514,6 +4160,7 @@ }, "peerDependencies": { "react": "^18.2.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 } }, "node_modules/react-is": { @@ -3523,9 +4170,15 @@ "dev": true }, "node_modules/react-refresh": { +<<<<<<< HEAD + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", +======= "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "engines": { "node": ">=0.10.0" @@ -3610,6 +4263,10 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", +<<<<<<< HEAD + "deprecated": "Rimraf versions prior to v4 are no longer supported", +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "glob": "^7.1.3" @@ -3622,9 +4279,15 @@ } }, "node_modules/rollup": { +<<<<<<< HEAD + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", + "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", +======= "version": "4.13.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3637,6 +4300,24 @@ "npm": ">=8.0.0" }, "optionalDependencies": { +<<<<<<< HEAD + "@rollup/rollup-android-arm-eabi": "4.18.0", + "@rollup/rollup-android-arm64": "4.18.0", + "@rollup/rollup-darwin-arm64": "4.18.0", + "@rollup/rollup-darwin-x64": "4.18.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", + "@rollup/rollup-linux-arm-musleabihf": "4.18.0", + "@rollup/rollup-linux-arm64-gnu": "4.18.0", + "@rollup/rollup-linux-arm64-musl": "4.18.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", + "@rollup/rollup-linux-riscv64-gnu": "4.18.0", + "@rollup/rollup-linux-s390x-gnu": "4.18.0", + "@rollup/rollup-linux-x64-gnu": "4.18.0", + "@rollup/rollup-linux-x64-musl": "4.18.0", + "@rollup/rollup-win32-arm64-msvc": "4.18.0", + "@rollup/rollup-win32-ia32-msvc": "4.18.0", + "@rollup/rollup-win32-x64-msvc": "4.18.0", +======= "@rollup/rollup-android-arm-eabi": "4.13.2", "@rollup/rollup-android-arm64": "4.13.2", "@rollup/rollup-darwin-arm64": "4.13.2", @@ -3652,6 +4333,7 @@ "@rollup/rollup-win32-arm64-msvc": "4.13.2", "@rollup/rollup-win32-ia32-msvc": "4.13.2", "@rollup/rollup-win32-x64-msvc": "4.13.2", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "fsevents": "~2.3.2" } }, @@ -3714,9 +4396,15 @@ } }, "node_modules/scheduler": { +<<<<<<< HEAD + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", +======= "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dependencies": { "loose-envify": "^1.1.0" } @@ -4061,9 +4749,15 @@ } }, "node_modules/update-browserslist-db": { +<<<<<<< HEAD + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", +======= "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "funding": [ { @@ -4080,8 +4774,13 @@ } ], "dependencies": { +<<<<<<< HEAD + "escalade": "^3.1.2", + "picocolors": "^1.0.1" +======= "escalade": "^3.1.1", "picocolors": "^1.0.0" +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 }, "bin": { "update-browserslist-db": "cli.js" @@ -4100,9 +4799,15 @@ } }, "node_modules/vite": { +<<<<<<< HEAD + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.13.tgz", + "integrity": "sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==", +======= "version": "5.2.7", "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "dev": true, "dependencies": { "esbuild": "^0.20.1", @@ -4248,6 +4953,18 @@ "url": "https://github.com/sponsors/ljharb" } }, +<<<<<<< HEAD + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, +======= +>>>>>>> 1df80dae512daf95c0ef6e398da96500f64caeb0 "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index eded5715..e11a665a 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "axios": "^1.7.2", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 00000000..e7b8dfb1 --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/.env b/src/.env new file mode 100644 index 00000000..ea01e20f --- /dev/null +++ b/src/.env @@ -0,0 +1,9 @@ +VITE_API_KEY = 9fc2582941573c4b168e5c4155a13688 +const url = 'https://api.themoviedb.org/3/movie/now_playing?language=en-US&page=1'; +const options = {method: 'GET', headers: {accept: 'application/json'}}; +const genreURL = 'https://api.themoviedb.org/3/genre/movie/list?&api_key=9fc2582941573c4b168e5c4155a13688&language=en'; + +fetch(url, options) + .then(res => res.json()) + .then(json => console.log(json)) + .catch(err => console.error('error:' + err)); diff --git a/src/App.css b/src/App.css index 0bf65669..bd7b369c 100644 --- a/src/App.css +++ b/src/App.css @@ -1,7 +1,6 @@ .App { text-align: center; } - .App-header { background-color: #282c34; display: flex; @@ -12,6 +11,7 @@ padding: 20px; } + @media (max-width: 600px) { .movie-card { width: 100%; diff --git a/src/App.jsx b/src/App.jsx index 48215b3f..e79340f4 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,10 +1,13 @@ -import { useState } from 'react' import './App.css' +import MovieList from './MovieList' -const App = () => { -
- -
+function App() { + return ( +
+ +
+ ) } export default App + diff --git a/src/Favorites.jsx b/src/Favorites.jsx new file mode 100644 index 00000000..8f97e8be --- /dev/null +++ b/src/Favorites.jsx @@ -0,0 +1,23 @@ +import './MovieCard.css' +import './WatchList.css' + +function Favorites({movies, favoriteList}) { + const FavoritesMovies = movies.filter(movie => favoriteList.includes(movie.id)); + return ( +
+

Favorites

+
+ {FavoritesMovies.map((movie, i) => ( +
+ Movie Poster iamge +

{movie.title}

+

Rating: {movie.vote_average}

+
+ ))} +
+ +
+ ) +} + +export default Favorites; diff --git a/src/MenuBar.css b/src/MenuBar.css new file mode 100644 index 00000000..5dd2a780 --- /dev/null +++ b/src/MenuBar.css @@ -0,0 +1,79 @@ +.menu-bar{ + background-color: black; + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + left: 0; + top: 0; + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + justify-content: center; + align-items: center; + display: flex; + width: 30%; +} +.menuText{ + color: white; + font-size: 2rem; + text-align: left; +} +.menuCloseBtn{ + color: white; + padding: 0; + display: flex; + justify-content: flex-end; + width: 100%; +} +.menuOptions{ + align-content: left; + width: 100%; +} + +.closeMenuX{ + padding: 0.2rem; + width: 3rem; + border-radius: 0.1rem; + align-items: right; +} +.fa-solids{ + margin: 2rem; +} +.menuText:hover{ + transform: translateX(20px); +} + +@media (max-width: 1000px) { + p{ + font-size: 15px; + } + h1{ + font-size: 20px; + } + h2{ + font-size: 18px; + } + h3{ + font-size: 13px; + } + .menu-bar{ + width: 50%; + } + } + + @media (max-width: 500px) { + p{ + font-size: 10px; + } + h1{ + font-size: 14px; + } + h2{ + font-size: 13px; + } + h3{ + font-size: 10px; + text-wrap: wrap; + } + .menu-bar{ + width: 100%; + } + } diff --git a/src/MenuBar.jsx b/src/MenuBar.jsx new file mode 100644 index 00000000..48e41743 --- /dev/null +++ b/src/MenuBar.jsx @@ -0,0 +1,23 @@ +import "./MenuBar.css"; + +function MenuBar({ movie, setOpenModal, setView }) { + return ( +
+
+
+ +
+
+

setView('movies')}> Home

+

setView('favorites')}> Favorites

+

setView('watchlist')}> Watchlist

+
+
+ +
+
+
+ ); +} + +export default MenuBar; diff --git a/src/Modal.css b/src/Modal.css new file mode 100644 index 00000000..6c958ee5 --- /dev/null +++ b/src/Modal.css @@ -0,0 +1,108 @@ +.modalBackground { + /* Hidden by default */ + position: fixed; /* Stay in place */ + z-index: 1; /* Sit on top */ + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgba(0,0,0,0.4); /* Black w/ opacity] */ + justify-content: center; + align-items: center; + display: flex; + backdrop-filter: blur(5px); +} +.modalBackground { + width: 100vw; + height: 100vh; + position: fixed; +} + +.modalContainer { + width: 50rem; + height: 500px; + border-radius: 12px; + background-color: white; + box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; + display: flex; + flex-direction: column; + padding: 25px; + overflow: auto; +} + +.modalText{ + font-size: 1rem; + color: white; +} + +.modalContainer .title { + display: inline-block; + text-align: center; + margin-top: 10px; +} + +.titleCloseBtn { + display: flex; + justify-content: flex-end; +} + +.titleCloseBtn button { + background-color: transparent; + border: none; + font-size: 25px; + cursor: pointer; + color: white; +} + +.modalContainer .body { + flex: 50%; + justify-content: center; + align-items: center; + font-size: 1.7rem; + text-align: center; + display: block; +} + +.modalContainer .footer { + flex: 20%; + display: flex; + justify-content: center; + align-items: center; +} + +.modalContainer .footer button { + width: 150px; + height: 45px; + margin: 10px; + border: none; + background-color: cornflowerblue; + color: white; + border-radius: 8px; + font-size: 20px; + cursor: pointer; +} +.titleCloseBtn{ + padding: 0; +} +.xSign{ + margin: 1.5rem; + padding: 0; +} + +#cancelBtn { + background-color: crimson; +} + +.backdrop{ + width: 100%; + margin-top: 2rem; + margin-bottom: 2rem; +} +.title{ + color: white; +} + +.modal-body{ + background-image: 'https://image.tmdb.org/t/p/w500${movie.poster_path}'; +} diff --git a/src/Modal.jsx b/src/Modal.jsx new file mode 100644 index 00000000..14434a72 --- /dev/null +++ b/src/Modal.jsx @@ -0,0 +1,40 @@ +import "./Modal.css"; + +function Modal({ movie, setOpenModal, getGenreName, trailers}) { + return ( +
+
+
+ +
+
+

{movie.title}

+
+
+ Movie poster image +

Release Date: {movie.release_date}

+

Overview: {movie.overview}

+

Genres: {getGenreName(movie.genre_ids)}

+ {trailers[movie.id] && ( +
+ +
+ )} +
+
+ +
+
+
+ ); +} + +export default Modal; diff --git a/src/MovieCard.css b/src/MovieCard.css new file mode 100644 index 00000000..605b5268 --- /dev/null +++ b/src/MovieCard.css @@ -0,0 +1,30 @@ +.movieCards{ + justify-content: space-between; + display: flex; + flex-wrap: nowrap; +} +.movieCardImg{ + width: 100%; + display: block; + border-top-left-radius: 17px; + border-top-right-radius: 17px; + width: 18rem; + height: 18rem; +} +.movieCard-title{ + font-weight: bold; + text-wrap: wrap; +} +.watch-button{ + padding: 0.2rem; +} + +p{ + color: white; +} +i{ + color: white; +} +.fa-heart:hover{ + cursor: pointer; +} diff --git a/src/MovieCard.jsx b/src/MovieCard.jsx new file mode 100644 index 00000000..0b5dd618 --- /dev/null +++ b/src/MovieCard.jsx @@ -0,0 +1,23 @@ +import './MovieCard.css' + +function MovieCard(props) { + return ( + <> +
+
+ Movie poster image +

{props.title}

+ + +

Rating: {props.vote_average}

+
+
+ + ) +} + +export default MovieCard; diff --git a/src/MovieList.css b/src/MovieList.css new file mode 100644 index 00000000..196fba8b --- /dev/null +++ b/src/MovieList.css @@ -0,0 +1,82 @@ +.movieList{ + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin-top: 2rem; + margin-left: 2.5rem; + margin-right: 2.5rem; +} +.movie-cards{ + border: 1.5px solid white; + margin: 1rem; + border-radius: 20px; + width: 18rem; + background-color: rgba(190, 190, 190, 0.231); +} +.movie-cards:hover{ + transition: 0.1s; + transform: scale(1.1); + box-shadow: 0 8px 16px rgba(213, 205, 205, 0.4); + border: solid gold; +} +.AppName{ + font-family: cursive; +} +button{ + background-color: black; + margin: 1.5rem; + width: 8rem; +} +.filters{ + display: inline; + margin: 1rem; + padding: 2rem; +} +.title{ + display: inline; +} +.title i{ + align-self: center; + float: left; + padding: 15px; +} +h1{ + color: white; +} +label{ + color: white; +} +img{ + width: 12rem; + height: 10rem; +} +input{ + border-radius: 2rem; + height: 1.5rem; + width: 15rem; + padding: 0.7rem; +} +select{ + height: 1.5rem; + border-radius: 0.6rem; +} +.modalText{ + color: black; +} +.header{ + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: white solid; + width: 100%; + box-sizing: border-box; +} +.fa-bars{ + margin: 2rem; +} +option{ + text-align: center; +} +.genre{ + margin-top: 1rem; +} diff --git a/src/MovieList.jsx b/src/MovieList.jsx new file mode 100644 index 00000000..4f4cd307 --- /dev/null +++ b/src/MovieList.jsx @@ -0,0 +1,314 @@ +import './MovieList.css' +import MovieCard from './MovieCard' +import Modal from './Modal' +import { useState } from 'react' +import { useEffect } from 'react' +import MenuBar from './MenuBar' +import WatchList from './WatchList' +import Favorites from './Favorites' + +function MovieList() { + const [movies, setMovies] = useState([]); + const [page, setPage] = useState(1); + const [loading, setLoading] = useState(false); + const [searchQuery, setsearchQuery] = useState('') + const [isSearching, setIsSearching] = useState(false); + const [isModalOpen, setIsModalOpen] = useState(false); + const [selectedMovie, setSelectedMovie] = useState(null); + const [sortOrder, setSortOrder] = useState('ascending'); + const [showSearchButton, setShowSearchButton] = useState(false); + const [isMenuOpen, setIsMenuOpen] = useState(false); + const [watchedMovies, setWatchedMovies] = useState([]) + const [selectedGenre, setSelectedGenre] = useState(''); + const [genres, setGenres] = useState([]); + const [view, setView] = useState('movies'); + const [favoritedMovies, setFavoritedMovies] = useState([]); + const [movieTrailer, setMovieTrailer] = useState({}) + + const handleWatchButton = (e, movieId) => { + e.stopPropagation(); + setWatchedMovies((prevWatchList) => { + if(prevWatchList.includes(movieId)) { + return prevWatchList.filter(id => id !== movieId); + } else { + return [...prevWatchList, movieId]; + } + }) + }; + + const handleFavoriteButton = (e, movieId) => { + e.stopPropagation(); + setFavoritedMovies((prevFavoriteList) => { + if(prevFavoriteList.includes(movieId)) { + return prevFavoriteList.filter(id => id !== movieId); + } else { + return [...prevFavoriteList, movieId]; + } + }) + }; + + const fetchMovies = async() => { + setLoading(true); + try{ + const response = await fetch(`https://api.themoviedb.org/3/movie/now_playing?language=en-US&page=${page}&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + if (page === 1){ + setMovies(data.results) + data.results.forEach(movie => fetchTrailer(movie.id)); + } else { + setMovies(prevMovies => ([...prevMovies, ...data.results])); + data.results.forEach(movie => fetchTrailer(movie.id)); + } + } catch(err) { + console.error(err); + } + setLoading(false); + } + + //function to add more movies to the list + const handleLoadMoreMovies = () => { + if(isSearching) { + const loadMoreMovies = async() => { + setLoading(true); + try{ + const response = await fetch(`https://api.themoviedb.org/3/movie/now_playing?language=en-US&page=${page}&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + setMovies(prevMovies => [...prevMovies, ...data.results]); + setPage((prevPage) => prevPage + 1); + } catch(err) { + console.error(err); + } + setLoading(false); + } + loadMoreMovies(); + } else{ + setPage((prevPage) => prevPage + 1); + } + } + + const handleSearch = async () => { + if (searchQuery.trim() === ''){ + handleResetSearch(); + } + setLoading(true); + setIsSearching(true); + try{ + const response = await fetch(`https://api.themoviedb.org/3/search/movie?include_adult=false&language=en-US&page=${page}&query=${searchQuery}&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + setMovies(data.results); + setPage(1); + } catch(err) { + console.error(err); + } + setLoading(false); + } + const handleResetSearch = () => { + setMovies([]); + fetchMovies(); + } + + const handleGenreChange = async(event) => { + setSelectedGenre(event.target.value); + setMovies([]); + setPage(1); + + try { + const response = await fetch(`https://api.themoviedb.org/3/discover/movie?with_genres=${event.target.value}&language=en-US&page=${page}&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + setMovies(data.results); + } catch (error) { + console.error(error); + } +} + + //function to open the modal + const handleMovieCardClick = (movie) => { + setSelectedMovie(movie); + setIsModalOpen(true); + } + const closeModal = () => { + setSelectedMovie(null); + setIsModalOpen(false); + }; + + const handleMenuBar = () => { + setIsMenuOpen(!isMenuOpen); + } + const closeMenu = () => { + setIsMenuOpen(false); + }; + + const sortMovies = () => { + const sortedMovies = [...movies].sort((a, b) => { + if(sortOrder === 'ascending') { + return a.title.localeCompare(b.title); + } else if (sortOrder === 'descending') { + return b.title.localeCompare(a.title); + } else if (sortOrder === 'releaseDateAscending') { + return a.release_date.localeCompare(b.release_date); + } else if (sortOrder === 'releaseDateDescending') { + return b.release_date.localeCompare(a.release_date); + } + }); + setMovies(sortedMovies); + } + const handleSortChange = (e) => { + setSortOrder(e.target.value); + } + + const nowPlaying = (event) => { + if (event.target.id === 'now-playing') { + setShowSearchButton(false) + handleResetSearch() + setView('movies') + } + else if (event.target.id === 'search'){ + setShowSearchButton(!showSearchButton) + handleSearch() + } + + } + + const getGenreName = (genreId) => { + return genreId.map(id => { + const genre = genres.find(genre => genre.id === id); + return genre ? genre.name : ''; + }).join(', '); + } + + const fetchTrailer = async(movieId) => { + try{ + const response = await fetch(`https://api.themoviedb.org/3/movie/${movieId}/videos?language=en-US=${page}&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + const trailer = data.results.find(video => video.type === 'Trailer' && video.site === 'YouTube'); + if (trailer){ + setMovieTrailer(prevTrailers => ({...prevTrailers, [movieId]: trailer.key})); + } + } catch(error){ + console.error(error); + } + } + + useEffect(() => { + if(!isSearching) { + fetchMovies(); + } + }, [page, isSearching, selectedGenre]); + + //to reset search when there is no input + useEffect(() => { + if(searchQuery.trim()=== '') { + handleResetSearch(); + } + }, [searchQuery]); + + useEffect(() => { + sortMovies(); + }, [sortOrder]); + + //to fetch genres + useEffect(() => { + const fetchGenres = async() => { + try{ + const response = await fetch(`https://api.themoviedb.org/3/genre/movie/list?language=en&api_key=9fc2582941573c4b168e5c4155a13688`); + const data = await response.json(); + setGenres(data.genres); + } catch(error){ + console.error(error) + } + }; + fetchGenres(); + }, []); + + return ( +
+ {/* header section */} +
+ +

Flixster

+
+
+ {/* search section */} +
+ {showSearchButton && + setsearchQuery(e.target.value.toLowerCase())} + placeholder= "Search for movies..." + />} + + +
+ + {/* Sort section */} +
+
+ + +
+
+ +
+
+ +
+ + {/* movie list section */} + {view === 'movies' && ( +
+ {movies.map((movie, i) => { + return( +
handleMovieCardClick(movie)}> + +
+ ) + })} +
+ )} + {view === 'watchlist' && ( +
+ +
+ )} + + {view === 'favorites' && ( +
+ +
+ )} + + {loading ?

Loading...

: } + {isModalOpen && selectedMovie && ( + + )} + {isMenuOpen && ()} +
+ ) +} + +export default MovieList; diff --git a/src/SearchBar.jsx b/src/SearchBar.jsx new file mode 100644 index 00000000..cad9fc17 --- /dev/null +++ b/src/SearchBar.jsx @@ -0,0 +1,30 @@ +import MovieList from './MovieList'; +import './SearchBar.css' + +function SearchBar({ handleSearch }) { + + const handleSubmit = (event) => { + event.preventDefault() + const formData = new FormData(event.target) + const movieName = formData.get('movieName') + searchQuery(movieName) + event.target.reset(); + }; + + return ( + <> +
+ + +
+ + + + ); +} + +export default SearchBar diff --git a/src/WatchList.css b/src/WatchList.css new file mode 100644 index 00000000..42091ea9 --- /dev/null +++ b/src/WatchList.css @@ -0,0 +1,20 @@ +.movieList{ + display: flex; + flex-wrap: wrap; +} +.movieCard{ + border: solid white; + margin: 2rem; + border-radius: 20px; + width: 15rem; + height: 17rem; +} +img{ + width: 15rem; + height: 15rem; + border-top-right-radius: 17px; + border-top-left-radius: 17px; +} +.watchListCards{ + height: 20rem; +} diff --git a/src/WatchList.jsx b/src/WatchList.jsx new file mode 100644 index 00000000..e9d61641 --- /dev/null +++ b/src/WatchList.jsx @@ -0,0 +1,23 @@ +import './MovieCard.css' +import './WatchList.css' + +function WatchList({movies, watchList}) { + const watchListMovies = movies.filter(movie => watchList.includes(movie.id)); + return ( +
+

Watchlist

+
+ {watchListMovies.map((movie, i) => ( +
+ Movie Poster path +

{movie.title}

+

Rating: {movie.vote_average}

+
+ ))} +
+ +
+ ) +} + +export default WatchList; diff --git a/src/index.css b/src/index.css index e1faed1a..16db18bd 100644 --- a/src/index.css +++ b/src/index.css @@ -1,19 +1,80 @@ +#root{ +} +html{ + background-color: black; +} + body { + text-align: center; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; + background-color: black; margin: 0; - font-family: Arial, sans-serif; - background-color: #f4f4f4; + justify-content: space-around; + max-width: 100%; + flex-wrap: wrap; + align-content: space-between; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; } button { - background-color: #282c34; - color: white; + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; cursor: pointer; - font-size: 16px; - font-weight: bold; - transition: background-color 0.3s ease; + transition: border-color 0.25s; } - button:hover { - background-color: #777; - color: white; + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} +#footerText{ + color: black; +} +.footerEnd{ + height: 2rem; + background-color: white; + width: 100%; + display: block; +} +footer{ + width: 100%; + background-color: white; + height: 100px; +} + +.socialMediaIcons{ + margin: 1rem; +} + +.fa{ + margin-left: 2rem; + margin-right: 2rem; + color: black; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } + }