From e4f2dd744852bcd5df9aa8fed3b0dd95d6c38098 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Fri, 23 Aug 2024 01:31:53 +0530 Subject: [PATCH 01/33] hard promises done! --- .../hard (promises)/1-promisify-setTimeout.js | 13 ++++++-- .../hard (promises)/2-sleep-completely.js | 9 +++++- .../hard (promises)/3-promise-all.js | 30 +++++++++++++++---- .../hard (promises)/4-promise-chain.js | 30 +++++++++++++++---- 4 files changed, 67 insertions(+), 15 deletions(-) diff --git a/week-2/week-2-async-js/hard (promises)/1-promisify-setTimeout.js b/week-2/week-2-async-js/hard (promises)/1-promisify-setTimeout.js index 32a99c83f..56fb64cde 100644 --- a/week-2/week-2-async-js/hard (promises)/1-promisify-setTimeout.js +++ b/week-2/week-2-async-js/hard (promises)/1-promisify-setTimeout.js @@ -1,8 +1,17 @@ /* Write a function that returns a promise that resolves after n seconds have passed, where n is passed as an argument to the function. */ - +function setTimeoutPromisified(ms){ + return new Promise((resolve, reject)=>{ + setTimeout(()=>{ + resolve(); + },ms*1000) + }) +} function wait(n) { + return setTimeoutPromisified(n) + // console.log("p = ",p) + } - +// wait(3); module.exports = wait; diff --git a/week-2/week-2-async-js/hard (promises)/2-sleep-completely.js b/week-2/week-2-async-js/hard (promises)/2-sleep-completely.js index a171170b0..3e80a143a 100644 --- a/week-2/week-2-async-js/hard (promises)/2-sleep-completely.js +++ b/week-2/week-2-async-js/hard (promises)/2-sleep-completely.js @@ -3,8 +3,15 @@ * During this time the thread should not be able to do anything else. * the function should return a promise just like before */ - +function setTimeoutPromisified(ms){ + return new Promise((resolve, reject)=>{ + setTimeout(()=>{ + resolve(); + },ms) + }) +} function sleep(milliseconds) { + return setTimeoutPromisified(milliseconds); } module.exports = sleep; diff --git a/week-2/week-2-async-js/hard (promises)/3-promise-all.js b/week-2/week-2-async-js/hard (promises)/3-promise-all.js index a57838ade..6bf07293a 100644 --- a/week-2/week-2-async-js/hard (promises)/3-promise-all.js +++ b/week-2/week-2-async-js/hard (promises)/3-promise-all.js @@ -5,19 +5,37 @@ */ function wait1(t) { - + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(t); + }, t * 1000); + }); } function wait2(t) { - + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(t); + }, t * 1000); + }); } function wait3(t) { - + return new Promise((resolve, reject) => { + setTimeout(() => { + resolve(t); + }, t * 1000); + }); } - function calculateTime(t1, t2, t3) { - + let start = Date.now(); + return Promise.all([wait1(t1), wait2(t2), wait3(t3)]).then((durations)=>{ + let end = Date.now(); + let total_time = end - start; + + console.log(total_time); + return total_time; + }) } - +let t = calculateTime(1, 2, 3) module.exports = calculateTime; diff --git a/week-2/week-2-async-js/hard (promises)/4-promise-chain.js b/week-2/week-2-async-js/hard (promises)/4-promise-chain.js index 6044e241f..1b3d0ed7f 100644 --- a/week-2/week-2-async-js/hard (promises)/4-promise-chain.js +++ b/week-2/week-2-async-js/hard (promises)/4-promise-chain.js @@ -4,21 +4,39 @@ * Return a promise chain which return the time in milliseconds it takes to complete the entire operation. * Compare it with the results from 3-promise-all.js */ - +function setTimeoutPromisified(t){ + return new Promise((resolve, reject)=>{ + setTimeout(()=>{ + resolve(); + }, t*1000) + }) +} function wait1(t) { - + return setTimeoutPromisified(t); } function wait2(t) { - + return setTimeoutPromisified(t); } function wait3(t) { - + return setTimeoutPromisified(t); } function calculateTime(t1, t2, t3) { - + let startTime = Date.now(); + return new Promise((resolve, reject)=>{ + wait1(t1).then(()=>{ + wait2(t2).then(()=>{ + wait3(t3).then(()=>{ + let endTime = Date.now(); + let duration = endTime - startTime; + // console.log(duration); + resolve(duration); + }) + }) + }) + }) } - +let t = calculateTime(1,2,3); module.exports = calculateTime; From 88bc5b628d351acdf0b015e4bcad6f65bf732b9f Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Fri, 23 Aug 2024 01:38:59 +0530 Subject: [PATCH 02/33] removed function calls for testing locally --- week-2/week-2-async-js/hard (promises)/3-promise-all.js | 2 +- week-2/week-2-async-js/hard (promises)/4-promise-chain.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/week-2/week-2-async-js/hard (promises)/3-promise-all.js b/week-2/week-2-async-js/hard (promises)/3-promise-all.js index 6bf07293a..8172b2b82 100644 --- a/week-2/week-2-async-js/hard (promises)/3-promise-all.js +++ b/week-2/week-2-async-js/hard (promises)/3-promise-all.js @@ -37,5 +37,5 @@ function calculateTime(t1, t2, t3) { return total_time; }) } -let t = calculateTime(1, 2, 3) +// let t = calculateTime(1, 2, 3) module.exports = calculateTime; diff --git a/week-2/week-2-async-js/hard (promises)/4-promise-chain.js b/week-2/week-2-async-js/hard (promises)/4-promise-chain.js index 1b3d0ed7f..337bca7b8 100644 --- a/week-2/week-2-async-js/hard (promises)/4-promise-chain.js +++ b/week-2/week-2-async-js/hard (promises)/4-promise-chain.js @@ -38,5 +38,5 @@ function calculateTime(t1, t2, t3) { }) }) } -let t = calculateTime(1,2,3); +// let t = calculateTime(1,2,3); module.exports = calculateTime; From 85f47912551f1a1dedf221c6e95b33a327001db6 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 20 Oct 2024 13:40:55 +0530 Subject: [PATCH 03/33] updated assignments --- week-2/week-2-async-js/package-lock.json | 5 + week-2/week-2-async-js/package.json | 1 + week-2/week-2-js/package-lock.json | 17 +- week-2/week-2-js/package.json | 5 +- week-4/hard/package-lock.json | 5 + week-4/hard/package.json | 1 + week-4/middlewares/package-lock.json | 7 +- week-4/middlewares/package.json | 3 +- week-5/backend/db/db.js | 24 + week-5/backend/db/index.js | 53 +- week-5/backend/index.js | 17 +- week-5/backend/middleware/user.js | 21 +- week-5/backend/package-lock.json | 594 +++++++++++++++++++++++ week-5/backend/package.json | 11 + week-5/backend/routes/todo.js | 54 ++- week-5/backend/routes/user.js | 90 +++- week-5/data.json | 1 + week-5/frontend/index.html | 198 +++++++- 18 files changed, 1089 insertions(+), 18 deletions(-) create mode 100644 week-5/backend/db/db.js create mode 100644 week-5/data.json diff --git a/week-2/week-2-async-js/package-lock.json b/week-2/week-2-async-js/package-lock.json index 5444dfdc8..f4818a8ae 100644 --- a/week-2/week-2-async-js/package-lock.json +++ b/week-2/week-2-async-js/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "01-async": "file:", "jest": "^29.7.0" } }, @@ -1038,6 +1039,10 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, + "node_modules/01-async": { + "resolved": "", + "link": true + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", diff --git a/week-2/week-2-async-js/package.json b/week-2/week-2-async-js/package.json index 158724e20..db1a1589b 100644 --- a/week-2/week-2-async-js/package.json +++ b/week-2/week-2-async-js/package.json @@ -14,6 +14,7 @@ "author": "", "license": "ISC", "dependencies": { + "01-async": "file:", "jest": "^29.7.0" } } diff --git a/week-2/week-2-js/package-lock.json b/week-2/week-2-js/package-lock.json index 9f62671aa..5481ad538 100644 --- a/week-2/week-2-js/package-lock.json +++ b/week-2/week-2-js/package-lock.json @@ -7,7 +7,22 @@ "": { "name": "01", "version": "1.0.0", - "license": "ISC" + "license": "ISC", + "dependencies": { + "01": "file:" + } + }, + "node_modules/01": { + "resolved": "", + "link": true + } + }, + "dependencies": { + "01": { + "version": "file:", + "requires": { + "01": "file:" + } } } } diff --git a/week-2/week-2-js/package.json b/week-2/week-2-js/package.json index 57a256da8..1361d88e4 100644 --- a/week-2/week-2-js/package.json +++ b/week-2/week-2-js/package.json @@ -8,5 +8,8 @@ }, "keywords": [], "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "01": "file:" + } } diff --git a/week-4/hard/package-lock.json b/week-4/hard/package-lock.json index 2312a0a65..fc13b1d56 100644 --- a/week-4/hard/package-lock.json +++ b/week-4/hard/package-lock.json @@ -12,6 +12,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", + "hard": "file:", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.1" } @@ -410,6 +411,10 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hard": { + "resolved": "", + "link": true + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", diff --git a/week-4/hard/package.json b/week-4/hard/package.json index 9fc8e40ca..aefe3fcd7 100644 --- a/week-4/hard/package.json +++ b/week-4/hard/package.json @@ -13,6 +13,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", + "hard": "file:", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.1" } diff --git a/week-4/middlewares/package-lock.json b/week-4/middlewares/package-lock.json index af6258207..ad451d340 100644 --- a/week-4/middlewares/package-lock.json +++ b/week-4/middlewares/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "middlewares": "file:" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -6267,6 +6268,10 @@ "node": ">=8.6" } }, + "node_modules/middlewares": { + "resolved": "", + "link": true + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", diff --git a/week-4/middlewares/package.json b/week-4/middlewares/package.json index 8a2771ba5..e23e4b503 100644 --- a/week-4/middlewares/package.json +++ b/week-4/middlewares/package.json @@ -10,7 +10,8 @@ "license": "ISC", "description": "", "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "middlewares": "file:" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.23.3", diff --git a/week-5/backend/db/db.js b/week-5/backend/db/db.js new file mode 100644 index 000000000..07d082e8c --- /dev/null +++ b/week-5/backend/db/db.js @@ -0,0 +1,24 @@ +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; +const ObjectId = mongoose.Types.ObjectId; + +const User = new Schema({ + name : String, + password : String, + email : {type: String, unique: true} +}); + + +const Todo = new Schema({ + description:String, + done:Boolean, + userId:{ + type: ObjectId, + ref:"User" + } +}); + +const UserModel = new mongoose.model("users", User); +const TodoModel = new mongoose.model("todos", Todo); + +module.exports = {UserModel, TodoModel}; diff --git a/week-5/backend/db/index.js b/week-5/backend/db/index.js index 675aa4cb5..1fdc6cc80 100644 --- a/week-5/backend/db/index.js +++ b/week-5/backend/db/index.js @@ -1 +1,52 @@ -// start writing from here \ No newline at end of file +const fs = require("fs/promises") +const path = require("path") +async function loadData(){ + let data = await fs.readFile(path.join(__dirname, "../../data.json"), "utf-8"); + data = JSON.parse(data); + return data; +} + +async function saveData(newData){ + await fs.writeFile(path.join(__dirname, "../../data.json"), JSON.stringify(newData)); +} + +async function addUser(username, password){ + let data = await loadData(); + data[username] = { + password : password + }; + + await saveData(data); +} + +async function addTodo(username, newTodo){ + let data = await loadData(); + if(!data[username].todos){ + data[username].todos = []; + } + data[username].todos.push(newTodo); + + await saveData(data); +} + +async function removeTodo(username, idx){ + let data = await loadData(); + data[username].todos = data[username].todos.filter((el,index)=>{ + return idx!==index; + }) + await saveData(data); +} + +async function updateTodo(username, idx, newTodo){ + let data = await loadData(); + data[username].todos = data[username].todos.map((el,index)=>{ + if(idx === index){ + return newTodo; + } + return el; + + }) + await saveData(data); +} + +module.exports = {addUser, loadData, addTodo, removeTodo, updateTodo} \ No newline at end of file diff --git a/week-5/backend/index.js b/week-5/backend/index.js index 2fd17dfad..3ff97b7d1 100644 --- a/week-5/backend/index.js +++ b/week-5/backend/index.js @@ -1 +1,16 @@ -// start writing from here \ No newline at end of file +const express = require('express'); +const app = express(); +const userRoutes = require("./routes/user") +const todoRoutes = require("./routes/todo.js") +const cors = require("cors") +const mongoose = require("mongoose") +mongoose.connect("mongodb+srv://anshumanlaskar2:aSZZUE86B85FwAY7@cluster0.z6d4m.mongodb.net/todo-app-database"); +app.use(express.json()); +app.use(cors()); +app.use("/users", userRoutes); +app.use("/todos", todoRoutes); + + +app.listen(3000, ()=>{ + console.log("Server is running at http://localhost:3000"); +}) \ No newline at end of file diff --git a/week-5/backend/middleware/user.js b/week-5/backend/middleware/user.js index 675aa4cb5..da2879680 100644 --- a/week-5/backend/middleware/user.js +++ b/week-5/backend/middleware/user.js @@ -1 +1,20 @@ -// start writing from here \ No newline at end of file +// start writing from here +const jwt = require("jsonwebtoken") +const JWT_SECRET = "I am Authenticator!" +async function authenticator(req,res, next){ + let token = req.headers.token; + console.log(req.headers); + try{ + const email = jwt.verify(token, JWT_SECRET).email; + req.email = email; + next(); + } + catch(err){ + console.log("ERROR: ",err); + res.status(500).json({ + message : "Please try later!" + }) + } +} + +module.exports = authenticator; \ No newline at end of file diff --git a/week-5/backend/package-lock.json b/week-5/backend/package-lock.json index 8598f9788..baa7d27c5 100644 --- a/week-5/backend/package-lock.json +++ b/week-5/backend/package-lock.json @@ -9,11 +9,41 @@ "version": "1.0.0", "license": "ISC", "dependencies": { +<<<<<<< Updated upstream "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.21.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.3" +======= + "backend": "file:", + "bcrypt": "^5.1.1", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.6.2", + "zod": "^3.23.8" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" +>>>>>>> Stashed changes } }, "node_modules/@mongodb-js/saslprep": { @@ -40,6 +70,11 @@ "@types/webidl-conversions": "*" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -53,12 +88,92 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/backend": { + "resolved": "", + "link": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -82,6 +197,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/bson": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", @@ -122,6 +246,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -193,6 +343,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -210,6 +365,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -234,6 +397,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -349,6 +517,33 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -357,6 +552,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -375,6 +590,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -419,6 +654,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -445,6 +685,39 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -456,6 +729,16 @@ "node": ">=0.10.0" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -470,6 +753,17 @@ "node": ">= 0.10" } }, +<<<<<<< Updated upstream +======= + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, +>>>>>>> Stashed changes "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -559,6 +853,31 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, +<<<<<<< Updated upstream +======= + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, +>>>>>>> Stashed changes "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -622,6 +941,59 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mongodb": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", @@ -679,9 +1051,15 @@ } }, "node_modules/mongoose": { +<<<<<<< Updated upstream "version": "8.6.3", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.3.tgz", "integrity": "sha512-++yRmm7hjMbqVA/8WeiygTnEfrFbiy+OBjQi49GFJIvCQuSYE56myyQWo4j5hbpcHjhHQU8NukMNGTwAWFWjIw==", +======= + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.2.tgz", + "integrity": "sha512-ErbDVvuUzUfyQpXvJ6sXznmZDICD8r6wIsa0VKjJtB6/LZncqwUn5Um040G1BaNo6L3Jz+xItLSwT0wZmSmUaQ==", +>>>>>>> Stashed changes "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -763,6 +1141,78 @@ "node": ">= 0.6" } }, +<<<<<<< Updated upstream +======= + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, +>>>>>>> Stashed changes "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -793,6 +1243,14 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -801,6 +1259,14 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", @@ -864,6 +1330,34 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -900,6 +1394,17 @@ "node": ">=10" } }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -950,6 +1455,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -994,6 +1504,11 @@ "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", "license": "MIT" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -1011,6 +1526,54 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1051,6 +1614,11 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1090,6 +1658,32 @@ "engines": { "node": ">=16" } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/week-5/backend/package.json b/week-5/backend/package.json index 006b08316..64fb9a9bd 100644 --- a/week-5/backend/package.json +++ b/week-5/backend/package.json @@ -10,10 +10,21 @@ "license": "ISC", "description": "", "dependencies": { +<<<<<<< Updated upstream "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.21.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.3" +======= + "backend": "file:", + "bcrypt": "^5.1.1", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.6.2", + "zod": "^3.23.8" +>>>>>>> Stashed changes } } diff --git a/week-5/backend/routes/todo.js b/week-5/backend/routes/todo.js index 4be9f96ed..131a64f99 100644 --- a/week-5/backend/routes/todo.js +++ b/week-5/backend/routes/todo.js @@ -1 +1,53 @@ -// start writing your code from here \ No newline at end of file +const express = require("express"); +const router = express.Router(); +const authenticator = require("../middleware/user.js"); +const { addTodo, removeTodo, updateTodo } = require("../db/index.js"); +const { TodoModel, UserModel } = require("../db/db.js"); +router.post("/add", authenticator, async (req, res) => { + let { newTodo } = req.body; + let email = req.email; + console.log(email); + let user = await UserModel.findOne({ email: email }); + let user_id = user._id; + // await addTodo(username, newTodo); + console.log("add todos route : ",user_id, typeof(user_id)); + await TodoModel.create({ + // title: newTodo, + description : newTodo, + done : false, + userId : user_id + + }); + + res.json({ + message: "Added!", + }); + // return true; +}); + +router.patch("/edit", authenticator, async (req, res) => { + let { idx, newTodo } = req.body; + let username = req.username; + await updateTodo(username, idx, newTodo); + res.json({ + message: "Updated!", + }); +}); + +router.delete("/delete", authenticator, async (req, res) => { + let { idx } = req.body; + let username = req.username; + await removeTodo(username, idx); +}); + +router.get("/:id/get",async(req,res)=>{ + // let {user_id} = req.body; + let user_id = req.params.id; + let todos = await TodoModel.find({ref : user_id}); + + res.json({ + todos: todos + }) +}) + +module.exports = router; diff --git a/week-5/backend/routes/user.js b/week-5/backend/routes/user.js index 4be9f96ed..7128bac50 100644 --- a/week-5/backend/routes/user.js +++ b/week-5/backend/routes/user.js @@ -1 +1,89 @@ -// start writing your code from here \ No newline at end of file +const express = require("express"); +const router = express.Router(); +const { addUser, loadData } = require("../db/index.js"); +const jwt = require("jsonwebtoken"); +const JWT_SECRET = "I am Authenticator!"; +const authenticator = require("../middleware/user.js"); +const bcrypt = require("bcrypt"); +const { z } = require("zod"); +const { UserModel, TodoModel } = require("../db/db.js"); +const { default: mongoose } = require("mongoose"); + +router.get("/me", authenticator, async (req, res) => { + // const username = req.username; + const email = req.email; + const user = await UserModel.findOne({ email: email }); + const userId = user._id; + console.log(userId); + const todoData = await TodoModel.find({ userId: userId }); + console.log("todos : ", todoData); + // console.log(todoData); + res.json({ + info: { + email: user.email, + todos: todoData, + }, + }); +}); + +router.post("/signup", async (req, res) => { + const { email, password } = req.body; + + // zod validation + const schema = z.object({ + email: z.string().email({ message: "Invalid email format " }), + password: z + .string() + .min(8, { message: "Password should contain atleast 8 characters" }), + }); + + const result = schema.safeParse(req.body); + + if (result.success) { + const hashed = await bcrypt.hash(password, 5); + + await UserModel.create({ + email: email, + password: hashed, + }); + + res.status(200).json({ + message: "User added successfully", + }); + } else { + const error = JSON.parse(result.error); + + res.json({ + problem: error[0].message, + }); + } +}); + +router.post("/signin", async (req, res) => { + let { email, password } = req.body; + // console.log("username : ", username); + // const userData = await loadData(); + // const user = userData[username]; + const user = await UserModel.findOne({ email: email }); + const result = await bcrypt.compare(password, user.password); + if (!user) { + res.status(403).json({ + message: "Invalid email", + }); + } else { + if (!result) { + res.json({ + message: "Invalid password", + }); + + return; + } + const token = jwt.sign({ email }, JWT_SECRET); + // console.log("created token : ", token); + res.json({ + token: token, + }); + } +}); + +module.exports = router; diff --git a/week-5/data.json b/week-5/data.json new file mode 100644 index 000000000..4e07bd0a1 --- /dev/null +++ b/week-5/data.json @@ -0,0 +1 @@ +{"ravi":{"password":"123"},"Minakshi":{"password":"Anshu","todos":["Play","Gym","Cook","Watch TV","new","new2","new3","new4","new5","new6","new7"]},"Sumit":{"password":"Anshu","todos":["Sleep","code","repeat","Play","Gym","","Go to park","Shopping","new","new","Gym2","Gym3","Gym4","new2","new4 ","new5","new","new11"]},"Vortex_21":{"password":"123"}} \ No newline at end of file diff --git a/week-5/frontend/index.html b/week-5/frontend/index.html index 794d1dd78..b88a3bbd9 100644 --- a/week-5/frontend/index.html +++ b/week-5/frontend/index.html @@ -1,13 +1,193 @@ - - - + + + Taskify Frontend - - - + + + - - - \ No newline at end of file + +
+ + + + + +
+ + + + + + + From 6e1844359a56eda469d220e152cf9c93c55535d9 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 20 Oct 2024 15:54:35 +0530 Subject: [PATCH 04/33] Week-10 assignment complete (without pagination) --- week-10/userApi/src/App.css | 42 ---------------------- week-10/userApi/src/App.jsx | 63 +++++++++++++++++++++++++++----- week-10/userApi/src/index.css | 68 ----------------------------------- week-10/userApi/src/main.jsx | 4 +-- 4 files changed, 56 insertions(+), 121 deletions(-) diff --git a/week-10/userApi/src/App.css b/week-10/userApi/src/App.css index b9d355df2..e69de29bb 100644 --- a/week-10/userApi/src/App.css +++ b/week-10/userApi/src/App.css @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/week-10/userApi/src/App.jsx b/week-10/userApi/src/App.jsx index e8fdbcd11..c3481d2bb 100644 --- a/week-10/userApi/src/App.jsx +++ b/week-10/userApi/src/App.jsx @@ -1,12 +1,57 @@ -import RandomUser from './components/RandomUser' + import { useState, useEffect } from "react"; + import RandomUser from "./components/RandomUser"; -function App() { + function App() { + const [users, setUsers] = useState([]); - return ( - <> - - - ) -} + async function getUser(){ + let response = await fetch("https://randomuser.me/api/"); + response = await response.json(); -export default App + console.log(response); + return response; + } + + + async function addUser() { + let response = await getUser(); + + let name = `${response.results[0].name.first} ${response.results[0].name.last}` + let image = response.results[0].picture.large; + + setUsers((prev) => [ + ...prev, + { + userImage: image, + userName: name, + }, + ]); + } + + useEffect(() => { + addUser(); + }, []); + + return ( +
+

Random Users

+
+ {users.map((user, index) => { + return ( + + ); + })} +
+ +
+ ); + } + + export default App; diff --git a/week-10/userApi/src/index.css b/week-10/userApi/src/index.css index 6119ad9a8..e69de29bb 100644 --- a/week-10/userApi/src/index.css +++ b/week-10/userApi/src/index.css @@ -1,68 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - 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; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/week-10/userApi/src/main.jsx b/week-10/userApi/src/main.jsx index 89f91e54d..793080136 100644 --- a/week-10/userApi/src/main.jsx +++ b/week-10/userApi/src/main.jsx @@ -4,7 +4,7 @@ import App from './App.jsx' import './index.css' createRoot(document.getElementById('root')).render( - + - , + ) From 4f8757fb3c568873d807e99ee1b9463133003258 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 21 Oct 2024 09:20:45 +0530 Subject: [PATCH 05/33] pagination added ! --- week-10/userApi/src/App.jsx | 104 +++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/week-10/userApi/src/App.jsx b/week-10/userApi/src/App.jsx index c3481d2bb..22e4c2dab 100644 --- a/week-10/userApi/src/App.jsx +++ b/week-10/userApi/src/App.jsx @@ -1,57 +1,61 @@ - import { useState, useEffect } from "react"; - import RandomUser from "./components/RandomUser"; - - function App() { - const [users, setUsers] = useState([]); - - async function getUser(){ - let response = await fetch("https://randomuser.me/api/"); - response = await response.json(); - - console.log(response); - return response; - } - +import { useState, useEffect } from "react"; + +import UserCollection from "./components/UserCollection" +import Pagination from "./components/Pagination"; +function App() { + const [users, setUsers] = useState([]); + const [usersPerPage, setUsersPerPage] = useState(30); + const [currentPage, setCurrentPage] = useState(1); + const [loading,setLoading] = useState(false); + //range of one page : [(currentPage-1)*usersPerPage, currentPage*usersPerPage] + async function getUser() { + let response = await fetch("https://randomuser.me/api/"); + response = await response.json(); + + console.log(response); + return response; + } - async function addUser() { + async function addUsers() { + setLoading(true); + let newUsers=[] + for(let i=1;i<=10;i++){ let response = await getUser(); - - let name = `${response.results[0].name.first} ${response.results[0].name.last}` + + let name = `${response.results[0].name.first} ${response.results[0].name.last}`; let image = response.results[0].picture.large; - - setUsers((prev) => [ - ...prev, - { - userImage: image, - userName: name, - }, - ]); + newUsers.push({userImage: image, userName:name}) } - useEffect(() => { - addUser(); - }, []); - - return ( -
-

Random Users

-
- {users.map((user, index) => { - return ( - - ); - })} -
- -
- ); + setUsers((prev) => [ + ...prev, + ...newUsers, + ]); + setLoading(false); } - export default App; + useEffect(() => { + addUsers(); + }, []); + + function nextPage(){ + setCurrentPage(prev => prev+1); + } + function prevPage(){ + setCurrentPage(prev => prev-1); + } + const usersToShow = users.slice(((currentPage-1)*usersPerPage), (currentPage*usersPerPage)); + return ( +
+

Random Users

+ + {currentPage > 1 && } + + {users.length > usersPerPage && } + + +
+ ); +} + +export default App; From 803d2d453f30c74d23d2f685357e4c968e888ce2 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 27 Oct 2024 21:45:36 +0530 Subject: [PATCH 06/33] pre-modal complete --- week-11/amazonCart/index.html | 9 +- week-11/amazonCart/package-lock.json | 40 ++++- week-11/amazonCart/package.json | 4 +- week-11/amazonCart/src/App.css | 48 +----- week-11/amazonCart/src/App.jsx | 150 +++++++++++++++--- week-11/amazonCart/src/components/AppBar.jsx | 34 ++++ .../src/components/OrderSummary.jsx | 78 +++++++++ week-11/amazonCart/src/index.css | 68 -------- week-11/amazonCart/src/main.jsx | 16 +- .../amazonCart/src/recoil/atoms/itemAtoms.js | 9 ++ .../src/recoil/atoms/orderSummaryAtoms.js | 9 ++ .../src/recoil/atoms/shoppingCartAtoms.js | 6 + 12 files changed, 325 insertions(+), 146 deletions(-) create mode 100644 week-11/amazonCart/src/components/AppBar.jsx create mode 100644 week-11/amazonCart/src/components/OrderSummary.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/itemAtoms.js create mode 100644 week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js create mode 100644 week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js diff --git a/week-11/amazonCart/index.html b/week-11/amazonCart/index.html index 0c589eccd..e9f5df029 100644 --- a/week-11/amazonCart/index.html +++ b/week-11/amazonCart/index.html @@ -1,8 +1,15 @@ - + + + + + Vite + React diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index c3cb42a34..cec9d8c89 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -9,7 +9,9 @@ "version": "0.0.0", "dependencies": { "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "recoil": "^0.7.7", + "uuid": "^11.0.0" }, "devDependencies": { "@eslint/js": "^9.11.1", @@ -2421,6 +2423,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -3384,6 +3391,25 @@ "node": ">=0.10.0" } }, + "node_modules/recoil": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz", + "integrity": "sha512-8Og5KPQW9LwC577Vc7Ug2P0vQshkv1y3zG3tSSkWMqkWSwHmE+by06L8JtnGocjW6gcCvfwB3YtrJG6/tWivNQ==", + "dependencies": { + "hamt_plus": "1.0.2" + }, + "peerDependencies": { + "react": ">=16.13.1" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", @@ -3891,6 +3917,18 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.0.tgz", + "integrity": "sha512-iE8Fa5fgBY4rN5GvNUJ8TSwO1QG7TzdPfhrJczf6XJ6mZUxh/GX433N70fCiJL9h8EKP5ayEIo0Q6EBQGWHFqA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/vite": { "version": "5.4.9", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index c0ec958d8..aaa5655c1 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -11,7 +11,9 @@ }, "dependencies": { "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "recoil": "^0.7.7", + "uuid": "^11.0.0" }, "devDependencies": { "@eslint/js": "^9.11.1", diff --git a/week-11/amazonCart/src/App.css b/week-11/amazonCart/src/App.css index b9d355df2..199d1a00a 100644 --- a/week-11/amazonCart/src/App.css +++ b/week-11/amazonCart/src/App.css @@ -1,42 +1,6 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} +html,body{ + height:100%; + margin:0; + font-family: "Rubik",sans-serif; + font-weight: 500; +} \ No newline at end of file diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index b8b8473a3..eaa9d2191 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,35 +1,137 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' +import React, { useState } from 'react' import './App.css' +import AppBar from './components/AppBar' +import {RecoilRoot, useRecoilValue, useSetRecoilState, useRecoilState} from "recoil" +import { itemCounterAtom } from './recoil/atoms/itemAtoms' +import { itemCollectionAtom } from './recoil/atoms/shoppingCartAtoms' +import OrderSummary from "./components/OrderSummary" +import { orderTotalAtom } from './recoil/atoms/orderSummaryAtoms' +import {v4 as uuidv4 } from 'uuid'; +function generateUniqueId() { + return uuidv4(); +} + +// Usage example +console.log(generateUniqueId()); function App() { - const [count, setCount] = useState(0) + return ( + + + + ) +} +function AmazonCart(){ + return(
+ + +
) +} + +function AppBody(){ + + return ( +
+ + +
+ ) +} +function ShoppingCart(){ + // const [items, setItems] = useState([{title:"The Art of impossible: A Peak Performance Primer"}]); + // const items = useRecoilValue(itemCollectionAtom); + // const setItems = useSetRecoilState(itemCollectionAtom); + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem(){ + setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) + setOrderTotal((prev)=>{ + let curr = {...prev}; + curr.quantity+=1; + let n = items.length; + // console.log(items) + curr.subtotal += 100 + return curr; + }) + } + return ( - <> +
+

Shopping Cart

+ {/* +
+ */} + {items.map((el,idx)=>{ + return + })} + +
+ ) +} + +const Item = React.memo(function Item({identifier, title, price}){ + console.log("identifier : ", identifier); + // const [count,setCount] = useState(1); + // const count = useRecoilValue(itemCounterAtom(identifier));//this component has subscribed to counterAtom + // const setCount = useSetRecoilState(itemCounterAtom(identifier)); + const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + // const items = useRecoilValue(itemCollectionAtom); + // let price = items[identifier].price; + const setItems = useSetRecoilState(itemCollectionAtom) + function increase(){ + setCount(currVal => currVal+1); + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal += price; + curr.quantity += 1; + return curr; + }) + } + function deleteItem(){ + setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); + setOrderTotal((prev) => { + return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} + + }) + } + function decrease(){ + if(count == 1){ + deleteItem(); + return; + } + setCount(currVal => currVal-1); + + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal -= price; + curr.quantity -= 1; + return curr;d + }) + + } + return ( + +
+ -

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR +

+ {title} +

+

+ In Stock

+
+ + {count} + + +
-

- Click on the Vite and React logos to learn more -

- +
) -} +}) + export default App diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx new file mode 100644 index 000000000..b33ec2658 --- /dev/null +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -0,0 +1,34 @@ +import React,{useState} from 'react' +import {useRecoilValue} from "recoil" +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms' +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms' +const AppBar = () => { + return ( +
+
+ amazon.in +
+ +
+ ) +} + +function CartIcon(){ + // const [count,setCount] = useState(2) + // const items = useRecoilValue(itemCollectionAtom) + const summary = useRecoilValue(orderTotalAtom); + return( +
+ {/*
Hello, User!
*/} + Hello,user! + +
+ {summary.quantity} +
+
+ ) + + +} + +export default AppBar diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx new file mode 100644 index 000000000..8b6c22197 --- /dev/null +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -0,0 +1,78 @@ +import React from "react"; +import { useRecoilValue } from "recoil"; +import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; + +const OrderSummary = () => { + // const itemQuantity = useRecoilValue(itemCounterAtom); + + const summary = useRecoilValue(orderTotalAtom); + let count = summary.quantity; + let totalQuantity = summary.subtotal; + + return ( +
+

Order Summary

+
+
+

Items ({count}):

+

₹ {totalQuantity}

+
+
+
+

Order Total:

+

₹ {totalQuantity}

+
+
+ +
+
+
+ ); +}; + +export default OrderSummary; diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index 6119ad9a8..e69de29bb 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -1,68 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - 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; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/week-11/amazonCart/src/main.jsx b/week-11/amazonCart/src/main.jsx index 89f91e54d..bdf5a3bfc 100644 --- a/week-11/amazonCart/src/main.jsx +++ b/week-11/amazonCart/src/main.jsx @@ -1,10 +1,8 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import App from './App.jsx' -import './index.css' +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App.jsx"; +import "./index.css"; -createRoot(document.getElementById('root')).render( - - - , -) +createRoot(document.getElementById("root")).render( + +); diff --git a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js new file mode 100644 index 000000000..84406af6d --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js @@ -0,0 +1,9 @@ +import {atom, atomFamily} from "recoil" + +export const itemCounterAtom=atomFamily({ + key:"itemQuanityCounter", + default:(id)=>{ + return 1; + } +}) + diff --git a/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js b/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js new file mode 100644 index 000000000..ddcae671e --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js @@ -0,0 +1,9 @@ +import {atom} from "recoil" + +export const orderTotalAtom = atom({ + default:{ + quantity:0, + subtotal:0 + }, + key:"orderSummary" +}); \ No newline at end of file diff --git a/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js b/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js new file mode 100644 index 000000000..8acdfb2e3 --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js @@ -0,0 +1,6 @@ +import { atom } from "recoil"; + +export const itemCollectionAtom = atom({ + default:[], + key:"items" +}); \ No newline at end of file From fa159f7f97dbfb9d6fe25d1bf221bee3ce801608 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 28 Oct 2024 13:55:29 +0530 Subject: [PATCH 07/33] components structured in seperate files . --- week-11/amazonCart/src/App.jsx | 115 +----------------- week-11/amazonCart/src/components/AppBar.jsx | 23 +--- week-11/amazonCart/src/components/AppBody.jsx | 14 +++ .../amazonCart/src/components/CartIcon.jsx | 18 +++ week-11/amazonCart/src/components/Item.jsx | 64 ++++++++++ .../src/components/OrderSummary.jsx | 2 +- .../src/components/ShoppingCart.jsx | 32 +++++ .../amazonCart/src/utils/uuid_generator.js | 4 + 8 files changed, 140 insertions(+), 132 deletions(-) create mode 100644 week-11/amazonCart/src/components/AppBody.jsx create mode 100644 week-11/amazonCart/src/components/CartIcon.jsx create mode 100644 week-11/amazonCart/src/components/Item.jsx create mode 100644 week-11/amazonCart/src/components/ShoppingCart.jsx create mode 100644 week-11/amazonCart/src/utils/uuid_generator.js diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index eaa9d2191..368f13ab0 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,19 +1,11 @@ import React, { useState } from 'react' import './App.css' -import AppBar from './components/AppBar' -import {RecoilRoot, useRecoilValue, useSetRecoilState, useRecoilState} from "recoil" -import { itemCounterAtom } from './recoil/atoms/itemAtoms' -import { itemCollectionAtom } from './recoil/atoms/shoppingCartAtoms' -import OrderSummary from "./components/OrderSummary" -import { orderTotalAtom } from './recoil/atoms/orderSummaryAtoms' -import {v4 as uuidv4 } from 'uuid'; +import {RecoilRoot} from "recoil" -function generateUniqueId() { - return uuidv4(); -} -// Usage example -console.log(generateUniqueId()); +import AppBar from './components/AppBar' +import AppBody from './components/AppBody' + function App() { return ( @@ -29,109 +21,10 @@ function AmazonCart(){ } -function AppBody(){ - return ( -
- - -
- ) -} -function ShoppingCart(){ - // const [items, setItems] = useState([{title:"The Art of impossible: A Peak Performance Primer"}]); - // const items = useRecoilValue(itemCollectionAtom); - // const setItems = useSetRecoilState(itemCollectionAtom); - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - function addItem(){ - setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) - setOrderTotal((prev)=>{ - let curr = {...prev}; - curr.quantity+=1; - let n = items.length; - // console.log(items) - curr.subtotal += 100 - return curr; - }) - } - - return ( -
-

Shopping Cart

- {/* -
- */} - {items.map((el,idx)=>{ - return - })} - -
- ) -} -const Item = React.memo(function Item({identifier, title, price}){ - console.log("identifier : ", identifier); - // const [count,setCount] = useState(1); - // const count = useRecoilValue(itemCounterAtom(identifier));//this component has subscribed to counterAtom - // const setCount = useSetRecoilState(itemCounterAtom(identifier)); - const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - // const items = useRecoilValue(itemCollectionAtom); - // let price = items[identifier].price; - const setItems = useSetRecoilState(itemCollectionAtom) - function increase(){ - setCount(currVal => currVal+1); - setOrderTotal((prev) => { - let curr = {...prev}; - curr.subtotal += price; - curr.quantity += 1; - return curr; - }) - } - function deleteItem(){ - setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); - setOrderTotal((prev) => { - return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} - }) - } - function decrease(){ - if(count == 1){ - deleteItem(); - return; - } - setCount(currVal => currVal-1); - - setOrderTotal((prev) => { - let curr = {...prev}; - curr.subtotal -= price; - curr.quantity -= 1; - return curr;d - }) - - } - return ( - -
- -
-

- {title} -

-

- In Stock -

-
- - {count} - -
-
-
- ) -}) export default App diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index b33ec2658..3f5346286 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,6 @@ -import React,{useState} from 'react' -import {useRecoilValue} from "recoil" -import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms' -import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms' +import React from 'react' + +import CartIcon from './CartIcon' const AppBar = () => { return (
@@ -13,22 +12,6 @@ const AppBar = () => { ) } -function CartIcon(){ - // const [count,setCount] = useState(2) - // const items = useRecoilValue(itemCollectionAtom) - const summary = useRecoilValue(orderTotalAtom); - return( -
- {/*
Hello, User!
*/} - Hello,user! - -
- {summary.quantity} -
-
- ) - -} export default AppBar diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx new file mode 100644 index 000000000..781bf7cea --- /dev/null +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -0,0 +1,14 @@ +import React from 'react' +import ShoppingCart from './ShoppingCart' +import OrderSummary from './OrderSummary' +function AppBody(){ + + return ( +
+ + +
+ ) + } + +export default AppBody diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx new file mode 100644 index 000000000..09d21b5e5 --- /dev/null +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -0,0 +1,18 @@ +import {useRecoilValue} from "recoil" +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +export default function CartIcon(){ + + const summary = useRecoilValue(orderTotalAtom); + return( +
+ + Hello,user! + +
+ {summary.quantity} +
+
+ ) + + + } \ No newline at end of file diff --git a/week-11/amazonCart/src/components/Item.jsx b/week-11/amazonCart/src/components/Item.jsx new file mode 100644 index 000000000..e35238a7d --- /dev/null +++ b/week-11/amazonCart/src/components/Item.jsx @@ -0,0 +1,64 @@ +import React from "react" +import {useRecoilState, useSetRecoilState} from "recoil" +import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +export const Item = React.memo(function Item({identifier, title, price}){ + + + const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + + const setItems = useSetRecoilState(itemCollectionAtom) + function increase(){ + setCount(currVal => currVal+1); + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal += price; + curr.quantity += 1; + return curr; + }) + } + function deleteItem(){ + setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); + setOrderTotal((prev) => { + return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} + + }) + } + function decrease(){ + if(count == 1){ + deleteItem(); + return; + } + setCount(currVal => currVal-1); + + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal -= price; + curr.quantity -= 1; + return curr;d + }) + + } + return ( + +
+ +
+

+ {title} +

+

+ In Stock +

+
+ + {count} + + +
+
+
+ ) + }) \ No newline at end of file diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx index 8b6c22197..2774b6ff0 100644 --- a/week-11/amazonCart/src/components/OrderSummary.jsx +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -5,7 +5,7 @@ import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; const OrderSummary = () => { - // const itemQuantity = useRecoilValue(itemCounterAtom); + const summary = useRecoilValue(orderTotalAtom); let count = summary.quantity; diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx new file mode 100644 index 000000000..36fbc401e --- /dev/null +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -0,0 +1,32 @@ +import {useRecoilState,useSetRecoilState} from "recoil" +import { Item } from "./Item"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import generateUniqueId from "../utils/uuid_generator"; +export default function ShoppingCart(){ + + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem(){ + setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) + setOrderTotal((prev)=>{ + let curr = {...prev}; + curr.quantity+=1; + let n = items.length; + + curr.subtotal += 100 + return curr; + }) + } + + return ( +
+

Shopping Cart

+ + {items.map((el,idx)=>{ + return + })} + +
+ ) + } \ No newline at end of file diff --git a/week-11/amazonCart/src/utils/uuid_generator.js b/week-11/amazonCart/src/utils/uuid_generator.js new file mode 100644 index 000000000..18d3e4a8d --- /dev/null +++ b/week-11/amazonCart/src/utils/uuid_generator.js @@ -0,0 +1,4 @@ +import {v4 as uuidv4 } from 'uuid'; +export default function generateUniqueId() { + return uuidv4(); +} \ No newline at end of file From 751029a1026a07cda35daa8f0f85a8e71980c3be Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:16:51 +0530 Subject: [PATCH 08/33] modal+overlay added ! --- week-11/amazonCart/src/App.jsx | 20 +---- week-11/amazonCart/src/assets/check-mark.png | Bin 0 -> 14127 bytes .../amazonCart/src/components/AmazonCart.jsx | 20 +++++ week-11/amazonCart/src/components/AppBar.jsx | 6 +- week-11/amazonCart/src/components/AppBody.jsx | 6 +- .../src/components/OrderSummary.jsx | 14 +-- week-11/amazonCart/src/components/Overlay.jsx | 28 ++++++ .../src/components/PurchaseModal.jsx | 61 +++++++++++++ .../src/components/ShoppingCart.jsx | 84 ++++++++++++------ .../amazonCart/src/recoil/atoms/modalAtom.js | 5 ++ 10 files changed, 185 insertions(+), 59 deletions(-) create mode 100644 week-11/amazonCart/src/assets/check-mark.png create mode 100644 week-11/amazonCart/src/components/AmazonCart.jsx create mode 100644 week-11/amazonCart/src/components/Overlay.jsx create mode 100644 week-11/amazonCart/src/components/PurchaseModal.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/modalAtom.js diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index 368f13ab0..04c4e38a2 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,11 +1,7 @@ import React, { useState } from 'react' import './App.css' import {RecoilRoot} from "recoil" - - -import AppBar from './components/AppBar' -import AppBody from './components/AppBody' - +import AmazonCart from './components/AmazonCart' function App() { return ( @@ -13,18 +9,4 @@ function App() { ) } -function AmazonCart(){ - return(
- - -
) - -} - - - - - - - export default App diff --git a/week-11/amazonCart/src/assets/check-mark.png b/week-11/amazonCart/src/assets/check-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8f1f4ddb1120104814fd74697503c5874c0411 GIT binary patch literal 14127 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 + + + {modalStatus && +
+ + +
+ } +
) + +} \ No newline at end of file diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 3f5346286..4c0ecc368 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' import CartIcon from './CartIcon' -const AppBar = () => { +export const AppBar = React.memo(function AppBar(){ return (
@@ -10,8 +10,8 @@ const AppBar = () => {
) -} +}) -export default AppBar +// export default AppBar diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 781bf7cea..3476c4bfc 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -1,7 +1,7 @@ import React from 'react' import ShoppingCart from './ShoppingCart' import OrderSummary from './OrderSummary' -function AppBody(){ +export const AppBody = React.memo(function AppBody(){ return (
@@ -9,6 +9,6 @@ function AppBody(){
) - } + }) -export default AppBody +// export default AppBody diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx index 2774b6ff0..79d24763a 100644 --- a/week-11/amazonCart/src/components/OrderSummary.jsx +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -1,16 +1,16 @@ import React from "react"; -import { useRecoilValue } from "recoil"; -import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; -import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { useRecoilValue,useSetRecoilState } from "recoil"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; - +import { modalAtom } from "../recoil/atoms/modalAtom"; const OrderSummary = () => { - + const setShowModal = useSetRecoilState(modalAtom) const summary = useRecoilValue(orderTotalAtom); let count = summary.quantity; let totalQuantity = summary.subtotal; - + function showModal(){ + setShowModal(prev => true) + } return (
{ maxWidth: "500px", marginRight: 20, fontSize: "2rem", + boxShadow:"0 4px 8px #C0C0C0" }} >

Order Summary

@@ -57,6 +58,7 @@ const OrderSummary = () => { style={{ display: "flex", justifyContent: "center", flexGrow: "1" }} >
+ ) +} \ No newline at end of file diff --git a/week-11/amazonCart/src/components/PurchaseModal.jsx b/week-11/amazonCart/src/components/PurchaseModal.jsx new file mode 100644 index 000000000..1af80e3fb --- /dev/null +++ b/week-11/amazonCart/src/components/PurchaseModal.jsx @@ -0,0 +1,61 @@ +import React from "react"; +import checkMark from "../assets/check-mark.png"; +import {useRecoilValue, useSetRecoilState} from "recoil" +import { modalAtom } from "../recoil/atoms/modalAtom"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +const PurchaseModal = () => { + const setShowModal = useSetRecoilState(modalAtom); + const summary = useRecoilValue(orderTotalAtom); + function closeModal(){ + setShowModal(false) + } + return ( + +
+

Purchase Successful!

+
+ Not found +
+
+ Thank you for your purchase.Your order has been successfully + processed. +
+
+ Total Amount: Rs.{summary.subtotal} +
+ +
+ ); +}; + +export default PurchaseModal; diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index 36fbc401e..1316509c5 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -1,32 +1,60 @@ -import {useRecoilState,useSetRecoilState} from "recoil" +import { useRecoilState, useSetRecoilState } from "recoil"; import { Item } from "./Item"; import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import generateUniqueId from "../utils/uuid_generator"; -export default function ShoppingCart(){ - - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - function addItem(){ - setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) - setOrderTotal((prev)=>{ - let curr = {...prev}; - curr.quantity+=1; - let n = items.length; - - curr.subtotal += 100 - return curr; - }) - } - - return ( -
-

Shopping Cart

- - {items.map((el,idx)=>{ - return - })} - -
- ) - } \ No newline at end of file +export default function ShoppingCart() { + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem() { + setItems((prev) => [ + ...prev, + { + title: "The Art of impossible: A Peak Performance Primer", + price: 100, + id: generateUniqueId(), + }, + ]); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += 100; + return curr; + }); + } + + return ( +
+

Shopping Cart

+ + {items.map((el, idx) => { + return ( + + ); + })} + +
+ ); +} diff --git a/week-11/amazonCart/src/recoil/atoms/modalAtom.js b/week-11/amazonCart/src/recoil/atoms/modalAtom.js new file mode 100644 index 000000000..660d3c0bb --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/modalAtom.js @@ -0,0 +1,5 @@ +import { atom } from "recoil"; +export const modalAtom = atom({ + key:"modalAtom", + default:false +}) \ No newline at end of file From 83e905bf6bc832d36c83b9cd27372d376751bc7e Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:24:59 +0530 Subject: [PATCH 09/33] new init --- week-10/authSystem/src/components/AppBar.jsx | 26 +++++++++++++++ .../authSystem/src/components/HomePage.jsx | 0 week-10/authSystem/src/components/Login.jsx | 33 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 week-10/authSystem/src/components/AppBar.jsx create mode 100644 week-10/authSystem/src/components/HomePage.jsx create mode 100644 week-10/authSystem/src/components/Login.jsx diff --git a/week-10/authSystem/src/components/AppBar.jsx b/week-10/authSystem/src/components/AppBar.jsx new file mode 100644 index 000000000..69cdbed86 --- /dev/null +++ b/week-10/authSystem/src/components/AppBar.jsx @@ -0,0 +1,26 @@ +import React, { useState } from 'react' +import Login from './Login' + +const AppBar = () => { + const [loggedIn, setLoggedIn] = useState(false); + const [username, setUsername] = useState(""); + + function login(username) { + setLoggedIn(true); + setUsername(username); + } + function logout(){ + setLoggedIn(false); + setUsername(""); + } + return ( +
+
+

Auth System

+
+ {loggedIn ?
Welcome {username}
: } +
+ ) +} + +export default AppBar diff --git a/week-10/authSystem/src/components/HomePage.jsx b/week-10/authSystem/src/components/HomePage.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/week-10/authSystem/src/components/Login.jsx b/week-10/authSystem/src/components/Login.jsx new file mode 100644 index 000000000..1d9fe3afb --- /dev/null +++ b/week-10/authSystem/src/components/Login.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import {useState,useRef} from "react" +const Login = ({login}) => { + const nameRef = useRef(null); + const passwordRef = useRef(null); + function signin(){ + //assuming successful login + login(nameRef.current.value); + } + return ( +
+
+ + + +
+
+ ); +}; + +export default Login; From ad20e56233e76950b5e35a79f1ffbc7601b2b2ad Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:46:10 +0530 Subject: [PATCH 10/33] Modal Container added ! --- .../amazonCart/src/components/AmazonCart.jsx | 25 +++++++------------ week-11/amazonCart/src/components/AppBar.jsx | 4 +-- week-11/amazonCart/src/components/AppBody.jsx | 4 +-- .../src/components/ModalContainer.jsx | 15 +++++++++++ 4 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 week-11/amazonCart/src/components/ModalContainer.jsx diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index fc4d545a8..fbd502aa5 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -1,20 +1,13 @@ -import {AppBar} from './AppBar' -import {AppBody} from './AppBody' -import { modalAtom } from '../recoil/atoms/modalAtom' -import PurchaseModal from './PurchaseModal' -import {useRecoilValue,useSetRecoilState} from "recoil" -import Overlay from './Overlay' +import AppBar from './AppBar' +import AppBody from './AppBody' +import ModalContainer from './ModalContainer' export default function AmazonCart(){ - const modalStatus = useRecoilValue(modalAtom) - return(
+ return(
- - {modalStatus && -
- - -
- } + + +
) -} \ No newline at end of file +} + diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 4c0ecc368..adf1053ce 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' import CartIcon from './CartIcon' -export const AppBar = React.memo(function AppBar(){ +export default function AppBar(){ return (
@@ -10,7 +10,7 @@ export const AppBar = React.memo(function AppBar(){
) -}) +} diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 3476c4bfc..56273c61a 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -1,7 +1,7 @@ import React from 'react' import ShoppingCart from './ShoppingCart' import OrderSummary from './OrderSummary' -export const AppBody = React.memo(function AppBody(){ +export default function AppBody(){ return (
@@ -9,6 +9,6 @@ export const AppBody = React.memo(function AppBody(){
) - }) + } // export default AppBody diff --git a/week-11/amazonCart/src/components/ModalContainer.jsx b/week-11/amazonCart/src/components/ModalContainer.jsx new file mode 100644 index 000000000..a28871176 --- /dev/null +++ b/week-11/amazonCart/src/components/ModalContainer.jsx @@ -0,0 +1,15 @@ +import { modalAtom } from '../recoil/atoms/modalAtom' +import PurchaseModal from './PurchaseModal' +import {useRecoilValue} from "recoil" +import Overlay from './Overlay' +export default function ModalContainer(){ + const modalStatus = useRecoilValue(modalAtom) + return ( + modalStatus && +
+ + +
+ + ) + } \ No newline at end of file From 6873f6c2e327047d806a48d4c334152482655b0a Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Wed, 30 Oct 2024 01:54:35 +0530 Subject: [PATCH 11/33] routing added ! --- week-11/amazonCart/package-lock.json | 39 +++++++++++++ week-11/amazonCart/package.json | 1 + week-11/amazonCart/src/App.jsx | 33 +++++++++-- .../amazonCart/src/components/AmazonCart.jsx | 22 ++++---- week-11/amazonCart/src/components/AppBar.jsx | 7 ++- .../amazonCart/src/components/CartIcon.jsx | 56 +++++++++++++------ .../src/components/WishListIcon.jsx | 15 +++++ .../amazonCart/src/components/Wishlist.jsx | 11 ++++ week-11/amazonCart/src/main.jsx | 1 - 9 files changed, 146 insertions(+), 39 deletions(-) create mode 100644 week-11/amazonCart/src/components/WishListIcon.jsx create mode 100644 week-11/amazonCart/src/components/Wishlist.jsx diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index cec9d8c89..62e13b89d 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", "recoil": "^0.7.7", "uuid": "^11.0.0" }, @@ -918,6 +919,14 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@remix-run/router": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", @@ -3391,6 +3400,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", + "dependencies": { + "@remix-run/router": "1.20.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", + "dependencies": { + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/recoil": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz", diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index aaa5655c1..39693e784 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -12,6 +12,7 @@ "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", "recoil": "^0.7.7", "uuid": "^11.0.0" }, diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index 04c4e38a2..8163a446c 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,12 +1,33 @@ -import React, { useState } from 'react' -import './App.css' -import {RecoilRoot} from "recoil" -import AmazonCart from './components/AmazonCart' +import React from "react"; +import "./App.css"; +import { RecoilRoot } from "recoil"; +import AmazonCart from "./components/AmazonCart"; +import { BrowserRouter, Routes, Route, Outlet } from "react-router-dom"; +import Wishlist from "./components/Wishlist"; +import {AppBar} from "./components/AppBar"; + function App() { return ( - + + + + {/* }> */} + }/> + }/> + + {/* */} + + + ); +} +function Layout(){ + return( +
+ + +
) } -export default App +export default App; diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index fbd502aa5..c1a4a1850 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -1,13 +1,11 @@ -import AppBar from './AppBar' -import AppBody from './AppBody' -import ModalContainer from './ModalContainer' -export default function AmazonCart(){ - return(
- - - - -
) - +import AppBody from "./AppBody"; +import ModalContainer from "./ModalContainer"; +export default function AmazonCart() { + return ( +
+ {/* */} + + +
+ ); } - diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index adf1053ce..b471c85e1 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,16 +1,17 @@ import React from 'react' - import CartIcon from './CartIcon' -export default function AppBar(){ +import WishListIcon from './WishListIcon' +export const AppBar = React.memo( function AppBar(){ return (
amazon.in
+
) -} +}) diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx index 09d21b5e5..fa92bccc9 100644 --- a/week-11/amazonCart/src/components/CartIcon.jsx +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -1,18 +1,40 @@ -import {useRecoilValue} from "recoil" +import { useRecoilValue } from "recoil"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; -export default function CartIcon(){ - - const summary = useRecoilValue(orderTotalAtom); - return( -
- - Hello,user! - -
- {summary.quantity} -
-
- ) - - - } \ No newline at end of file +import { Link } from "react-router-dom"; + +export default function CartIcon() { + const summary = useRecoilValue(orderTotalAtom); + return ( +
+ Hello,user! + + + +
+ {summary.quantity} +
+
+ ); +} diff --git a/week-11/amazonCart/src/components/WishListIcon.jsx b/week-11/amazonCart/src/components/WishListIcon.jsx new file mode 100644 index 000000000..21f20046d --- /dev/null +++ b/week-11/amazonCart/src/components/WishListIcon.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import { Link } from "react-router-dom"; + +const WishListIcon = () => { + return ( + + + + ); +}; + +export default WishListIcon; diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx new file mode 100644 index 000000000..17daeb952 --- /dev/null +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -0,0 +1,11 @@ +import React from 'react' +// import AppBar from './AppBar' +const Wishlist = () => { + return ( +
+ {/* */} +
+ ) +} + +export default Wishlist diff --git a/week-11/amazonCart/src/main.jsx b/week-11/amazonCart/src/main.jsx index bdf5a3bfc..44aedf993 100644 --- a/week-11/amazonCart/src/main.jsx +++ b/week-11/amazonCart/src/main.jsx @@ -1,4 +1,3 @@ -import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import App from "./App.jsx"; import "./index.css"; From c08c1607b4592c9dfde7c953164c41c674c95e9c Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:28:45 +0530 Subject: [PATCH 12/33] wishlist-basic-working --- week-11/amazonCart/package-lock.json | 1214 ++++++++++++++++- week-11/amazonCart/package.json | 4 + week-11/amazonCart/postcss.config.js | 6 + week-11/amazonCart/src/App.jsx | 40 +- .../amazonCart/src/components/AmazonCart.jsx | 2 +- week-11/amazonCart/src/components/AppBar.jsx | 13 +- .../amazonCart/src/components/CartIcon.jsx | 3 + .../amazonCart/src/components/WishList.jsx | 54 + week-11/amazonCart/src/index.css | 3 + week-11/amazonCart/src/main.jsx | 6 +- .../src/recoil/atoms/wishlistAtoms.js | 9 + week-11/amazonCart/tailwind.config.js | 12 + 12 files changed, 1347 insertions(+), 19 deletions(-) create mode 100644 week-11/amazonCart/postcss.config.js create mode 100644 week-11/amazonCart/src/components/WishList.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js create mode 100644 week-11/amazonCart/tailwind.config.js diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index cec9d8c89..319bb1d5a 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", "recoil": "^0.7.7", "uuid": "^11.0.0" }, @@ -18,14 +19,29 @@ "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", "eslint": "^9.11.1", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.9.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", "vite": "^5.4.8" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -870,6 +886,23 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -918,6 +951,59 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@remix-run/router": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", + "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", @@ -1260,6 +1346,18 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -1272,6 +1370,31 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1408,6 +1531,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1429,6 +1589,18 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1439,6 +1611,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", @@ -1499,6 +1683,15 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001669", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", @@ -1533,6 +1726,42 @@ "node": ">=4" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1548,6 +1777,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1574,6 +1812,18 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -1688,6 +1938,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -1700,12 +1962,24 @@ "node": ">=0.10.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.5.41", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz", "integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==", "dev": true }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -2208,6 +2482,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2220,6 +2522,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2232,6 +2543,18 @@ "node": ">=16.0.0" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2276,6 +2599,35 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2371,6 +2723,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2383,6 +2755,30 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "15.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", @@ -2600,6 +2996,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -2694,6 +3102,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -2745,6 +3162,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -2916,6 +3342,30 @@ "node": ">= 0.4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3012,6 +3462,21 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3053,24 +3518,66 @@ "yallist": "^3.0.2" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -3101,6 +3608,24 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3110,6 +3635,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -3245,6 +3779,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3281,12 +3821,64 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -3324,6 +3916,150 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3353,6 +4089,26 @@ "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3391,6 +4147,57 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", + "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", + "dependencies": { + "@remix-run/router": "1.20.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.27.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", + "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", + "dependencies": { + "@remix-run/router": "1.20.0", + "react-router": "6.27.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/recoil": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz", @@ -3475,6 +4282,16 @@ "node": ">=4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", @@ -3510,6 +4327,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -3633,6 +4473,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3642,6 +4494,65 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -3727,6 +4638,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3739,6 +4687,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3763,12 +4733,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3778,6 +4823,24 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3917,6 +4980,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/uuid": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.0.tgz", @@ -4091,12 +5160,145 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index aaa5655c1..a8651259c 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -12,6 +12,7 @@ "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1", + "react-router-dom": "^6.27.0", "recoil": "^0.7.7", "uuid": "^11.0.0" }, @@ -20,11 +21,14 @@ "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", "eslint": "^9.11.1", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.9.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", "vite": "^5.4.8" } } diff --git a/week-11/amazonCart/postcss.config.js b/week-11/amazonCart/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/week-11/amazonCart/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index 04c4e38a2..84822ae91 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,12 +1,34 @@ -import React, { useState } from 'react' -import './App.css' -import {RecoilRoot} from "recoil" -import AmazonCart from './components/AmazonCart' +import React, { useEffect, useState } from "react"; +import "./index.css" +import "./App.css"; +import AmazonCart from "./components/AmazonCart"; +import { BrowserRouter, Routes, Route, Outlet } from "react-router-dom"; +import WishList from "./components/WishList"; +import AppBar from "./components/AppBar"; function App() { return ( - - - - ) + + + }> + } /> + } /> + + + + ); } -export default App + +function Layout() { + console.log("layout-re rendered!") + useEffect(()=>{ + console.log("Layout mounted!") + },[]) + + return ( +
+ + +
+ ); +} +export default App; diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index fbd502aa5..9deafd07b 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -3,7 +3,7 @@ import AppBody from './AppBody' import ModalContainer from './ModalContainer' export default function AmazonCart(){ return(
- + {/* */} diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index adf1053ce..a041a33b1 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,5 +1,5 @@ import React from 'react' - +import { Link } from 'react-router-dom' import CartIcon from './CartIcon' export default function AppBar(){ return ( @@ -8,7 +8,18 @@ export default function AppBar(){ amazon.in
+ +
+ ) +} + +function WishListIcon(){ + return ( + +
+ Wish
+ ) } diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx index 09d21b5e5..0c0773a9a 100644 --- a/week-11/amazonCart/src/components/CartIcon.jsx +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -1,5 +1,6 @@ import {useRecoilValue} from "recoil" import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import { Link } from "react-router-dom"; export default function CartIcon(){ const summary = useRecoilValue(orderTotalAtom); @@ -7,7 +8,9 @@ export default function CartIcon(){
Hello,user! + +
{summary.quantity}
diff --git a/week-11/amazonCart/src/components/WishList.jsx b/week-11/amazonCart/src/components/WishList.jsx new file mode 100644 index 000000000..f9ab5fb9b --- /dev/null +++ b/week-11/amazonCart/src/components/WishList.jsx @@ -0,0 +1,54 @@ +import React from 'react' +import { useRecoilState,useSetRecoilState } from 'recoil'; +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; +import generateUniqueId from '../utils/uuid_generator'; +import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; +const WishList = () => { + return ( +
+
+ + + +
+
+ ) +} + +function WishItem({id,title,price}){ + const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + console.log(added) + function addItem() { + setItems((prev) => [ + ...prev, + { + title: title, + price: price, + id: generateUniqueId(), + }, + ]); + setAdded(true); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += price; + return curr; + }); + } + return( +
+ Not Found + +

{title}

+

Rs.{price}

+ +
+ ) +} + +export default WishList diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index e69de29bb..bd6213e1d 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/week-11/amazonCart/src/main.jsx b/week-11/amazonCart/src/main.jsx index bdf5a3bfc..6dc326d58 100644 --- a/week-11/amazonCart/src/main.jsx +++ b/week-11/amazonCart/src/main.jsx @@ -1,8 +1,10 @@ -import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import App from "./App.jsx"; import "./index.css"; +import { RecoilRoot } from "recoil"; createRoot(document.getElementById("root")).render( - + + + ); diff --git a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js new file mode 100644 index 000000000..9e1e27e8c --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js @@ -0,0 +1,9 @@ +import { atomFamily } from "recoil"; + +const wishListItemStatusAtom = atomFamily({ + key:"wishListItemStatus", + default:(id)=>{ + return false; + } +}) +export default wishListItemStatusAtom \ No newline at end of file diff --git a/week-11/amazonCart/tailwind.config.js b/week-11/amazonCart/tailwind.config.js new file mode 100644 index 000000000..d37737fc0 --- /dev/null +++ b/week-11/amazonCart/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} + From ef542eb314238612a01f2d14693137dee703a97a Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:47:38 +0530 Subject: [PATCH 13/33] damage-control --- week-11/amazonCart/src/components/AppBar.jsx | 22 ++++++++++---------- week-11/amazonCart/src/index.css | 3 --- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 82ec3036e..7132fd1bf 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -2,7 +2,7 @@ import React from 'react' import { Link } from 'react-router-dom' import CartIcon from './CartIcon' import WishListIcon from './WishListIcon' -export const AppBar = React.memo( function AppBar(){ +export default function AppBar(){ return (
@@ -10,20 +10,20 @@ export const AppBar = React.memo( function AppBar(){
- + {/* */}
) } -function WishListIcon(){ - return ( - -
- Wish -
- - ) -} +// function WishListIcon(){ +// return ( +// +//
+// Wish +//
+// +// ) +// } diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index bd6213e1d..e69de29bb 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; \ No newline at end of file From 9f318efa996bb87278b0f8fd30da4860c2b292a5 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:51:05 +0530 Subject: [PATCH 14/33] reverted-to-working --- .../amazonCart/src/components/Wishlist.jsx | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx index 17daeb952..630a47fbb 100644 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -1,11 +1,54 @@ import React from 'react' -// import AppBar from './AppBar' -const Wishlist = () => { +import { useRecoilState,useSetRecoilState } from 'recoil'; +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; +import generateUniqueId from '../utils/uuid_generator'; +import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; +const WishList = () => { return ( -
- {/* */} +
+
+ + + +
) } -export default Wishlist +function WishItem({id,title,price}){ + const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + console.log(added) + function addItem() { + setItems((prev) => [ + ...prev, + { + title: title, + price: price, + id: generateUniqueId(), + }, + ]); + setAdded(true); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += price; + return curr; + }); + } + return( +
+ Not Found + +

{title}

+

Rs.{price}

+ +
+ ) +} + +export default WishList \ No newline at end of file From 3e3061c6906594be294ea52bace8761c5f1ca90b Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 5 Nov 2024 03:10:37 +0530 Subject: [PATCH 15/33] minor-issue-fix-trial1 --- week-11/amazonCart/src/components/Wishlist.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx index 630a47fbb..f9ab5fb9b 100644 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -51,4 +51,4 @@ function WishItem({id,title,price}){ ) } -export default WishList \ No newline at end of file +export default WishList From 7e1b28c809fca3e6766fe7e3c146c5a562c3cfd9 Mon Sep 17 00:00:00 2001 From: Vortex-21 Date: Tue, 5 Nov 2024 14:06:46 +0530 Subject: [PATCH 16/33] wishlist-functionality-added! --- week-11/amazonCart/package-lock.json | 1 - week-11/amazonCart/src/components/Item.jsx | 5 ++ .../src/components/ShoppingCart.jsx | 2 +- .../amazonCart/src/components/WishList.jsx | 29 ++++++---- .../amazonCart/src/components/Wishlist.jsx | 54 ------------------- .../amazonCart/src/recoil/atoms/itemAtoms.js | 2 +- .../src/recoil/atoms/wishlistAtoms.js | 3 +- 7 files changed, 26 insertions(+), 70 deletions(-) delete mode 100644 week-11/amazonCart/src/components/Wishlist.jsx diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index 22e93434a..319bb1d5a 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -11,7 +11,6 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", - "react-router-dom": "^6.27.0", "recoil": "^0.7.7", "uuid": "^11.0.0" }, diff --git a/week-11/amazonCart/src/components/Item.jsx b/week-11/amazonCart/src/components/Item.jsx index e35238a7d..17be779f0 100644 --- a/week-11/amazonCart/src/components/Item.jsx +++ b/week-11/amazonCart/src/components/Item.jsx @@ -3,6 +3,7 @@ import {useRecoilState, useSetRecoilState} from "recoil" import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { wishListItemStatusAtom } from "../recoil/atoms/wishlistAtoms"; export const Item = React.memo(function Item({identifier, title, price}){ @@ -10,6 +11,9 @@ export const Item = React.memo(function Item({identifier, title, price}){ const setOrderTotal = useSetRecoilState(orderTotalAtom); const setItems = useSetRecoilState(itemCollectionAtom) + + const setAdded = useSetRecoilState(wishListItemStatusAtom(identifier)); + function increase(){ setCount(currVal => currVal+1); setOrderTotal((prev) => { @@ -25,6 +29,7 @@ export const Item = React.memo(function Item({identifier, title, price}){ return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} }) + setAdded(false); } function decrease(){ if(count == 1){ diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index 1316509c5..dfe129ec5 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -23,7 +23,7 @@ export default function ShoppingCart() { curr.subtotal += 100; return curr; }); - } + } // this is just a dummy function to check the functionality of shopping cart.The actual function which matters is in WishList.jsx return (
{ return (
- - + +
@@ -17,24 +17,31 @@ const WishList = () => { } function WishItem({id,title,price}){ - const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + // const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const added = useRecoilValue(wishListItemStatusAtom(id)); + const setAdded = useSetRecoilState(wishListItemStatusAtom(id)); const [items, setItems] = useRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); - console.log(added) - function addItem() { + useEffect(()=>{ + console.log("added : ", added) + },[added]) + function addItem(id) { + if(added){//already added to wish list + return; + } setItems((prev) => [ ...prev, { title: title, price: price, - id: generateUniqueId(), + id: id, }, ]); setAdded(true); setOrderTotal((prev) => { let curr = { ...prev }; curr.quantity += 1; - let n = items.length; + // let n = items.length; curr.subtotal += price; return curr; @@ -46,7 +53,7 @@ function WishItem({id,title,price}){

{title}

Rs.{price}

- +
) } diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx deleted file mode 100644 index f9ab5fb9b..000000000 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import { useRecoilState,useSetRecoilState } from 'recoil'; -import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; -import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; -import generateUniqueId from '../utils/uuid_generator'; -import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; -const WishList = () => { - return ( -
-
- - - -
-
- ) -} - -function WishItem({id,title,price}){ - const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - console.log(added) - function addItem() { - setItems((prev) => [ - ...prev, - { - title: title, - price: price, - id: generateUniqueId(), - }, - ]); - setAdded(true); - setOrderTotal((prev) => { - let curr = { ...prev }; - curr.quantity += 1; - let n = items.length; - - curr.subtotal += price; - return curr; - }); - } - return( -
- Not Found - -

{title}

-

Rs.{price}

- -
- ) -} - -export default WishList diff --git a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js index 84406af6d..0d096770d 100644 --- a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js +++ b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js @@ -1,4 +1,4 @@ -import {atom, atomFamily} from "recoil" +import {atomFamily} from "recoil" export const itemCounterAtom=atomFamily({ key:"itemQuanityCounter", diff --git a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js index 9e1e27e8c..5e03fe82b 100644 --- a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js +++ b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js @@ -1,9 +1,8 @@ import { atomFamily } from "recoil"; -const wishListItemStatusAtom = atomFamily({ +export const wishListItemStatusAtom = atomFamily({ key:"wishListItemStatus", default:(id)=>{ return false; } }) -export default wishListItemStatusAtom \ No newline at end of file From f667eb1c8391781af7f9f428fabc42cf212f4866 Mon Sep 17 00:00:00 2001 From: Vortex-21 Date: Tue, 5 Nov 2024 14:44:49 +0530 Subject: [PATCH 17/33] minor issues fixes and code format --- week-11/amazonCart/src/components/AmazonCart.jsx | 2 -- week-11/amazonCart/src/components/AppBar.jsx | 16 ---------------- week-11/amazonCart/src/components/AppBody.jsx | 2 -- .../amazonCart/src/components/ShoppingCart.jsx | 3 ++- week-11/amazonCart/src/components/WishList.jsx | 8 ++++---- 5 files changed, 6 insertions(+), 25 deletions(-) diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index 988237a14..0dfe5eacd 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -1,9 +1,7 @@ -import AppBar from './AppBar' import AppBody from './AppBody' import ModalContainer from './ModalContainer' export default function AmazonCart(){ return(
- {/* */} diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 7132fd1bf..58dd5bafd 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,5 +1,4 @@ import React from 'react' -import { Link } from 'react-router-dom' import CartIcon from './CartIcon' import WishListIcon from './WishListIcon' export default function AppBar(){ @@ -10,21 +9,6 @@ export default function AppBar(){
- {/* */}
) } - -// function WishListIcon(){ -// return ( -// -//
-// Wish -//
-// -// ) -// } - - - -// export default AppBar diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 56273c61a..564746e1c 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -10,5 +10,3 @@ export default function AppBody(){
) } - -// export default AppBody diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index dfe129ec5..56269b69a 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -4,6 +4,7 @@ import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import generateUniqueId from "../utils/uuid_generator"; export default function ShoppingCart() { + const debug=false; const [items, setItems] = useRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); function addItem() { @@ -54,7 +55,7 @@ export default function ShoppingCart() { /> ); })} - + {debug&&}
); } diff --git a/week-11/amazonCart/src/components/WishList.jsx b/week-11/amazonCart/src/components/WishList.jsx index d4a868fed..35e5e099b 100644 --- a/week-11/amazonCart/src/components/WishList.jsx +++ b/week-11/amazonCart/src/components/WishList.jsx @@ -1,8 +1,7 @@ import React, { useEffect } from 'react' -import { useRecoilState,useRecoilValue,useSetRecoilState } from 'recoil'; +import {useRecoilValue,useSetRecoilState } from 'recoil'; import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; -import generateUniqueId from '../utils/uuid_generator'; import {wishListItemStatusAtom} from '../recoil/atoms/wishlistAtoms'; const WishList = () => { return ( @@ -17,10 +16,11 @@ const WishList = () => { } function WishItem({id,title,price}){ - // const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const added = useRecoilValue(wishListItemStatusAtom(id)); const setAdded = useSetRecoilState(wishListItemStatusAtom(id)); - const [items, setItems] = useRecoilState(itemCollectionAtom); + + const setItems = useSetRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); useEffect(()=>{ console.log("added : ", added) From 3e35151f132b485da2cd5797cdd43a3b9504de95 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 20 Oct 2024 13:40:55 +0530 Subject: [PATCH 18/33] updated assignments --- week-2/week-2-async-js/package-lock.json | 5 + week-2/week-2-async-js/package.json | 1 + week-2/week-2-js/package-lock.json | 17 +- week-2/week-2-js/package.json | 5 +- week-4/hard/package-lock.json | 5 + week-4/hard/package.json | 1 + week-4/middlewares/package-lock.json | 7 +- week-4/middlewares/package.json | 3 +- week-5/backend/db/db.js | 24 + week-5/backend/db/index.js | 53 +- week-5/backend/index.js | 17 +- week-5/backend/middleware/user.js | 21 +- week-5/backend/package-lock.json | 594 +++++++++++++++++++++++ week-5/backend/package.json | 11 + week-5/backend/routes/todo.js | 54 ++- week-5/backend/routes/user.js | 90 +++- week-5/data.json | 1 + week-5/frontend/index.html | 198 +++++++- 18 files changed, 1089 insertions(+), 18 deletions(-) create mode 100644 week-5/backend/db/db.js create mode 100644 week-5/data.json diff --git a/week-2/week-2-async-js/package-lock.json b/week-2/week-2-async-js/package-lock.json index 5444dfdc8..f4818a8ae 100644 --- a/week-2/week-2-async-js/package-lock.json +++ b/week-2/week-2-async-js/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "01-async": "file:", "jest": "^29.7.0" } }, @@ -1038,6 +1039,10 @@ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, + "node_modules/01-async": { + "resolved": "", + "link": true + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", diff --git a/week-2/week-2-async-js/package.json b/week-2/week-2-async-js/package.json index 158724e20..db1a1589b 100644 --- a/week-2/week-2-async-js/package.json +++ b/week-2/week-2-async-js/package.json @@ -14,6 +14,7 @@ "author": "", "license": "ISC", "dependencies": { + "01-async": "file:", "jest": "^29.7.0" } } diff --git a/week-2/week-2-js/package-lock.json b/week-2/week-2-js/package-lock.json index 9f62671aa..5481ad538 100644 --- a/week-2/week-2-js/package-lock.json +++ b/week-2/week-2-js/package-lock.json @@ -7,7 +7,22 @@ "": { "name": "01", "version": "1.0.0", - "license": "ISC" + "license": "ISC", + "dependencies": { + "01": "file:" + } + }, + "node_modules/01": { + "resolved": "", + "link": true + } + }, + "dependencies": { + "01": { + "version": "file:", + "requires": { + "01": "file:" + } } } } diff --git a/week-2/week-2-js/package.json b/week-2/week-2-js/package.json index 57a256da8..1361d88e4 100644 --- a/week-2/week-2-js/package.json +++ b/week-2/week-2-js/package.json @@ -8,5 +8,8 @@ }, "keywords": [], "author": "", - "license": "ISC" + "license": "ISC", + "dependencies": { + "01": "file:" + } } diff --git a/week-4/hard/package-lock.json b/week-4/hard/package-lock.json index 2312a0a65..fc13b1d56 100644 --- a/week-4/hard/package-lock.json +++ b/week-4/hard/package-lock.json @@ -12,6 +12,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", + "hard": "file:", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.1" } @@ -410,6 +411,10 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hard": { + "resolved": "", + "link": true + }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", diff --git a/week-4/hard/package.json b/week-4/hard/package.json index 9fc8e40ca..aefe3fcd7 100644 --- a/week-4/hard/package.json +++ b/week-4/hard/package.json @@ -13,6 +13,7 @@ "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.19.2", + "hard": "file:", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.1" } diff --git a/week-4/middlewares/package-lock.json b/week-4/middlewares/package-lock.json index af6258207..ad451d340 100644 --- a/week-4/middlewares/package-lock.json +++ b/week-4/middlewares/package-lock.json @@ -9,7 +9,8 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "middlewares": "file:" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -6267,6 +6268,10 @@ "node": ">=8.6" } }, + "node_modules/middlewares": { + "resolved": "", + "link": true + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", diff --git a/week-4/middlewares/package.json b/week-4/middlewares/package.json index 8a2771ba5..e23e4b503 100644 --- a/week-4/middlewares/package.json +++ b/week-4/middlewares/package.json @@ -10,7 +10,8 @@ "license": "ISC", "description": "", "dependencies": { - "express": "^4.18.2" + "express": "^4.18.2", + "middlewares": "file:" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.23.3", diff --git a/week-5/backend/db/db.js b/week-5/backend/db/db.js new file mode 100644 index 000000000..07d082e8c --- /dev/null +++ b/week-5/backend/db/db.js @@ -0,0 +1,24 @@ +const mongoose = require("mongoose"); +const Schema = mongoose.Schema; +const ObjectId = mongoose.Types.ObjectId; + +const User = new Schema({ + name : String, + password : String, + email : {type: String, unique: true} +}); + + +const Todo = new Schema({ + description:String, + done:Boolean, + userId:{ + type: ObjectId, + ref:"User" + } +}); + +const UserModel = new mongoose.model("users", User); +const TodoModel = new mongoose.model("todos", Todo); + +module.exports = {UserModel, TodoModel}; diff --git a/week-5/backend/db/index.js b/week-5/backend/db/index.js index 675aa4cb5..1fdc6cc80 100644 --- a/week-5/backend/db/index.js +++ b/week-5/backend/db/index.js @@ -1 +1,52 @@ -// start writing from here \ No newline at end of file +const fs = require("fs/promises") +const path = require("path") +async function loadData(){ + let data = await fs.readFile(path.join(__dirname, "../../data.json"), "utf-8"); + data = JSON.parse(data); + return data; +} + +async function saveData(newData){ + await fs.writeFile(path.join(__dirname, "../../data.json"), JSON.stringify(newData)); +} + +async function addUser(username, password){ + let data = await loadData(); + data[username] = { + password : password + }; + + await saveData(data); +} + +async function addTodo(username, newTodo){ + let data = await loadData(); + if(!data[username].todos){ + data[username].todos = []; + } + data[username].todos.push(newTodo); + + await saveData(data); +} + +async function removeTodo(username, idx){ + let data = await loadData(); + data[username].todos = data[username].todos.filter((el,index)=>{ + return idx!==index; + }) + await saveData(data); +} + +async function updateTodo(username, idx, newTodo){ + let data = await loadData(); + data[username].todos = data[username].todos.map((el,index)=>{ + if(idx === index){ + return newTodo; + } + return el; + + }) + await saveData(data); +} + +module.exports = {addUser, loadData, addTodo, removeTodo, updateTodo} \ No newline at end of file diff --git a/week-5/backend/index.js b/week-5/backend/index.js index 2fd17dfad..3ff97b7d1 100644 --- a/week-5/backend/index.js +++ b/week-5/backend/index.js @@ -1 +1,16 @@ -// start writing from here \ No newline at end of file +const express = require('express'); +const app = express(); +const userRoutes = require("./routes/user") +const todoRoutes = require("./routes/todo.js") +const cors = require("cors") +const mongoose = require("mongoose") +mongoose.connect("mongodb+srv://anshumanlaskar2:aSZZUE86B85FwAY7@cluster0.z6d4m.mongodb.net/todo-app-database"); +app.use(express.json()); +app.use(cors()); +app.use("/users", userRoutes); +app.use("/todos", todoRoutes); + + +app.listen(3000, ()=>{ + console.log("Server is running at http://localhost:3000"); +}) \ No newline at end of file diff --git a/week-5/backend/middleware/user.js b/week-5/backend/middleware/user.js index 675aa4cb5..da2879680 100644 --- a/week-5/backend/middleware/user.js +++ b/week-5/backend/middleware/user.js @@ -1 +1,20 @@ -// start writing from here \ No newline at end of file +// start writing from here +const jwt = require("jsonwebtoken") +const JWT_SECRET = "I am Authenticator!" +async function authenticator(req,res, next){ + let token = req.headers.token; + console.log(req.headers); + try{ + const email = jwt.verify(token, JWT_SECRET).email; + req.email = email; + next(); + } + catch(err){ + console.log("ERROR: ",err); + res.status(500).json({ + message : "Please try later!" + }) + } +} + +module.exports = authenticator; \ No newline at end of file diff --git a/week-5/backend/package-lock.json b/week-5/backend/package-lock.json index 8598f9788..baa7d27c5 100644 --- a/week-5/backend/package-lock.json +++ b/week-5/backend/package-lock.json @@ -9,11 +9,41 @@ "version": "1.0.0", "license": "ISC", "dependencies": { +<<<<<<< Updated upstream "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.21.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.3" +======= + "backend": "file:", + "bcrypt": "^5.1.1", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.6.2", + "zod": "^3.23.8" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" +>>>>>>> Stashed changes } }, "node_modules/@mongodb-js/saslprep": { @@ -40,6 +70,11 @@ "@types/webidl-conversions": "*" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -53,12 +88,92 @@ "node": ">= 0.6" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/backend": { + "resolved": "", + "link": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", @@ -82,6 +197,15 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/bson": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", @@ -122,6 +246,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -193,6 +343,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -210,6 +365,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -234,6 +397,11 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -349,6 +517,33 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -357,6 +552,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -375,6 +590,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -419,6 +654,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -445,6 +685,39 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -456,6 +729,16 @@ "node": ">=0.10.0" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -470,6 +753,17 @@ "node": ">= 0.10" } }, +<<<<<<< Updated upstream +======= + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, +>>>>>>> Stashed changes "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -559,6 +853,31 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, +<<<<<<< Updated upstream +======= + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, +>>>>>>> Stashed changes "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -622,6 +941,59 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mongodb": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", @@ -679,9 +1051,15 @@ } }, "node_modules/mongoose": { +<<<<<<< Updated upstream "version": "8.6.3", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.3.tgz", "integrity": "sha512-++yRmm7hjMbqVA/8WeiygTnEfrFbiy+OBjQi49GFJIvCQuSYE56myyQWo4j5hbpcHjhHQU8NukMNGTwAWFWjIw==", +======= + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.2.tgz", + "integrity": "sha512-ErbDVvuUzUfyQpXvJ6sXznmZDICD8r6wIsa0VKjJtB6/LZncqwUn5Um040G1BaNo6L3Jz+xItLSwT0wZmSmUaQ==", +>>>>>>> Stashed changes "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -763,6 +1141,78 @@ "node": ">= 0.6" } }, +<<<<<<< Updated upstream +======= + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, +>>>>>>> Stashed changes "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -793,6 +1243,14 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -801,6 +1259,14 @@ "node": ">= 0.8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-to-regexp": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", @@ -864,6 +1330,34 @@ "node": ">= 0.8" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -900,6 +1394,17 @@ "node": ">=10" } }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", @@ -950,6 +1455,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -994,6 +1504,11 @@ "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", "license": "MIT" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -1011,6 +1526,54 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1051,6 +1614,11 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1090,6 +1658,32 @@ "engines": { "node": ">=16" } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/week-5/backend/package.json b/week-5/backend/package.json index 006b08316..64fb9a9bd 100644 --- a/week-5/backend/package.json +++ b/week-5/backend/package.json @@ -10,10 +10,21 @@ "license": "ISC", "description": "", "dependencies": { +<<<<<<< Updated upstream "cors": "^2.8.5", "dotenv": "^16.4.5", "express": "^4.21.0", "jsonwebtoken": "^9.0.2", "mongoose": "^8.6.3" +======= + "backend": "file:", + "bcrypt": "^5.1.1", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.6.2", + "zod": "^3.23.8" +>>>>>>> Stashed changes } } diff --git a/week-5/backend/routes/todo.js b/week-5/backend/routes/todo.js index 4be9f96ed..131a64f99 100644 --- a/week-5/backend/routes/todo.js +++ b/week-5/backend/routes/todo.js @@ -1 +1,53 @@ -// start writing your code from here \ No newline at end of file +const express = require("express"); +const router = express.Router(); +const authenticator = require("../middleware/user.js"); +const { addTodo, removeTodo, updateTodo } = require("../db/index.js"); +const { TodoModel, UserModel } = require("../db/db.js"); +router.post("/add", authenticator, async (req, res) => { + let { newTodo } = req.body; + let email = req.email; + console.log(email); + let user = await UserModel.findOne({ email: email }); + let user_id = user._id; + // await addTodo(username, newTodo); + console.log("add todos route : ",user_id, typeof(user_id)); + await TodoModel.create({ + // title: newTodo, + description : newTodo, + done : false, + userId : user_id + + }); + + res.json({ + message: "Added!", + }); + // return true; +}); + +router.patch("/edit", authenticator, async (req, res) => { + let { idx, newTodo } = req.body; + let username = req.username; + await updateTodo(username, idx, newTodo); + res.json({ + message: "Updated!", + }); +}); + +router.delete("/delete", authenticator, async (req, res) => { + let { idx } = req.body; + let username = req.username; + await removeTodo(username, idx); +}); + +router.get("/:id/get",async(req,res)=>{ + // let {user_id} = req.body; + let user_id = req.params.id; + let todos = await TodoModel.find({ref : user_id}); + + res.json({ + todos: todos + }) +}) + +module.exports = router; diff --git a/week-5/backend/routes/user.js b/week-5/backend/routes/user.js index 4be9f96ed..7128bac50 100644 --- a/week-5/backend/routes/user.js +++ b/week-5/backend/routes/user.js @@ -1 +1,89 @@ -// start writing your code from here \ No newline at end of file +const express = require("express"); +const router = express.Router(); +const { addUser, loadData } = require("../db/index.js"); +const jwt = require("jsonwebtoken"); +const JWT_SECRET = "I am Authenticator!"; +const authenticator = require("../middleware/user.js"); +const bcrypt = require("bcrypt"); +const { z } = require("zod"); +const { UserModel, TodoModel } = require("../db/db.js"); +const { default: mongoose } = require("mongoose"); + +router.get("/me", authenticator, async (req, res) => { + // const username = req.username; + const email = req.email; + const user = await UserModel.findOne({ email: email }); + const userId = user._id; + console.log(userId); + const todoData = await TodoModel.find({ userId: userId }); + console.log("todos : ", todoData); + // console.log(todoData); + res.json({ + info: { + email: user.email, + todos: todoData, + }, + }); +}); + +router.post("/signup", async (req, res) => { + const { email, password } = req.body; + + // zod validation + const schema = z.object({ + email: z.string().email({ message: "Invalid email format " }), + password: z + .string() + .min(8, { message: "Password should contain atleast 8 characters" }), + }); + + const result = schema.safeParse(req.body); + + if (result.success) { + const hashed = await bcrypt.hash(password, 5); + + await UserModel.create({ + email: email, + password: hashed, + }); + + res.status(200).json({ + message: "User added successfully", + }); + } else { + const error = JSON.parse(result.error); + + res.json({ + problem: error[0].message, + }); + } +}); + +router.post("/signin", async (req, res) => { + let { email, password } = req.body; + // console.log("username : ", username); + // const userData = await loadData(); + // const user = userData[username]; + const user = await UserModel.findOne({ email: email }); + const result = await bcrypt.compare(password, user.password); + if (!user) { + res.status(403).json({ + message: "Invalid email", + }); + } else { + if (!result) { + res.json({ + message: "Invalid password", + }); + + return; + } + const token = jwt.sign({ email }, JWT_SECRET); + // console.log("created token : ", token); + res.json({ + token: token, + }); + } +}); + +module.exports = router; diff --git a/week-5/data.json b/week-5/data.json new file mode 100644 index 000000000..4e07bd0a1 --- /dev/null +++ b/week-5/data.json @@ -0,0 +1 @@ +{"ravi":{"password":"123"},"Minakshi":{"password":"Anshu","todos":["Play","Gym","Cook","Watch TV","new","new2","new3","new4","new5","new6","new7"]},"Sumit":{"password":"Anshu","todos":["Sleep","code","repeat","Play","Gym","","Go to park","Shopping","new","new","Gym2","Gym3","Gym4","new2","new4 ","new5","new","new11"]},"Vortex_21":{"password":"123"}} \ No newline at end of file diff --git a/week-5/frontend/index.html b/week-5/frontend/index.html index 794d1dd78..b88a3bbd9 100644 --- a/week-5/frontend/index.html +++ b/week-5/frontend/index.html @@ -1,13 +1,193 @@ - - - + + + Taskify Frontend - - - + + + - - - \ No newline at end of file + +
+ + + + + +
+ + + + + + + From faf2238d75a26ee33317f6c7ff2af26f674ac3fc Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 20 Oct 2024 15:54:35 +0530 Subject: [PATCH 19/33] Week-10 assignment complete (without pagination) --- week-10/userApi/src/App.jsx | 63 ++++++++++++++++++++++++++++++------ week-10/userApi/src/main.jsx | 4 +-- 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/week-10/userApi/src/App.jsx b/week-10/userApi/src/App.jsx index e8fdbcd11..c3481d2bb 100644 --- a/week-10/userApi/src/App.jsx +++ b/week-10/userApi/src/App.jsx @@ -1,12 +1,57 @@ -import RandomUser from './components/RandomUser' + import { useState, useEffect } from "react"; + import RandomUser from "./components/RandomUser"; -function App() { + function App() { + const [users, setUsers] = useState([]); - return ( - <> - - - ) -} + async function getUser(){ + let response = await fetch("https://randomuser.me/api/"); + response = await response.json(); -export default App + console.log(response); + return response; + } + + + async function addUser() { + let response = await getUser(); + + let name = `${response.results[0].name.first} ${response.results[0].name.last}` + let image = response.results[0].picture.large; + + setUsers((prev) => [ + ...prev, + { + userImage: image, + userName: name, + }, + ]); + } + + useEffect(() => { + addUser(); + }, []); + + return ( +
+

Random Users

+
+ {users.map((user, index) => { + return ( + + ); + })} +
+ +
+ ); + } + + export default App; diff --git a/week-10/userApi/src/main.jsx b/week-10/userApi/src/main.jsx index 89f91e54d..793080136 100644 --- a/week-10/userApi/src/main.jsx +++ b/week-10/userApi/src/main.jsx @@ -4,7 +4,7 @@ import App from './App.jsx' import './index.css' createRoot(document.getElementById('root')).render( - + - , + ) From 768dc53cd67ce7dbcab2d283c2b74cd079262b06 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 21 Oct 2024 09:20:45 +0530 Subject: [PATCH 20/33] pagination added ! --- week-10/userApi/src/App.jsx | 104 +++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/week-10/userApi/src/App.jsx b/week-10/userApi/src/App.jsx index c3481d2bb..22e4c2dab 100644 --- a/week-10/userApi/src/App.jsx +++ b/week-10/userApi/src/App.jsx @@ -1,57 +1,61 @@ - import { useState, useEffect } from "react"; - import RandomUser from "./components/RandomUser"; - - function App() { - const [users, setUsers] = useState([]); - - async function getUser(){ - let response = await fetch("https://randomuser.me/api/"); - response = await response.json(); - - console.log(response); - return response; - } - +import { useState, useEffect } from "react"; + +import UserCollection from "./components/UserCollection" +import Pagination from "./components/Pagination"; +function App() { + const [users, setUsers] = useState([]); + const [usersPerPage, setUsersPerPage] = useState(30); + const [currentPage, setCurrentPage] = useState(1); + const [loading,setLoading] = useState(false); + //range of one page : [(currentPage-1)*usersPerPage, currentPage*usersPerPage] + async function getUser() { + let response = await fetch("https://randomuser.me/api/"); + response = await response.json(); + + console.log(response); + return response; + } - async function addUser() { + async function addUsers() { + setLoading(true); + let newUsers=[] + for(let i=1;i<=10;i++){ let response = await getUser(); - - let name = `${response.results[0].name.first} ${response.results[0].name.last}` + + let name = `${response.results[0].name.first} ${response.results[0].name.last}`; let image = response.results[0].picture.large; - - setUsers((prev) => [ - ...prev, - { - userImage: image, - userName: name, - }, - ]); + newUsers.push({userImage: image, userName:name}) } - useEffect(() => { - addUser(); - }, []); - - return ( -
-

Random Users

-
- {users.map((user, index) => { - return ( - - ); - })} -
- -
- ); + setUsers((prev) => [ + ...prev, + ...newUsers, + ]); + setLoading(false); } - export default App; + useEffect(() => { + addUsers(); + }, []); + + function nextPage(){ + setCurrentPage(prev => prev+1); + } + function prevPage(){ + setCurrentPage(prev => prev-1); + } + const usersToShow = users.slice(((currentPage-1)*usersPerPage), (currentPage*usersPerPage)); + return ( +
+

Random Users

+ + {currentPage > 1 && } + + {users.length > usersPerPage && } + + +
+ ); +} + +export default App; From f9ff029f29bc700f62f004cc937ee1fe8917e1b2 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Sun, 27 Oct 2024 21:45:36 +0530 Subject: [PATCH 21/33] pre-modal complete --- week-11/amazonCart/index.html | 9 +- week-11/amazonCart/package-lock.json | 12 ++ week-11/amazonCart/package.json | 4 +- week-11/amazonCart/src/App.css | 48 +----- week-11/amazonCart/src/App.jsx | 150 +++++++++++++++--- week-11/amazonCart/src/components/AppBar.jsx | 34 ++++ .../src/components/OrderSummary.jsx | 78 +++++++++ week-11/amazonCart/src/index.css | 68 -------- week-11/amazonCart/src/main.jsx | 16 +- .../amazonCart/src/recoil/atoms/itemAtoms.js | 9 ++ .../src/recoil/atoms/orderSummaryAtoms.js | 9 ++ .../src/recoil/atoms/shoppingCartAtoms.js | 6 + 12 files changed, 298 insertions(+), 145 deletions(-) create mode 100644 week-11/amazonCart/src/components/AppBar.jsx create mode 100644 week-11/amazonCart/src/components/OrderSummary.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/itemAtoms.js create mode 100644 week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js create mode 100644 week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js diff --git a/week-11/amazonCart/index.html b/week-11/amazonCart/index.html index 0c589eccd..e9f5df029 100644 --- a/week-11/amazonCart/index.html +++ b/week-11/amazonCart/index.html @@ -1,8 +1,15 @@ - + + + + + Vite + React diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index a42a39b47..a25d856e7 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -3970,6 +3970,18 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.0.tgz", + "integrity": "sha512-iE8Fa5fgBY4rN5GvNUJ8TSwO1QG7TzdPfhrJczf6XJ6mZUxh/GX433N70fCiJL9h8EKP5ayEIo0Q6EBQGWHFqA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/vite": { "version": "5.4.9", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index de154c864..7f2ab94a4 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -14,7 +14,9 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", - "recoil": "^0.7.7" + "recoil": "^0.7.7", + "recoil": "^0.7.7", + "uuid": "^11.0.0" }, "devDependencies": { "@eslint/js": "^9.11.1", diff --git a/week-11/amazonCart/src/App.css b/week-11/amazonCart/src/App.css index b9d355df2..199d1a00a 100644 --- a/week-11/amazonCart/src/App.css +++ b/week-11/amazonCart/src/App.css @@ -1,42 +1,6 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} +html,body{ + height:100%; + margin:0; + font-family: "Rubik",sans-serif; + font-weight: 500; +} \ No newline at end of file diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index b8b8473a3..eaa9d2191 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,35 +1,137 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' +import React, { useState } from 'react' import './App.css' +import AppBar from './components/AppBar' +import {RecoilRoot, useRecoilValue, useSetRecoilState, useRecoilState} from "recoil" +import { itemCounterAtom } from './recoil/atoms/itemAtoms' +import { itemCollectionAtom } from './recoil/atoms/shoppingCartAtoms' +import OrderSummary from "./components/OrderSummary" +import { orderTotalAtom } from './recoil/atoms/orderSummaryAtoms' +import {v4 as uuidv4 } from 'uuid'; +function generateUniqueId() { + return uuidv4(); +} + +// Usage example +console.log(generateUniqueId()); function App() { - const [count, setCount] = useState(0) + return ( + + + + ) +} +function AmazonCart(){ + return(
+ + +
) +} + +function AppBody(){ + + return ( +
+ + +
+ ) +} +function ShoppingCart(){ + // const [items, setItems] = useState([{title:"The Art of impossible: A Peak Performance Primer"}]); + // const items = useRecoilValue(itemCollectionAtom); + // const setItems = useSetRecoilState(itemCollectionAtom); + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem(){ + setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) + setOrderTotal((prev)=>{ + let curr = {...prev}; + curr.quantity+=1; + let n = items.length; + // console.log(items) + curr.subtotal += 100 + return curr; + }) + } + return ( - <> +
+

Shopping Cart

+ {/* +
+ */} + {items.map((el,idx)=>{ + return + })} + +
+ ) +} + +const Item = React.memo(function Item({identifier, title, price}){ + console.log("identifier : ", identifier); + // const [count,setCount] = useState(1); + // const count = useRecoilValue(itemCounterAtom(identifier));//this component has subscribed to counterAtom + // const setCount = useSetRecoilState(itemCounterAtom(identifier)); + const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + // const items = useRecoilValue(itemCollectionAtom); + // let price = items[identifier].price; + const setItems = useSetRecoilState(itemCollectionAtom) + function increase(){ + setCount(currVal => currVal+1); + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal += price; + curr.quantity += 1; + return curr; + }) + } + function deleteItem(){ + setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); + setOrderTotal((prev) => { + return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} + + }) + } + function decrease(){ + if(count == 1){ + deleteItem(); + return; + } + setCount(currVal => currVal-1); + + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal -= price; + curr.quantity -= 1; + return curr;d + }) + + } + return ( + +
+ -

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR +

+ {title} +

+

+ In Stock

+
+ + {count} + + +
-

- Click on the Vite and React logos to learn more -

- +
) -} +}) + export default App diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx new file mode 100644 index 000000000..b33ec2658 --- /dev/null +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -0,0 +1,34 @@ +import React,{useState} from 'react' +import {useRecoilValue} from "recoil" +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms' +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms' +const AppBar = () => { + return ( +
+
+ amazon.in +
+ +
+ ) +} + +function CartIcon(){ + // const [count,setCount] = useState(2) + // const items = useRecoilValue(itemCollectionAtom) + const summary = useRecoilValue(orderTotalAtom); + return( +
+ {/*
Hello, User!
*/} + Hello,user! + +
+ {summary.quantity} +
+
+ ) + + +} + +export default AppBar diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx new file mode 100644 index 000000000..8b6c22197 --- /dev/null +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -0,0 +1,78 @@ +import React from "react"; +import { useRecoilValue } from "recoil"; +import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; + +const OrderSummary = () => { + // const itemQuantity = useRecoilValue(itemCounterAtom); + + const summary = useRecoilValue(orderTotalAtom); + let count = summary.quantity; + let totalQuantity = summary.subtotal; + + return ( +
+

Order Summary

+
+
+

Items ({count}):

+

₹ {totalQuantity}

+
+
+
+

Order Total:

+

₹ {totalQuantity}

+
+
+ +
+
+
+ ); +}; + +export default OrderSummary; diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index 6119ad9a8..e69de29bb 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -1,68 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - 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; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/week-11/amazonCart/src/main.jsx b/week-11/amazonCart/src/main.jsx index 89f91e54d..bdf5a3bfc 100644 --- a/week-11/amazonCart/src/main.jsx +++ b/week-11/amazonCart/src/main.jsx @@ -1,10 +1,8 @@ -import { StrictMode } from 'react' -import { createRoot } from 'react-dom/client' -import App from './App.jsx' -import './index.css' +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App.jsx"; +import "./index.css"; -createRoot(document.getElementById('root')).render( - - - , -) +createRoot(document.getElementById("root")).render( + +); diff --git a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js new file mode 100644 index 000000000..84406af6d --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js @@ -0,0 +1,9 @@ +import {atom, atomFamily} from "recoil" + +export const itemCounterAtom=atomFamily({ + key:"itemQuanityCounter", + default:(id)=>{ + return 1; + } +}) + diff --git a/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js b/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js new file mode 100644 index 000000000..ddcae671e --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/orderSummaryAtoms.js @@ -0,0 +1,9 @@ +import {atom} from "recoil" + +export const orderTotalAtom = atom({ + default:{ + quantity:0, + subtotal:0 + }, + key:"orderSummary" +}); \ No newline at end of file diff --git a/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js b/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js new file mode 100644 index 000000000..8acdfb2e3 --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/shoppingCartAtoms.js @@ -0,0 +1,6 @@ +import { atom } from "recoil"; + +export const itemCollectionAtom = atom({ + default:[], + key:"items" +}); \ No newline at end of file From dd69e7c99dc0db7ef0c2b0031bc705ccb2f10994 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 28 Oct 2024 13:55:29 +0530 Subject: [PATCH 22/33] components structured in seperate files . --- week-11/amazonCart/src/App.jsx | 115 +----------------- week-11/amazonCart/src/components/AppBar.jsx | 23 +--- week-11/amazonCart/src/components/AppBody.jsx | 14 +++ .../amazonCart/src/components/CartIcon.jsx | 18 +++ week-11/amazonCart/src/components/Item.jsx | 64 ++++++++++ .../src/components/OrderSummary.jsx | 2 +- .../src/components/ShoppingCart.jsx | 32 +++++ .../amazonCart/src/utils/uuid_generator.js | 4 + 8 files changed, 140 insertions(+), 132 deletions(-) create mode 100644 week-11/amazonCart/src/components/AppBody.jsx create mode 100644 week-11/amazonCart/src/components/CartIcon.jsx create mode 100644 week-11/amazonCart/src/components/Item.jsx create mode 100644 week-11/amazonCart/src/components/ShoppingCart.jsx create mode 100644 week-11/amazonCart/src/utils/uuid_generator.js diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index eaa9d2191..368f13ab0 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,19 +1,11 @@ import React, { useState } from 'react' import './App.css' -import AppBar from './components/AppBar' -import {RecoilRoot, useRecoilValue, useSetRecoilState, useRecoilState} from "recoil" -import { itemCounterAtom } from './recoil/atoms/itemAtoms' -import { itemCollectionAtom } from './recoil/atoms/shoppingCartAtoms' -import OrderSummary from "./components/OrderSummary" -import { orderTotalAtom } from './recoil/atoms/orderSummaryAtoms' -import {v4 as uuidv4 } from 'uuid'; +import {RecoilRoot} from "recoil" -function generateUniqueId() { - return uuidv4(); -} -// Usage example -console.log(generateUniqueId()); +import AppBar from './components/AppBar' +import AppBody from './components/AppBody' + function App() { return ( @@ -29,109 +21,10 @@ function AmazonCart(){ } -function AppBody(){ - return ( -
- - -
- ) -} -function ShoppingCart(){ - // const [items, setItems] = useState([{title:"The Art of impossible: A Peak Performance Primer"}]); - // const items = useRecoilValue(itemCollectionAtom); - // const setItems = useSetRecoilState(itemCollectionAtom); - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - function addItem(){ - setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) - setOrderTotal((prev)=>{ - let curr = {...prev}; - curr.quantity+=1; - let n = items.length; - // console.log(items) - curr.subtotal += 100 - return curr; - }) - } - - return ( -
-

Shopping Cart

- {/* -
- */} - {items.map((el,idx)=>{ - return - })} - -
- ) -} -const Item = React.memo(function Item({identifier, title, price}){ - console.log("identifier : ", identifier); - // const [count,setCount] = useState(1); - // const count = useRecoilValue(itemCounterAtom(identifier));//this component has subscribed to counterAtom - // const setCount = useSetRecoilState(itemCounterAtom(identifier)); - const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - // const items = useRecoilValue(itemCollectionAtom); - // let price = items[identifier].price; - const setItems = useSetRecoilState(itemCollectionAtom) - function increase(){ - setCount(currVal => currVal+1); - setOrderTotal((prev) => { - let curr = {...prev}; - curr.subtotal += price; - curr.quantity += 1; - return curr; - }) - } - function deleteItem(){ - setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); - setOrderTotal((prev) => { - return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} - }) - } - function decrease(){ - if(count == 1){ - deleteItem(); - return; - } - setCount(currVal => currVal-1); - - setOrderTotal((prev) => { - let curr = {...prev}; - curr.subtotal -= price; - curr.quantity -= 1; - return curr;d - }) - - } - return ( - -
- -
-

- {title} -

-

- In Stock -

-
- - {count} - -
-
-
- ) -}) export default App diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index b33ec2658..3f5346286 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,6 @@ -import React,{useState} from 'react' -import {useRecoilValue} from "recoil" -import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms' -import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms' +import React from 'react' + +import CartIcon from './CartIcon' const AppBar = () => { return (
@@ -13,22 +12,6 @@ const AppBar = () => { ) } -function CartIcon(){ - // const [count,setCount] = useState(2) - // const items = useRecoilValue(itemCollectionAtom) - const summary = useRecoilValue(orderTotalAtom); - return( -
- {/*
Hello, User!
*/} - Hello,user! - -
- {summary.quantity} -
-
- ) - -} export default AppBar diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx new file mode 100644 index 000000000..781bf7cea --- /dev/null +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -0,0 +1,14 @@ +import React from 'react' +import ShoppingCart from './ShoppingCart' +import OrderSummary from './OrderSummary' +function AppBody(){ + + return ( +
+ + +
+ ) + } + +export default AppBody diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx new file mode 100644 index 000000000..09d21b5e5 --- /dev/null +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -0,0 +1,18 @@ +import {useRecoilValue} from "recoil" +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +export default function CartIcon(){ + + const summary = useRecoilValue(orderTotalAtom); + return( +
+ + Hello,user! + +
+ {summary.quantity} +
+
+ ) + + + } \ No newline at end of file diff --git a/week-11/amazonCart/src/components/Item.jsx b/week-11/amazonCart/src/components/Item.jsx new file mode 100644 index 000000000..e35238a7d --- /dev/null +++ b/week-11/amazonCart/src/components/Item.jsx @@ -0,0 +1,64 @@ +import React from "react" +import {useRecoilState, useSetRecoilState} from "recoil" +import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +export const Item = React.memo(function Item({identifier, title, price}){ + + + const[count,setCount] = useRecoilState(itemCounterAtom(identifier)); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + + const setItems = useSetRecoilState(itemCollectionAtom) + function increase(){ + setCount(currVal => currVal+1); + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal += price; + curr.quantity += 1; + return curr; + }) + } + function deleteItem(){ + setItems(prev=>prev.filter((el,idx)=>el.id!==identifier)); + setOrderTotal((prev) => { + return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} + + }) + } + function decrease(){ + if(count == 1){ + deleteItem(); + return; + } + setCount(currVal => currVal-1); + + setOrderTotal((prev) => { + let curr = {...prev}; + curr.subtotal -= price; + curr.quantity -= 1; + return curr;d + }) + + } + return ( + +
+ +
+

+ {title} +

+

+ In Stock +

+
+ + {count} + + +
+
+
+ ) + }) \ No newline at end of file diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx index 8b6c22197..2774b6ff0 100644 --- a/week-11/amazonCart/src/components/OrderSummary.jsx +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -5,7 +5,7 @@ import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; const OrderSummary = () => { - // const itemQuantity = useRecoilValue(itemCounterAtom); + const summary = useRecoilValue(orderTotalAtom); let count = summary.quantity; diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx new file mode 100644 index 000000000..36fbc401e --- /dev/null +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -0,0 +1,32 @@ +import {useRecoilState,useSetRecoilState} from "recoil" +import { Item } from "./Item"; +import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import generateUniqueId from "../utils/uuid_generator"; +export default function ShoppingCart(){ + + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem(){ + setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) + setOrderTotal((prev)=>{ + let curr = {...prev}; + curr.quantity+=1; + let n = items.length; + + curr.subtotal += 100 + return curr; + }) + } + + return ( +
+

Shopping Cart

+ + {items.map((el,idx)=>{ + return + })} + +
+ ) + } \ No newline at end of file diff --git a/week-11/amazonCart/src/utils/uuid_generator.js b/week-11/amazonCart/src/utils/uuid_generator.js new file mode 100644 index 000000000..18d3e4a8d --- /dev/null +++ b/week-11/amazonCart/src/utils/uuid_generator.js @@ -0,0 +1,4 @@ +import {v4 as uuidv4 } from 'uuid'; +export default function generateUniqueId() { + return uuidv4(); +} \ No newline at end of file From 29a9664bab7ef9887af3f2190ffe704378197f12 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:16:51 +0530 Subject: [PATCH 23/33] modal+overlay added ! --- week-11/amazonCart/src/App.jsx | 20 +---- week-11/amazonCart/src/assets/check-mark.png | Bin 0 -> 14127 bytes .../amazonCart/src/components/AmazonCart.jsx | 20 +++++ week-11/amazonCart/src/components/AppBar.jsx | 6 +- week-11/amazonCart/src/components/AppBody.jsx | 6 +- .../src/components/OrderSummary.jsx | 14 +-- week-11/amazonCart/src/components/Overlay.jsx | 28 ++++++ .../src/components/PurchaseModal.jsx | 61 +++++++++++++ .../src/components/ShoppingCart.jsx | 84 ++++++++++++------ .../amazonCart/src/recoil/atoms/modalAtom.js | 5 ++ 10 files changed, 185 insertions(+), 59 deletions(-) create mode 100644 week-11/amazonCart/src/assets/check-mark.png create mode 100644 week-11/amazonCart/src/components/AmazonCart.jsx create mode 100644 week-11/amazonCart/src/components/Overlay.jsx create mode 100644 week-11/amazonCart/src/components/PurchaseModal.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/modalAtom.js diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index 368f13ab0..04c4e38a2 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,11 +1,7 @@ import React, { useState } from 'react' import './App.css' import {RecoilRoot} from "recoil" - - -import AppBar from './components/AppBar' -import AppBody from './components/AppBody' - +import AmazonCart from './components/AmazonCart' function App() { return ( @@ -13,18 +9,4 @@ function App() { ) } -function AmazonCart(){ - return(
- - -
) - -} - - - - - - - export default App diff --git a/week-11/amazonCart/src/assets/check-mark.png b/week-11/amazonCart/src/assets/check-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8f1f4ddb1120104814fd74697503c5874c0411 GIT binary patch literal 14127 zcmcIrhdBWUp*}WQ(r7 zDSMZhd4K1v&+kw8dOUi_`}IEOHP7qyI_Es!{@Pbn4j(*r5CCwPpsJ(`01f;v4cJcy zf2}<1*o41moi7uv?}tB+_glSye;>H7dea#I#;?dfRHO(a7ktR+a^;50HAia~cXOxP zz}?+l%+}$av!(g{+hUGRHgO9Vj{(372uhc(KYTqu_~_xFYy3L3d&`rYZ}(02V1N{j zn6U5@;Q;Kx;DD1dxA>(`%WgWe4cv+2oe2!4jrLRy;}`WU`W(`fL1)YLQCKX=`BY}$ z`;k@@EvM4WR~gSPx4&N8+V!9KKi_c+eU#H?X9veo^<5h&vS>_^&~ zf&$G0BjwQxrncVq%`LvszuNHmn09E;?oH~miC2#PM}_qS&Yq2Rsam7eY8YUF`BjfsRCA3N$Id)|*#JMo+osMafD$x5r<;=aLop;O;3V{7<4 z>6JOOwA1{2`Le92o#&HM#_(B*Xxxb~M(1uz0nvdUxaGBNgM$w$Q&}3Gf7^C=Thc!6 z9y7;CAZqARM^_KY?!4{xXrD>~8~|T!-?Nf~me1f0Z%jBdEfJ3UvU>lAx`*BUGLN{> z6;tx?k6gbxpLa!R6SA6x_Pf;5PwpqNyxK<@K+;vQ<)&9Wa!Xa$%E;W2B|P!ZMepu2chX*X({-mZeGORhPU`0pjyi zOMZDBU4iq4EEh-G7WsGd+YbA0XdTUWDEVPE8z0C>H^zwuG0#M5H$&ckF4tCrZ1$0Z z!y}X?Plt(;y#+Q_ts6oq`p5j9~0}W56lg+v*ll3YgwZn8Kt(_kOUoE)ZX7A+HIzD^{GrTew&a~(y zjAdo^N0D?(n#J##$gEW@f16_~zMA8g^<#Na@sVBF22=BD{N0+$0=qAdWL4;Cjs@{N z6b`z?^GPOXcl_(uk2W!LXT?MVTAqITHC#OBbTil7w!d*Ur5yxS0sI@C&6rc+4$d30 zx>?2*pDf2il9$2izX1P3d-FY}@>bjP4v}bad(+>R(#umy_zVf4y??>MAb2%?Ol^qQ zHYc@kL{*q0+Cj26Izk^;$GT6Lh7LH*2W)Nf7}*x)jqM5&v;taubyWp!@%6F`Eog}^ zV)G}zOyR5SBtWQ~ufh#m&dOP<;+CjYSHk^k7X_lY}$iXUq2If|rF+T|HnTg!e%y2xGC;rLv(~K@@Y+;19o3QnphSA>2tY21`B}wXs5F^Hwa2iK%(zTU-|}kv^FN z-fNlMrDMNj;xDSC4#JAEsc05Vs}EF3zhs({B%IdVz6gs^jmu**@W-I zDJ+w=&?uQ2r%UAsIdbwC8kp00Ww%}2eK#Iu7^2Y{)Pk1z{xmhKVJBGtBVQTB=<8$w zl74uU%U*COvoC(PdnqGq;fklPmv|12L1UD}p7xfVJv)7q@`%Ju(Dc?j zz4h+x{GhCo-z7;&pv^w3ycNx_E3UFr^*Ysh^HuZkaBrXUJr@qPLuhce!2A>Srk+7% zD*F{1)IqDbVuffKys_F?spN|UIAca^Mp;_qN) z7juXFrzGlS>A-~5ua*igLq=8o`kitzhw8sz<4a2x+K zV^F%KB7iv>PcJM)t$5Vd-kUQcOCf~f7(jDR*ml4*H$Lj$h>$KzjJekpRdOUazO|9n8))mF#l zDDYev*_qU6w21$KrIC6fZMd; zqJ5uC;mEw$R%q%@$})(FG#Vrqov}CC*qP$3KTZdZ-yXa}%@OocYs*W?12NLkD{s}_ z_EoDt&E}&6yZw8)!*}@=PI%+sZz-OnI}4KQdhr-}(;&ttc4h!i&Udp~J;a*seJQsZ zj(?xtBy@zRZg8(v)rI-11&A0Z80wcf*R`n-J|yHlOW*iq&f#rmrD@xPAw7x?vmZ*^ z!XWsT)5Do?Q#SDxRAc?O)emEDyh^ojW3NRi=HDMOkjREO?ER>*=m5EGAM)~W>~?d@ z+OqdQ@w7oTKsffxw|hs=YU$%{>)JpA#pdW)vk!d7y6I%CrorJH45TABWxLj$oVQ-5 zDkkTF`s2}=g!abSXmR7;@21YY$I;;rFnBnsFZVoosk!F%n|gsH&qWwCsr+QwDVyw@ zR3Ys9q(3`n@j<6xsc|MN)Uf_=^lS?2e2AyxUK&qQ-~jv1$zXq-l=aeF2=Q;B;SHHH zyw`Q_&#NC6YRTxNwY?D6FWL5tz>#{F!@c6DON~EXCbGxV7StWUe_V$gyR_I z#@v#)>fN9gnxyXz?_WiUJI+>!V)sux_XJKYgZ4W;RerZBOd#(~xx$~D8+~D&;(?4$ ziht1Z)@3f8T^6kUm>9NF0;5ySCcU)W*0%1W_!asua}vPmF04%{0tK#Q6Snw$c-vxi zo*Qk2GnZi|m5AY_!!zEJ>>?@&bm~cAIOF#LelPE2`|a0av+*w&pG;eVvF6BXcAU5- z`2>L;E=1BPv0Hq$8*OU~Ia6n1jyupahq+p!o7(w{m7#2blG6f$I~LV{W`tC1zN|pz z7I*R;-xf2e^$B4Qfw|i7kG7kv3C#8MVkoPDBqn`B<;9ZgY0l82RWkB-GNrL{C6$~Q z+R{2upABnAe&FEhO@a-=m$T2>I%{@s(K62+L-VH4l^4Bz^l4Q@Q1oRB4amEGc6zR5 zZJ||}{!5A^kh)WyDBfR$B{mtxUWLvC&SPS$XY3b`L#0%H3RVRcZ!WxCOJ7*7iiBc6 zkqF=PQ{EEaBhvCJb_J~!#ZI3tz8VNeo}JvRCkHRAE7et1a{$g9x8*DJ0^ynl>ezEo zrH-K9I>$R0xgw+i5xx!OCcW7byYMwms8XoA9qNTgKi+&^_}iHSmGdeY9WnSk$SWjW zUy#V#9ga|a%cgsB^ozH8ANy-_JJ2x5e17yT`Rg*oUsn!QcozU`@R!(>KhDNwIr)Fv;iK_C~H(`j*{BTI!xSwVyR?#BFDHU0gzQ zM`)8SAx4Hq#OmyVY!Sh3q35-9EiV{#k1~+x?z`VRes3pLLp%f;iBtcUPIjxFDb8$%(Mivd&M$msZ2V`F7f4Do-t}=!*`bPHRl+2|-Ki0ZXtb)g z6BJmOS9-c#F@=3ux={IZnl7JWikHZ(bIkE*aM0oNU99;dqjh`ArKMn$Hd@gVE$+OY z&VLs1){#G&<6peAF76d>`UYt+R5Rs!nh)Qgmv#gW$TUiJdKEsF!YU0(f(bLEH5dt3 z;9vMdPg3?A+|2QDPF92+qZwn_hjD7Xixnb>z`A-DQJH~=GJK7br9zT*BqC5$})c1*o83TH+(C*AuX0+LJy1FgwnSw0B zUBuj>8XknEKeyPGC+oTBsu)&09NT_2L?Z=pAIL^`;~0b1#9s!72{Dj3&%1q^_i`d$ zfr3<}#Hc5l;2!^e1NDA_lF(G-+Yt}l-l1FoptLiSe?w{=t-*vgJ4UCn`?gcll>C+F zG^j7Ebl|K^m%}O@mjG#RY9?--&fG%d6+SEEyRH1RQLd}U(p8y!;+Z8DJRITyOI9W) zw<>+z*XCI<{7oFd^M1{*S9MJ_TWKg>_qq3vw)&~TSHo^IkOrq#hf>McD}_JELm!(> z7#kMDV2h+&$PGYcbJYbERv5Jr5Xthatv5SH9-6ASgr2bgbN@aM;_>|0^l*#`pEj8L zKx5XSOcbl!C7&svser+pe8~aiI9I-?o&E6GWG}X=7PieFhKp?viLW?zQ%y{_Rz)cf zq*|gGgI0EKxdg!WZ7%ipcBVsY0v8Mow@IezIF~Q(#I&sV4u!5^Y>) zBp&25%i7&-%-M}r@~b~cSLIe0Tv(yk_A=QSRAtU(Y`>GBS*zFWrWUWQnJoN1vRD|+ zpTSe{M_Zs!zpV`Bf$Y5LC~5@P;_xyqqH_=ESqgQ8f~ zR9#aVj+LRPM&IRg^)6UZ<+2yJ5r(jh2JWm?r_@6o2K!l zK;eV$>g`@Tf1u~AJGFi-?p{Sf!_Jhe@!= z)E_aSKfo(}3^L|G$w|iN?!}Dcu?!cq+0azt(3$Be$d~tQ1!C3X4M%Q0jy3J#j!y|w zI}7L*%Uy_C>e8U>!{&+KJv=0{nk;pB3OEoQ`6lIEpu8`vf;;ta>|KgZ`jaP-xS`HiHj)Gjho_dBp@shOWiD~ z?a7uMMnCAQp6Be^aEkAsn1#g=mPu-DR*NqgbsV4Z0KE-*fyhk}9@N(cqYbT7JNxfb zOAGkY6OUt35)R5kk8dW37PXZR9>AX)E7*P)@tBsM@N+SUQAg|9agfmGSK~+pG-KtE z;z9e_{hy7OPY%ifBu`Z!WdfD-I6!yzn%YI0BMk>V4{Gq9*a$(|RH`)y8m%86} zt3W|7MiA}U9@5TPS`)c27Gh5FKyZD~DJ^vkQSsSQR>r@nfV0X*-Hpu^zLm|<#ABEg>jBrs=V6`1f8s6EoMZt~ z>-gnFVKhBX*|ucM*e+7nUCv8ZY`(rghga`3;X4&AYYgh?8ga^(noP-K3pUC&F&_pF zgV@S*SQ^rHG8|OAEkH=)^HZh^_79e1Ej|X25Gu10g5C|)fZ4Xtj;YaL}y{M+42J<(GFI=tx3c0>M;NGk}9W!9jxK6AGjO2C%&S=`{E)Oy#&O zMx75fDb1nUQck4tv7^m)e%1Ijx?D!)f&wIM^H@hdeoZrG0qW;m9&9t29fN}+sMPwV z+oUoE(zO&mP_NL4qZ_9R*V%EH?u<<_dxmeIBp%ufE0C`Sx1f0Y_XcEYrcH|^OV4Re z(BqrDJwBv*!Ms{8hK#KA6pTL-Z|*3C1N@$PE;OL`3c`4OCN=%BW?JQEu`P5}#D*ms zkldRof3C>hu75d2agLBiU)4u>nRsgY08E51GI)HK5*60@+oMrZ^597NuYMd!<;}LG z_O7&5Zv_)?JGyF+DhQ*_Ztr2b6&SSA(Gp(F}v8U(a<6?Pn7*03#MipMnVNH>qQxl}GdgwWO z=(Yk5lFsju)|zWT%(?Z-;9$VZi0GCTr=dWJYCw%NPCPh3+Jxb#z3aLJyu%Ktxn zfIM8IBXOaDFbm?E;rl|yv*ntU6K)a3D6_QYTS6#p9z;0Y*9yzg`PM+joD_}2r1Zs# zJGf}6jaq(Cu;;r`{tq@YQus8wDzvC*9ig#<|mO&Q-r3nkBzHE5D;zBZz#WUYjf)^AEKAgMH-XoW6S+B`d0OdQ1ls zw0=)9_oUMc7JgVSt^6*^Rp-)FD@kbMO8Dl;^@oRht8SzRC;KW+xj*sbbnO&x?0M9E zcjsw;%7ttjIoNNl$_~~Nz%JLG`q2R&V;>&jWks9K*ZS1G5CT&621q>y{!1a3Hzq@x zq<$ZA6r{sn3zvr(*3D51A!YeJ#c0OB z7N0((6U66eBWv&HgS_fwX-I8&Ag84Jryw*pT?Jvx_Ls4s){(0~uzlqLg|jg;0Z}j1 zac{+ZK7(GQ+0O$AKN(2)pgn$%_xL??zu`jqg&IjvP{1nQJe!Nix%6yL&css2fEH#2 zpm9J5piUwkGB3~G>ajf&$jFQX&DDv|&cxLtCaFJ%n8frnhJyN+p7idw$a{@kZKQYW zRYGD|-R4WudZ7{>6d?D{Ki7}mJdG&)H`k2IEcz6#)weS7fG8i!P^o$gL?5fa`iKv| zdYVA;V*=5a*|j;XiV^87_Pj#QYgl3=nJjAZ7bsf`mt5R)7+igH<4m$5i{Sj-_9ul? z3|FGwA>!RRvqvDPJrVcui(0&xN$u7=4tr<5q`kz6+ck>S0%La%?QB13bVk^Bup@q~ z3odIGf_tUm@2%oVC-*pbAzmQPH4m=)Z*PA`jrd=tPP|N0-3ufm#L_&a36_1InxnyIdNch-W5o2H%82PD z`EFMn__NlXWIEBeZ5&!qjPz+5JgK{Kkk#+XroL z_oxHHzn}-*NStUqM}tHS?(Vtx@W~XSHWpHh$*}@2iprrAiyEwDm{C56AtWlC(|Xh#KI5 zDlekmZ~BHMChqfdKl7d5#G8gM=}WHn1(GF|gL^9_Y+$EiFIHGhIH8X|nbCf&|IY|_ zWYq2WmzEXjt7_5fgTnqrr~npbfqQ@T=6lj~PTAXg3Y@QN=@qnfwt9ZX91d;#Yrp-Y z)Az^f>MHiDk_m4P3E$&DNhbei?^KzLh;>>#`8Dd7a3G08=fCL;U7M_mwSZL%=-H=? z4^$2T$U+KXc$hu=J>k31kDv6Ux*^)I+i*zGG1OiNak30~{Xmn{foJXh7dnf7eH3=$ zO&wL2j*hgia{mb?$am)KU*qT2a00GM7$RH-3_c5sF0PQt!lJx&3 zxgu66k5&8wB+?~-HHn4UGV?z%;U!A&6vGen$eXSorTmdway~XMAi3~A^5`xH22SU4 zbMa~OLQqSXEEHE7^H^2!n?PRG{uh#i|M5ak7j}jH8fy9qLfLkiPG&)w z*ZvD+r=OX7XSp!FhpJNli9gW_iEgrg6d2@#YC491x=fe8C z%&vs6DQ4X$I?{!8R0oO=T)Di#x7fVWKgDoON*WAgteKWE5&{7%JRz4=IYEf-1FELW z^OKgeysg4SwkxMC!Q9-N;5w>FThtWymD>II<2t*-M~Y6P&1`OU=|x8P%kjMoWFcLA zv#lc$zTE#x+PPRx8jUA6yDGXomolT}WfI;olOh6eGzq~15ZOY8AAii~ITmlBmPUt% zN1G`UG@-X6a0eUmoOetcd%*jLo9R;wxBuObKMFaWmTu~}y`XUz^p{W_`SntqBM$I^ zo0m6I>Mv5n|F&5pD~c_>Cs`e7?Ie^zE@?^S%iDy_)?`Jb1;dla8ar@FxloQH;~_^r z+uC}r!@df0+W}?}Ay{1lSV;RLaB5#%Z@D~;hflA6+#QA7p`Lt@`(fBK480zr?8p&f z|D>hnTF@r32oodx1x}&O9GjcJeP-f4#s^lFHd3q>=I!Q-&tku}NXY_zLPB{8Sqi>= z9KNkBC?^_+#_KJh>-Q^zyZ%cmoVQme)-)JN8%FJk>aSpH;3r9=eJBFg*x3G*l{AeV zmz>1$Hg$1@HwLqiij%f=ER2MB-kb1XEDWSB0R9H!;g>BW6$@Ikb8z}N>U+3|=~J%F zsaeyLtQbfPkRS*N@i(1ZU7jPIe^1}JwQGcRmC33UNg4@E1djLAKWMYGl27iJC#Y~6 zU0S=pDnWaf#GhBnUX-C1sLtZJVl}eLU36eCtI=fX@+x*p>G+kcEH>|+Zn5nN7n0T~j-F{)&MxGx3 zS@v7>pFWFYYZI(IfU0h?i!c_Q=EtIa70!5QB35BH+DQT&FEJes%NM}XBNQ=6;j(=O z+t>c#q_5vd7hvl~52wlq%D|-HLKt&oV|f7C>PR%o={XBLOTcA&P8fRTu3GONns<@} zA2q{=L$3$5_{75Yiglc6E>@`IBDUHEZuri~jcj`g?8sp0t%F&#&%lueTt-H9L}rWy z7LMd^X#UI)dJVR8N!vcQ_f4byMv13X&}O>c&r+K!bXj0#tcN#3&r0m*)SI8oGyT?g+qkc2M4wBfu!2xZJ*-Y!%gh2Q~_*_-Ix>f zvEJ^f-*-nYThPkDuC6)0m?(&?wi|Z?XW&JiW-gD?B;HGcX6EG*{oSg$g?;m*1}b$i z83T-fKz^4P98B7TeH{HbQ%AGS^4c6V7#_M9_Qhp}=1XGfXJB|3Mc}lh9iqIU4#s01 z;PqXR!jhHoDem{;%6NP2UA*Q_c3#0`*A%mJ*etY|Cc)`LD)jiwOBM-PIMhh+7TlU= zI^n=o$6JqHHdn%6U9H<6gK6Y>f40)=UjOLxPAi$~`;@bspx6DKG8%3M!k8(%|nDGq+`Eu6Utlh37@H`zjf9O2<)4yO@mBp@vG zPcDky-B90$LxrZUT6zsf^najSU>0u`LWH{^wo^wg)N2)60>Ufs*#1c#BSxKj+Uh-JIh=?1^upY&^X|Y5OtHKuv{o8gpV>Hoq znw@eXRQ?*D*_Z8FM1U6)MXmQTJ_TQ;+aK$S*&6MECw|^JFiI_w;lLK4S*#iay(SP8yd8LeU&c5azixZ%ys) zc@7A`dovg|@v+4QZAFdqZ>G-FSCsGR_PRl7`U32Wf*8sFFpw~3jP4J8)AcZSVH~So zKqAX3boS>SxC6td4)4xl?+~}INbSIr{3Y{AM1okCd*g4saLkyK_s(GPNA~~-HLLds zTPik}6b2M>3Eji4i6%RNLdq(rU#j7RSG%h}pH0FFrrIR|+$`@{jbI#FzMTZ2_uRga z*Yvj6Di0ac^aRz+i-^sVhydx$oUXJJP8kNP}vFEQ!I*Bf-Fk`zS?jeC0bi@+a-3r~af?9NFjcMMq zxEDc`L#sL#QICz>YanN2P|?+V5v#^>pGKR{dSX3)eoHVq6S4A=mHyiy^_f=NL%5fdG7W6g+|}PA{;5nsG`3 znvB86luHd(?dvuBfwqFIQC|6bXR6-168$L=I(+tQ_>K-(p60T=-JjdMj%tgpvWEZy^A7xICz{1@lnbQgSh+Ij_O%qbMK+L+Cs7# zGI~&)s(`IzUlJ(IfchE(?`23D>cN zrC9_wb9l#7-Ef1e5oZK3IeGczo_2{Dozcs+cyPrm%~5k;G3&hRj{r@|&0nf;uduh* zkf11dm;6}(V589d%haFTOhwP*5JIIgdYr_-1+Vv)du}DlOb0;-jhSHcO60zbQJdcm z)Hw@a^}4hlqA$` zc4r`Q-<0jE{F*AR-X{yKF=v%tT=^z1Wip*|NkX21^!ldkko%Ljg_qhcAskD8bc72u zVfA-~vHR0PP@#%@aJr8(dQQZ<@b>(z`#nQ~>3`VTFU|MmFZdmWDSYecTk+79ML0o3 ztf|3=>sqPX%W$86?N)|7pQwFgblkQyLTek(u#DTCSlPEYz=5I7s}>;9a2(@&=ohz6 zxEl-sXTJtgnM56oTzz66xo|WeMigke`Wovt#xZe31wHa*=Xa5EN9Y+QtsOCCr?cwXpoX z(B|51&A$imD0`yUFST%mlOF`IOr(LniMCQ$;Fy%?FU?DWgLVj_l~s%W7WO0r$~~5x zR*>Eq{8_kgFF7ws;WMqanR>sz$?$9a;Bc2m&@#nKmYU}<>Kp7_LO`HO00r71(rdWC zaM80R$GPx|-z6_epl0M6-@dn_|kFy_!a2yA=qg-k7lT)e zhe*%29tjXyF78#3OU%9~ZKnl?**f|myG#Yb)|E+=wtKkKt;bqh71Xam-s81^#BY12 zy(&y$nkv}t443KqI2^yN$Hd=axBuq@R$hKW{2~3F$;0!bt?um?kkb=%QktNEsdP@p z_>D%MYv)l_DWACJam~gMJ{kd6*2Em0G|}0{s8u}0mlrOMo(z~>r3ZFK$?$ZZ#;mrm zeh$r=;rIAcQ^`k)d8j-Cn4>@>OkLT>oxHdf7!78xnzKH7Y!;5sFP8CP59YpvA-{*c zRJRY>%e2{C*6!+t1*!I(-N`AuTb~awx98?(OvOKsU7q@%gmIZ=3xuZm+ec8qQBFcsH}*$|Ud2)^1(R?hp%u_mxMJp6;sW zBJkXeD+olfo(BQ(ey0}^9VL2)55REmnYxHS5ZJWx#=q0obJ-M5{;Lqs0Z3(emT@IVw&l<)Gmv0*i*qXQ;PvY3# znjmP|)O{RQ61wyNBFotoN4>OkI~C^Aq`xLgo4IM=BzyP8+oxA>VfNKjGg)_ZmgIES z#l2%!#cFOpLZ{Wuz0=nepEK@Ro}UsH7W3v!Iq@7`5kFX7CwLV6ai*Um6Dp&6{n(2# zx3TVPDMNoQ1wJ>#wXHM6?u2vDz|?JN&6E6xqPh)~U%a8b3~?4%jLyGN7ItLZwR}Jv z2HP%OO^C83;O#&lV`r!3#pKi>3~3o09&z$A_-A(3ID1Ks4VMg&><4_~y3gEA_*5~N zTJ$oDM_E!+b@SDLxM3S*xqnImph2utWLB)KWYlhk29#PdaKI1#?;^S1!O=Jd%PqFePj^0%A-SY zEsPzSYD=EFSasaadHUnmxwe`Nk;=MNFDv+!L$Tykx#)6jKX!1(jzHww-99Pj;5IE1 zm6muD*}J7wgZ3{>+GA}H&#ILbQ~6~)>!0DvFF4jqWnw-n^!HMBMyDjIG$6Bk@P?3E zZfNsJaSJ(Lqs^NVtNpOMbUM7D&_4_5xhCLyb`Vs~VQ@I>W_AHN!F<7nuzBzIBv*lR zdYqW!t54qlH7XK#(O>8z&s=Jz>Jqeday8o01w0cT1^{XIJdNnm*;)1eQpXpJ=#FD( z@JtqgV@5TsM5e7UM3-OIz2+il6;3EB-sbvXAZFT?v!nu{?H&+CfBpFa&-ojy)4I{3 zVRJQQ-W+5Hm+1htnP_p79_MQ=97#GHKse)z+}4`yg({Pz>*9LJHBR!PSk_}dy~C-z zXZu4vR%iY$Ic8=b6tI(pV3zv)nJk%Z5dlw@cj#w2k<*hCC4FrxGk#dcoh!(;ToFa# z099hfn(!#fM-Kf|zTc6+xzG2xY9 z!*5-WGON0#`G;a$GG9$KyvvQ2Qe+Bvib6tmm&U3+c>);sjU7gV_hIlpu*_d`I!C|L z8Qv80%U7qq^ACU0+b1|}UF;CCVkA3gW$Pio*hhcY7X>{Pg-lDHj_wZ^HiioX6}e+p*0xg6G`Ha=J5qO$4+CB? z-NEt`(nG?g&5AK6mwk1oANX(cM$7BBT_$9Z`#Sy*qpuP8$jVmdPOh61_{4%@?3B_x zKfM~#aV@o6x + + + {modalStatus && +
+ + +
+ } +
) + +} \ No newline at end of file diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 3f5346286..4c0ecc368 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' import CartIcon from './CartIcon' -const AppBar = () => { +export const AppBar = React.memo(function AppBar(){ return (
@@ -10,8 +10,8 @@ const AppBar = () => {
) -} +}) -export default AppBar +// export default AppBar diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 781bf7cea..3476c4bfc 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -1,7 +1,7 @@ import React from 'react' import ShoppingCart from './ShoppingCart' import OrderSummary from './OrderSummary' -function AppBody(){ +export const AppBody = React.memo(function AppBody(){ return (
@@ -9,6 +9,6 @@ function AppBody(){
) - } + }) -export default AppBody +// export default AppBody diff --git a/week-11/amazonCart/src/components/OrderSummary.jsx b/week-11/amazonCart/src/components/OrderSummary.jsx index 2774b6ff0..79d24763a 100644 --- a/week-11/amazonCart/src/components/OrderSummary.jsx +++ b/week-11/amazonCart/src/components/OrderSummary.jsx @@ -1,16 +1,16 @@ import React from "react"; -import { useRecoilValue } from "recoil"; -import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; -import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { useRecoilValue,useSetRecoilState } from "recoil"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; - +import { modalAtom } from "../recoil/atoms/modalAtom"; const OrderSummary = () => { - + const setShowModal = useSetRecoilState(modalAtom) const summary = useRecoilValue(orderTotalAtom); let count = summary.quantity; let totalQuantity = summary.subtotal; - + function showModal(){ + setShowModal(prev => true) + } return (
{ maxWidth: "500px", marginRight: 20, fontSize: "2rem", + boxShadow:"0 4px 8px #C0C0C0" }} >

Order Summary

@@ -57,6 +58,7 @@ const OrderSummary = () => { style={{ display: "flex", justifyContent: "center", flexGrow: "1" }} >
+ ) +} \ No newline at end of file diff --git a/week-11/amazonCart/src/components/PurchaseModal.jsx b/week-11/amazonCart/src/components/PurchaseModal.jsx new file mode 100644 index 000000000..1af80e3fb --- /dev/null +++ b/week-11/amazonCart/src/components/PurchaseModal.jsx @@ -0,0 +1,61 @@ +import React from "react"; +import checkMark from "../assets/check-mark.png"; +import {useRecoilValue, useSetRecoilState} from "recoil" +import { modalAtom } from "../recoil/atoms/modalAtom"; +import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +const PurchaseModal = () => { + const setShowModal = useSetRecoilState(modalAtom); + const summary = useRecoilValue(orderTotalAtom); + function closeModal(){ + setShowModal(false) + } + return ( + +
+

Purchase Successful!

+
+ Not found +
+
+ Thank you for your purchase.Your order has been successfully + processed. +
+
+ Total Amount: Rs.{summary.subtotal} +
+ +
+ ); +}; + +export default PurchaseModal; diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index 36fbc401e..1316509c5 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -1,32 +1,60 @@ -import {useRecoilState,useSetRecoilState} from "recoil" +import { useRecoilState, useSetRecoilState } from "recoil"; import { Item } from "./Item"; import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import generateUniqueId from "../utils/uuid_generator"; -export default function ShoppingCart(){ - - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - function addItem(){ - setItems(prev => [...prev, {title:"The Art of impossible: A Peak Performance Primer", price:100, id:generateUniqueId()}]) - setOrderTotal((prev)=>{ - let curr = {...prev}; - curr.quantity+=1; - let n = items.length; - - curr.subtotal += 100 - return curr; - }) - } - - return ( -
-

Shopping Cart

- - {items.map((el,idx)=>{ - return - })} - -
- ) - } \ No newline at end of file +export default function ShoppingCart() { + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + function addItem() { + setItems((prev) => [ + ...prev, + { + title: "The Art of impossible: A Peak Performance Primer", + price: 100, + id: generateUniqueId(), + }, + ]); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += 100; + return curr; + }); + } + + return ( +
+

Shopping Cart

+ + {items.map((el, idx) => { + return ( + + ); + })} + +
+ ); +} diff --git a/week-11/amazonCart/src/recoil/atoms/modalAtom.js b/week-11/amazonCart/src/recoil/atoms/modalAtom.js new file mode 100644 index 000000000..660d3c0bb --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/modalAtom.js @@ -0,0 +1,5 @@ +import { atom } from "recoil"; +export const modalAtom = atom({ + key:"modalAtom", + default:false +}) \ No newline at end of file From 2d60415386a5306fb03dafe907c775b202503dc6 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:24:59 +0530 Subject: [PATCH 24/33] new init --- week-10/authSystem/src/components/AppBar.jsx | 23 +++++++++-- .../authSystem/src/components/HomePage.jsx | 0 week-10/authSystem/src/components/Login.jsx | 38 +++++++++++++++---- 3 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 week-10/authSystem/src/components/HomePage.jsx diff --git a/week-10/authSystem/src/components/AppBar.jsx b/week-10/authSystem/src/components/AppBar.jsx index 51cea9c0d..69cdbed86 100644 --- a/week-10/authSystem/src/components/AppBar.jsx +++ b/week-10/authSystem/src/components/AppBar.jsx @@ -1,9 +1,26 @@ -import React from 'react' +import React, { useState } from 'react' +import Login from './Login' const AppBar = () => { + const [loggedIn, setLoggedIn] = useState(false); + const [username, setUsername] = useState(""); + + function login(username) { + setLoggedIn(true); + setUsername(username); + } + function logout(){ + setLoggedIn(false); + setUsername(""); + } return ( -
AppBar
+
+
+

Auth System

+
+ {loggedIn ?
Welcome {username}
: } +
) } -export default AppBar \ No newline at end of file +export default AppBar diff --git a/week-10/authSystem/src/components/HomePage.jsx b/week-10/authSystem/src/components/HomePage.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/week-10/authSystem/src/components/Login.jsx b/week-10/authSystem/src/components/Login.jsx index 45e3e9d29..1d9fe3afb 100644 --- a/week-10/authSystem/src/components/Login.jsx +++ b/week-10/authSystem/src/components/Login.jsx @@ -1,9 +1,33 @@ -import React from 'react' - -const Login = () => { +import React from "react"; +import {useState,useRef} from "react" +const Login = ({login}) => { + const nameRef = useRef(null); + const passwordRef = useRef(null); + function signin(){ + //assuming successful login + login(nameRef.current.value); + } return ( -
Login
- ) -} +
+
+ + + +
+
+ ); +}; -export default Login \ No newline at end of file +export default Login; From 588fc4c75cd3bda665f303047210ce122f825fcb Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 29 Oct 2024 21:46:10 +0530 Subject: [PATCH 25/33] Modal Container added ! --- .../amazonCart/src/components/AmazonCart.jsx | 25 +++++++------------ week-11/amazonCart/src/components/AppBar.jsx | 4 +-- week-11/amazonCart/src/components/AppBody.jsx | 4 +-- .../src/components/ModalContainer.jsx | 15 +++++++++++ 4 files changed, 28 insertions(+), 20 deletions(-) create mode 100644 week-11/amazonCart/src/components/ModalContainer.jsx diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index fc4d545a8..fbd502aa5 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -1,20 +1,13 @@ -import {AppBar} from './AppBar' -import {AppBody} from './AppBody' -import { modalAtom } from '../recoil/atoms/modalAtom' -import PurchaseModal from './PurchaseModal' -import {useRecoilValue,useSetRecoilState} from "recoil" -import Overlay from './Overlay' +import AppBar from './AppBar' +import AppBody from './AppBody' +import ModalContainer from './ModalContainer' export default function AmazonCart(){ - const modalStatus = useRecoilValue(modalAtom) - return(
+ return(
- - {modalStatus && -
- - -
- } + + +
) -} \ No newline at end of file +} + diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 4c0ecc368..adf1053ce 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' import CartIcon from './CartIcon' -export const AppBar = React.memo(function AppBar(){ +export default function AppBar(){ return (
@@ -10,7 +10,7 @@ export const AppBar = React.memo(function AppBar(){
) -}) +} diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 3476c4bfc..56273c61a 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -1,7 +1,7 @@ import React from 'react' import ShoppingCart from './ShoppingCart' import OrderSummary from './OrderSummary' -export const AppBody = React.memo(function AppBody(){ +export default function AppBody(){ return (
@@ -9,6 +9,6 @@ export const AppBody = React.memo(function AppBody(){
) - }) + } // export default AppBody diff --git a/week-11/amazonCart/src/components/ModalContainer.jsx b/week-11/amazonCart/src/components/ModalContainer.jsx new file mode 100644 index 000000000..a28871176 --- /dev/null +++ b/week-11/amazonCart/src/components/ModalContainer.jsx @@ -0,0 +1,15 @@ +import { modalAtom } from '../recoil/atoms/modalAtom' +import PurchaseModal from './PurchaseModal' +import {useRecoilValue} from "recoil" +import Overlay from './Overlay' +export default function ModalContainer(){ + const modalStatus = useRecoilValue(modalAtom) + return ( + modalStatus && +
+ + +
+ + ) + } \ No newline at end of file From 3aa1658b91568f46fdadc1d18aefcafb29617c91 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:28:45 +0530 Subject: [PATCH 26/33] wishlist-basic-working --- week-11/amazonCart/package-lock.json | 1182 ++++++++++++++++- week-11/amazonCart/package.json | 3 + week-11/amazonCart/postcss.config.js | 6 + week-11/amazonCart/src/App.jsx | 40 +- .../amazonCart/src/components/AmazonCart.jsx | 2 +- week-11/amazonCart/src/components/AppBar.jsx | 13 +- .../amazonCart/src/components/CartIcon.jsx | 3 + .../amazonCart/src/components/WishList.jsx | 54 + week-11/amazonCart/src/index.css | 3 + week-11/amazonCart/src/main.jsx | 6 +- .../src/recoil/atoms/wishlistAtoms.js | 9 + week-11/amazonCart/tailwind.config.js | 12 + 12 files changed, 1305 insertions(+), 28 deletions(-) create mode 100644 week-11/amazonCart/postcss.config.js create mode 100644 week-11/amazonCart/src/components/WishList.jsx create mode 100644 week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js create mode 100644 week-11/amazonCart/tailwind.config.js diff --git a/week-11/amazonCart/package-lock.json b/week-11/amazonCart/package-lock.json index a25d856e7..d894a62ab 100644 --- a/week-11/amazonCart/package-lock.json +++ b/week-11/amazonCart/package-lock.json @@ -12,21 +12,37 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", - "recoil": "^0.7.7" + "recoil": "^0.7.7", + "uuid": "^11.0.0" }, "devDependencies": { "@eslint/js": "^9.11.1", "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", "eslint": "^9.11.1", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.9.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", "vite": "^5.4.8" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -871,6 +887,23 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -919,11 +952,55 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@remix-run/router": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.20.0.tgz", "integrity": "sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==", - "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -1270,6 +1347,18 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -1282,6 +1371,31 @@ "node": ">=4" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1418,6 +1532,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1439,6 +1590,18 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1449,6 +1612,18 @@ "concat-map": "0.0.1" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/browserslist": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", @@ -1509,6 +1684,15 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001669", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", @@ -1543,6 +1727,42 @@ "node": ">=4" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1558,6 +1778,15 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1584,6 +1813,18 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -1698,6 +1939,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -1710,12 +1963,24 @@ "node": ">=0.10.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.5.41", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz", "integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==", "dev": true }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", @@ -2218,6 +2483,34 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -2230,6 +2523,15 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", @@ -2242,6 +2544,18 @@ "node": ">=16.0.0" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2286,6 +2600,35 @@ "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2381,6 +2724,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2393,6 +2756,30 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "15.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", @@ -2611,6 +2998,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -2705,6 +3104,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", @@ -2756,6 +3164,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", @@ -2927,6 +3344,30 @@ "node": ">= 0.4" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3023,6 +3464,21 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3064,19 +3520,32 @@ "yallist": "^3.0.2" } }, - "node_modules/lucide-react": { - "version": "0.454.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.454.0.tgz", - "integrity": "sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -3085,12 +3554,32 @@ "node": "*" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -3121,6 +3610,24 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3130,6 +3637,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -3265,6 +3781,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3301,12 +3823,64 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -3344,6 +3918,150 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3373,6 +4091,26 @@ "node": ">=6" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", @@ -3415,7 +4153,6 @@ "version": "6.27.0", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.27.0.tgz", "integrity": "sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==", - "license": "MIT", "dependencies": { "@remix-run/router": "1.20.0" }, @@ -3430,7 +4167,6 @@ "version": "6.27.0", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.27.0.tgz", "integrity": "sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==", - "license": "MIT", "dependencies": { "@remix-run/router": "1.20.0", "react-router": "6.27.0" @@ -3443,6 +4179,27 @@ "react-dom": ">=16.8" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/recoil": { "version": "0.7.7", "resolved": "https://registry.npmjs.org/recoil/-/recoil-0.7.7.tgz", @@ -3528,6 +4285,16 @@ "node": ">=4" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rollup": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", @@ -3563,6 +4330,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-array-concat": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", @@ -3686,6 +4476,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -3695,6 +4497,65 @@ "node": ">=0.10.0" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", @@ -3780,6 +4641,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3792,6 +4690,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -3816,12 +4736,87 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -3831,6 +4826,24 @@ "node": ">=4" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3970,6 +4983,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/uuid": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.0.tgz", @@ -4144,12 +5163,145 @@ "node": ">=0.10.0" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index 7f2ab94a4..45d59bc99 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -23,11 +23,14 @@ "@types/react": "^18.3.10", "@types/react-dom": "^18.3.0", "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", "eslint": "^9.11.1", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.1.0-rc.0", "eslint-plugin-react-refresh": "^0.4.12", "globals": "^15.9.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", "vite": "^5.4.8" } } diff --git a/week-11/amazonCart/postcss.config.js b/week-11/amazonCart/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/week-11/amazonCart/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/week-11/amazonCart/src/App.jsx b/week-11/amazonCart/src/App.jsx index 04c4e38a2..84822ae91 100644 --- a/week-11/amazonCart/src/App.jsx +++ b/week-11/amazonCart/src/App.jsx @@ -1,12 +1,34 @@ -import React, { useState } from 'react' -import './App.css' -import {RecoilRoot} from "recoil" -import AmazonCart from './components/AmazonCart' +import React, { useEffect, useState } from "react"; +import "./index.css" +import "./App.css"; +import AmazonCart from "./components/AmazonCart"; +import { BrowserRouter, Routes, Route, Outlet } from "react-router-dom"; +import WishList from "./components/WishList"; +import AppBar from "./components/AppBar"; function App() { return ( - - - - ) + + + }> + } /> + } /> + + + + ); } -export default App + +function Layout() { + console.log("layout-re rendered!") + useEffect(()=>{ + console.log("Layout mounted!") + },[]) + + return ( +
+ + +
+ ); +} +export default App; diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index fbd502aa5..9deafd07b 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -3,7 +3,7 @@ import AppBody from './AppBody' import ModalContainer from './ModalContainer' export default function AmazonCart(){ return(
- + {/* */} diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index adf1053ce..a041a33b1 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,5 +1,5 @@ import React from 'react' - +import { Link } from 'react-router-dom' import CartIcon from './CartIcon' export default function AppBar(){ return ( @@ -8,7 +8,18 @@ export default function AppBar(){ amazon.in
+ +
+ ) +} + +function WishListIcon(){ + return ( + +
+ Wish
+ ) } diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx index 09d21b5e5..0c0773a9a 100644 --- a/week-11/amazonCart/src/components/CartIcon.jsx +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -1,5 +1,6 @@ import {useRecoilValue} from "recoil" import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; +import { Link } from "react-router-dom"; export default function CartIcon(){ const summary = useRecoilValue(orderTotalAtom); @@ -7,7 +8,9 @@ export default function CartIcon(){
Hello,user! + +
{summary.quantity}
diff --git a/week-11/amazonCart/src/components/WishList.jsx b/week-11/amazonCart/src/components/WishList.jsx new file mode 100644 index 000000000..f9ab5fb9b --- /dev/null +++ b/week-11/amazonCart/src/components/WishList.jsx @@ -0,0 +1,54 @@ +import React from 'react' +import { useRecoilState,useSetRecoilState } from 'recoil'; +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; +import generateUniqueId from '../utils/uuid_generator'; +import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; +const WishList = () => { + return ( +
+
+ + + +
+
+ ) +} + +function WishItem({id,title,price}){ + const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + console.log(added) + function addItem() { + setItems((prev) => [ + ...prev, + { + title: title, + price: price, + id: generateUniqueId(), + }, + ]); + setAdded(true); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += price; + return curr; + }); + } + return( +
+ Not Found + +

{title}

+

Rs.{price}

+ +
+ ) +} + +export default WishList diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index e69de29bb..bd6213e1d 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/week-11/amazonCart/src/main.jsx b/week-11/amazonCart/src/main.jsx index bdf5a3bfc..6dc326d58 100644 --- a/week-11/amazonCart/src/main.jsx +++ b/week-11/amazonCart/src/main.jsx @@ -1,8 +1,10 @@ -import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import App from "./App.jsx"; import "./index.css"; +import { RecoilRoot } from "recoil"; createRoot(document.getElementById("root")).render( - + + + ); diff --git a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js new file mode 100644 index 000000000..9e1e27e8c --- /dev/null +++ b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js @@ -0,0 +1,9 @@ +import { atomFamily } from "recoil"; + +const wishListItemStatusAtom = atomFamily({ + key:"wishListItemStatus", + default:(id)=>{ + return false; + } +}) +export default wishListItemStatusAtom \ No newline at end of file diff --git a/week-11/amazonCart/tailwind.config.js b/week-11/amazonCart/tailwind.config.js new file mode 100644 index 000000000..d37737fc0 --- /dev/null +++ b/week-11/amazonCart/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} + From 7ec8180b82586148c57135c9fa9440ae997e09ca Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Wed, 30 Oct 2024 01:54:35 +0530 Subject: [PATCH 27/33] routing added ! --- week-11/amazonCart/package.json | 1 - .../amazonCart/src/components/AmazonCart.jsx | 21 +++---- week-11/amazonCart/src/components/AppBar.jsx | 17 ++---- .../amazonCart/src/components/CartIcon.jsx | 57 ++++++++++++------- .../src/components/WishListIcon.jsx | 15 +++++ .../amazonCart/src/components/Wishlist.jsx | 11 ++++ 6 files changed, 77 insertions(+), 45 deletions(-) create mode 100644 week-11/amazonCart/src/components/WishListIcon.jsx create mode 100644 week-11/amazonCart/src/components/Wishlist.jsx diff --git a/week-11/amazonCart/package.json b/week-11/amazonCart/package.json index 45d59bc99..6824002ad 100644 --- a/week-11/amazonCart/package.json +++ b/week-11/amazonCart/package.json @@ -15,7 +15,6 @@ "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", "recoil": "^0.7.7", - "recoil": "^0.7.7", "uuid": "^11.0.0" }, "devDependencies": { diff --git a/week-11/amazonCart/src/components/AmazonCart.jsx b/week-11/amazonCart/src/components/AmazonCart.jsx index 9deafd07b..eb0c2c634 100644 --- a/week-11/amazonCart/src/components/AmazonCart.jsx +++ b/week-11/amazonCart/src/components/AmazonCart.jsx @@ -1,13 +1,10 @@ -import AppBar from './AppBar' -import AppBody from './AppBody' -import ModalContainer from './ModalContainer' -export default function AmazonCart(){ - return(
- {/* */} - - - -
) - +import AppBody from "./AppBody"; +import ModalContainer from "./ModalContainer"; +export default function AmazonCart() { + return ( +
+ + +
+ ); } - diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index a041a33b1..49031f944 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' -import { Link } from 'react-router-dom' import CartIcon from './CartIcon' -export default function AppBar(){ +import WishListIcon from './WishListIcon' +export const AppBar = React.memo( function AppBar(){ return (
@@ -9,19 +9,10 @@ export default function AppBar(){
+
) -} - -function WishListIcon(){ - return ( - -
- Wish -
- - ) -} +}) diff --git a/week-11/amazonCart/src/components/CartIcon.jsx b/week-11/amazonCart/src/components/CartIcon.jsx index 0c0773a9a..fa92bccc9 100644 --- a/week-11/amazonCart/src/components/CartIcon.jsx +++ b/week-11/amazonCart/src/components/CartIcon.jsx @@ -1,21 +1,40 @@ -import {useRecoilValue} from "recoil" +import { useRecoilValue } from "recoil"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import { Link } from "react-router-dom"; -export default function CartIcon(){ - - const summary = useRecoilValue(orderTotalAtom); - return( -
- - Hello,user! - - - -
- {summary.quantity} -
-
- ) - - - } \ No newline at end of file + +export default function CartIcon() { + const summary = useRecoilValue(orderTotalAtom); + return ( +
+ Hello,user! + + + +
+ {summary.quantity} +
+
+ ); +} diff --git a/week-11/amazonCart/src/components/WishListIcon.jsx b/week-11/amazonCart/src/components/WishListIcon.jsx new file mode 100644 index 000000000..21f20046d --- /dev/null +++ b/week-11/amazonCart/src/components/WishListIcon.jsx @@ -0,0 +1,15 @@ +import React from "react"; +import { Link } from "react-router-dom"; + +const WishListIcon = () => { + return ( + + + + ); +}; + +export default WishListIcon; diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx new file mode 100644 index 000000000..17daeb952 --- /dev/null +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -0,0 +1,11 @@ +import React from 'react' +// import AppBar from './AppBar' +const Wishlist = () => { + return ( +
+ {/* */} +
+ ) +} + +export default Wishlist From a54acc041a2a400d008526bf5f9ff5e6df553bb5 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:47:38 +0530 Subject: [PATCH 28/33] damage-control --- week-11/amazonCart/src/components/AppBar.jsx | 4 ++-- week-11/amazonCart/src/index.css | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 49031f944..199a036f1 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -1,7 +1,7 @@ import React from 'react' import CartIcon from './CartIcon' import WishListIcon from './WishListIcon' -export const AppBar = React.memo( function AppBar(){ +export default function AppBar(){ return (
@@ -9,7 +9,7 @@ export const AppBar = React.memo( function AppBar(){
- + {/* */}
) }) diff --git a/week-11/amazonCart/src/index.css b/week-11/amazonCart/src/index.css index bd6213e1d..e69de29bb 100644 --- a/week-11/amazonCart/src/index.css +++ b/week-11/amazonCart/src/index.css @@ -1,3 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; \ No newline at end of file From d383d792f02c34a3ae52956a2b70dbbbb8349477 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Mon, 4 Nov 2024 22:51:05 +0530 Subject: [PATCH 29/33] reverted-to-working --- .../amazonCart/src/components/Wishlist.jsx | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx index 17daeb952..630a47fbb 100644 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -1,11 +1,54 @@ import React from 'react' -// import AppBar from './AppBar' -const Wishlist = () => { +import { useRecoilState,useSetRecoilState } from 'recoil'; +import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; +import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; +import generateUniqueId from '../utils/uuid_generator'; +import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; +const WishList = () => { return ( -
- {/* */} +
+
+ + + +
) } -export default Wishlist +function WishItem({id,title,price}){ + const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const [items, setItems] = useRecoilState(itemCollectionAtom); + const setOrderTotal = useSetRecoilState(orderTotalAtom); + console.log(added) + function addItem() { + setItems((prev) => [ + ...prev, + { + title: title, + price: price, + id: generateUniqueId(), + }, + ]); + setAdded(true); + setOrderTotal((prev) => { + let curr = { ...prev }; + curr.quantity += 1; + let n = items.length; + + curr.subtotal += price; + return curr; + }); + } + return( +
+ Not Found + +

{title}

+

Rs.{price}

+ +
+ ) +} + +export default WishList \ No newline at end of file From 53d8c30216808520c4f4b61967d82615b4f67892 Mon Sep 17 00:00:00 2001 From: Anshuman Laskar Date: Tue, 5 Nov 2024 03:10:37 +0530 Subject: [PATCH 30/33] minor-issue-fix-trial1 --- week-11/amazonCart/src/components/Wishlist.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx index 630a47fbb..f9ab5fb9b 100644 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ b/week-11/amazonCart/src/components/Wishlist.jsx @@ -51,4 +51,4 @@ function WishItem({id,title,price}){ ) } -export default WishList \ No newline at end of file +export default WishList From d63cb4d6ed357fa01ab0f8ec87c4678fb189bf71 Mon Sep 17 00:00:00 2001 From: Vortex-21 Date: Tue, 5 Nov 2024 14:06:46 +0530 Subject: [PATCH 31/33] wishlist-functionality-added! --- week-11/amazonCart/src/components/Item.jsx | 5 ++ .../src/components/ShoppingCart.jsx | 2 +- .../amazonCart/src/components/WishList.jsx | 29 ++++++---- .../amazonCart/src/components/Wishlist.jsx | 54 ------------------- .../amazonCart/src/recoil/atoms/itemAtoms.js | 2 +- .../src/recoil/atoms/wishlistAtoms.js | 3 +- 6 files changed, 26 insertions(+), 69 deletions(-) delete mode 100644 week-11/amazonCart/src/components/Wishlist.jsx diff --git a/week-11/amazonCart/src/components/Item.jsx b/week-11/amazonCart/src/components/Item.jsx index e35238a7d..17be779f0 100644 --- a/week-11/amazonCart/src/components/Item.jsx +++ b/week-11/amazonCart/src/components/Item.jsx @@ -3,6 +3,7 @@ import {useRecoilState, useSetRecoilState} from "recoil" import { itemCounterAtom } from "../recoil/atoms/itemAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; +import { wishListItemStatusAtom } from "../recoil/atoms/wishlistAtoms"; export const Item = React.memo(function Item({identifier, title, price}){ @@ -10,6 +11,9 @@ export const Item = React.memo(function Item({identifier, title, price}){ const setOrderTotal = useSetRecoilState(orderTotalAtom); const setItems = useSetRecoilState(itemCollectionAtom) + + const setAdded = useSetRecoilState(wishListItemStatusAtom(identifier)); + function increase(){ setCount(currVal => currVal+1); setOrderTotal((prev) => { @@ -25,6 +29,7 @@ export const Item = React.memo(function Item({identifier, title, price}){ return {quantity:prev.quantity-1, subtotal:prev.subtotal-price} }) + setAdded(false); } function decrease(){ if(count == 1){ diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index 1316509c5..dfe129ec5 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -23,7 +23,7 @@ export default function ShoppingCart() { curr.subtotal += 100; return curr; }); - } + } // this is just a dummy function to check the functionality of shopping cart.The actual function which matters is in WishList.jsx return (
{ return (
- - + +
@@ -17,24 +17,31 @@ const WishList = () => { } function WishItem({id,title,price}){ - const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + // const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const added = useRecoilValue(wishListItemStatusAtom(id)); + const setAdded = useSetRecoilState(wishListItemStatusAtom(id)); const [items, setItems] = useRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); - console.log(added) - function addItem() { + useEffect(()=>{ + console.log("added : ", added) + },[added]) + function addItem(id) { + if(added){//already added to wish list + return; + } setItems((prev) => [ ...prev, { title: title, price: price, - id: generateUniqueId(), + id: id, }, ]); setAdded(true); setOrderTotal((prev) => { let curr = { ...prev }; curr.quantity += 1; - let n = items.length; + // let n = items.length; curr.subtotal += price; return curr; @@ -46,7 +53,7 @@ function WishItem({id,title,price}){

{title}

Rs.{price}

- +
) } diff --git a/week-11/amazonCart/src/components/Wishlist.jsx b/week-11/amazonCart/src/components/Wishlist.jsx deleted file mode 100644 index f9ab5fb9b..000000000 --- a/week-11/amazonCart/src/components/Wishlist.jsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react' -import { useRecoilState,useSetRecoilState } from 'recoil'; -import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; -import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; -import generateUniqueId from '../utils/uuid_generator'; -import wishListItemStatusAtom from '../recoil/atoms/wishlistAtoms'; -const WishList = () => { - return ( -
-
- - - -
-
- ) -} - -function WishItem({id,title,price}){ - const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) - const [items, setItems] = useRecoilState(itemCollectionAtom); - const setOrderTotal = useSetRecoilState(orderTotalAtom); - console.log(added) - function addItem() { - setItems((prev) => [ - ...prev, - { - title: title, - price: price, - id: generateUniqueId(), - }, - ]); - setAdded(true); - setOrderTotal((prev) => { - let curr = { ...prev }; - curr.quantity += 1; - let n = items.length; - - curr.subtotal += price; - return curr; - }); - } - return( -
- Not Found - -

{title}

-

Rs.{price}

- -
- ) -} - -export default WishList diff --git a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js index 84406af6d..0d096770d 100644 --- a/week-11/amazonCart/src/recoil/atoms/itemAtoms.js +++ b/week-11/amazonCart/src/recoil/atoms/itemAtoms.js @@ -1,4 +1,4 @@ -import {atom, atomFamily} from "recoil" +import {atomFamily} from "recoil" export const itemCounterAtom=atomFamily({ key:"itemQuanityCounter", diff --git a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js index 9e1e27e8c..5e03fe82b 100644 --- a/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js +++ b/week-11/amazonCart/src/recoil/atoms/wishlistAtoms.js @@ -1,9 +1,8 @@ import { atomFamily } from "recoil"; -const wishListItemStatusAtom = atomFamily({ +export const wishListItemStatusAtom = atomFamily({ key:"wishListItemStatus", default:(id)=>{ return false; } }) -export default wishListItemStatusAtom \ No newline at end of file From ff988ffce52df7e4993010ca1d8e0410035497e2 Mon Sep 17 00:00:00 2001 From: Vortex-21 Date: Tue, 5 Nov 2024 14:44:49 +0530 Subject: [PATCH 32/33] minor issues fixes and code format --- week-11/amazonCart/src/components/AppBar.jsx | 7 +------ week-11/amazonCart/src/components/AppBody.jsx | 2 -- week-11/amazonCart/src/components/ShoppingCart.jsx | 3 ++- week-11/amazonCart/src/components/WishList.jsx | 8 ++++---- 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/week-11/amazonCart/src/components/AppBar.jsx b/week-11/amazonCart/src/components/AppBar.jsx index 199a036f1..58dd5bafd 100644 --- a/week-11/amazonCart/src/components/AppBar.jsx +++ b/week-11/amazonCart/src/components/AppBar.jsx @@ -9,11 +9,6 @@ export default function AppBar(){
- {/* */}
) -}) - - - -// export default AppBar +} diff --git a/week-11/amazonCart/src/components/AppBody.jsx b/week-11/amazonCart/src/components/AppBody.jsx index 56273c61a..564746e1c 100644 --- a/week-11/amazonCart/src/components/AppBody.jsx +++ b/week-11/amazonCart/src/components/AppBody.jsx @@ -10,5 +10,3 @@ export default function AppBody(){
) } - -// export default AppBody diff --git a/week-11/amazonCart/src/components/ShoppingCart.jsx b/week-11/amazonCart/src/components/ShoppingCart.jsx index dfe129ec5..56269b69a 100644 --- a/week-11/amazonCart/src/components/ShoppingCart.jsx +++ b/week-11/amazonCart/src/components/ShoppingCart.jsx @@ -4,6 +4,7 @@ import { itemCollectionAtom } from "../recoil/atoms/shoppingCartAtoms"; import { orderTotalAtom } from "../recoil/atoms/orderSummaryAtoms"; import generateUniqueId from "../utils/uuid_generator"; export default function ShoppingCart() { + const debug=false; const [items, setItems] = useRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); function addItem() { @@ -54,7 +55,7 @@ export default function ShoppingCart() { /> ); })} - + {debug&&}
); } diff --git a/week-11/amazonCart/src/components/WishList.jsx b/week-11/amazonCart/src/components/WishList.jsx index d4a868fed..35e5e099b 100644 --- a/week-11/amazonCart/src/components/WishList.jsx +++ b/week-11/amazonCart/src/components/WishList.jsx @@ -1,8 +1,7 @@ import React, { useEffect } from 'react' -import { useRecoilState,useRecoilValue,useSetRecoilState } from 'recoil'; +import {useRecoilValue,useSetRecoilState } from 'recoil'; import { itemCollectionAtom } from '../recoil/atoms/shoppingCartAtoms'; import { orderTotalAtom } from '../recoil/atoms/orderSummaryAtoms'; -import generateUniqueId from '../utils/uuid_generator'; import {wishListItemStatusAtom} from '../recoil/atoms/wishlistAtoms'; const WishList = () => { return ( @@ -17,10 +16,11 @@ const WishList = () => { } function WishItem({id,title,price}){ - // const [added,setAdded] = useRecoilState(wishListItemStatusAtom(id)) + const added = useRecoilValue(wishListItemStatusAtom(id)); const setAdded = useSetRecoilState(wishListItemStatusAtom(id)); - const [items, setItems] = useRecoilState(itemCollectionAtom); + + const setItems = useSetRecoilState(itemCollectionAtom); const setOrderTotal = useSetRecoilState(orderTotalAtom); useEffect(()=>{ console.log("added : ", added) From 93111778a1749cef9213e03a9e4b0776582f45fa Mon Sep 17 00:00:00 2001 From: Vortex-21 Date: Mon, 11 Nov 2024 16:07:45 +0530 Subject: [PATCH 33/33] drawer animation added (with toggle button bug.) --- week-13/solution/.gitignore | 24 + week-13/solution/README.md | 50 + week-13/solution/eslint.config.js | 28 + week-13/solution/index.html | 14 + week-13/solution/package-lock.json | 4246 +++++++++++++++++++++++++ week-13/solution/package.json | 32 + week-13/solution/postcss.config.js | 6 + week-13/solution/public/vite.svg | 1 + week-13/solution/src/App.css | 0 week-13/solution/src/App.tsx | 33 + week-13/solution/src/assets/react.svg | 1 + week-13/solution/src/index.css | 3 + week-13/solution/src/main.tsx | 10 + week-13/solution/src/vite-env.d.ts | 1 + week-13/solution/tailwind.config.js | 12 + week-13/solution/tsconfig.app.json | 26 + week-13/solution/tsconfig.json | 7 + week-13/solution/tsconfig.node.json | 24 + week-13/solution/vite.config.ts | 7 + 19 files changed, 4525 insertions(+) create mode 100644 week-13/solution/.gitignore create mode 100644 week-13/solution/README.md create mode 100644 week-13/solution/eslint.config.js create mode 100644 week-13/solution/index.html create mode 100644 week-13/solution/package-lock.json create mode 100644 week-13/solution/package.json create mode 100644 week-13/solution/postcss.config.js create mode 100644 week-13/solution/public/vite.svg create mode 100644 week-13/solution/src/App.css create mode 100644 week-13/solution/src/App.tsx create mode 100644 week-13/solution/src/assets/react.svg create mode 100644 week-13/solution/src/index.css create mode 100644 week-13/solution/src/main.tsx create mode 100644 week-13/solution/src/vite-env.d.ts create mode 100644 week-13/solution/tailwind.config.js create mode 100644 week-13/solution/tsconfig.app.json create mode 100644 week-13/solution/tsconfig.json create mode 100644 week-13/solution/tsconfig.node.json create mode 100644 week-13/solution/vite.config.ts diff --git a/week-13/solution/.gitignore b/week-13/solution/.gitignore new file mode 100644 index 000000000..a547bf36d --- /dev/null +++ b/week-13/solution/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/week-13/solution/README.md b/week-13/solution/README.md new file mode 100644 index 000000000..74872fd4a --- /dev/null +++ b/week-13/solution/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +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 + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/week-13/solution/eslint.config.js b/week-13/solution/eslint.config.js new file mode 100644 index 000000000..092408a9f --- /dev/null +++ b/week-13/solution/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/week-13/solution/index.html b/week-13/solution/index.html new file mode 100644 index 000000000..9d5cdd721 --- /dev/null +++ b/week-13/solution/index.html @@ -0,0 +1,14 @@ + + + + + + + + Vite + React + TS + + +
+ + + diff --git a/week-13/solution/package-lock.json b/week-13/solution/package-lock.json new file mode 100644 index 000000000..6b63086e3 --- /dev/null +++ b/week-13/solution/package-lock.json @@ -0,0 +1,4246 @@ +{ + "name": "solution", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "solution", + "version": "0.0.0", + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.48", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.25.0.tgz", + "integrity": "sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.25.0.tgz", + "integrity": "sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.25.0.tgz", + "integrity": "sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.25.0.tgz", + "integrity": "sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.25.0.tgz", + "integrity": "sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.25.0.tgz", + "integrity": "sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.25.0.tgz", + "integrity": "sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.25.0.tgz", + "integrity": "sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.25.0.tgz", + "integrity": "sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.25.0.tgz", + "integrity": "sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.25.0.tgz", + "integrity": "sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.25.0.tgz", + "integrity": "sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.25.0.tgz", + "integrity": "sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.25.0.tgz", + "integrity": "sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.25.0.tgz", + "integrity": "sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.25.0.tgz", + "integrity": "sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.25.0.tgz", + "integrity": "sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.25.0.tgz", + "integrity": "sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", + "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/type-utils": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", + "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", + "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.13.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.55", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", + "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.48", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.48.tgz", + "integrity": "sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "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==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.25.0.tgz", + "integrity": "sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.25.0", + "@rollup/rollup-android-arm64": "4.25.0", + "@rollup/rollup-darwin-arm64": "4.25.0", + "@rollup/rollup-darwin-x64": "4.25.0", + "@rollup/rollup-freebsd-arm64": "4.25.0", + "@rollup/rollup-freebsd-x64": "4.25.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.25.0", + "@rollup/rollup-linux-arm-musleabihf": "4.25.0", + "@rollup/rollup-linux-arm64-gnu": "4.25.0", + "@rollup/rollup-linux-arm64-musl": "4.25.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.25.0", + "@rollup/rollup-linux-riscv64-gnu": "4.25.0", + "@rollup/rollup-linux-s390x-gnu": "4.25.0", + "@rollup/rollup-linux-x64-gnu": "4.25.0", + "@rollup/rollup-linux-x64-musl": "4.25.0", + "@rollup/rollup-win32-arm64-msvc": "4.25.0", + "@rollup/rollup-win32-ia32-msvc": "4.25.0", + "@rollup/rollup-win32-x64-msvc": "4.25.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.13.0.tgz", + "integrity": "sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.13.0", + "@typescript-eslint/parser": "8.13.0", + "@typescript-eslint/utils": "8.13.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/week-13/solution/package.json b/week-13/solution/package.json new file mode 100644 index 000000000..34e4aa648 --- /dev/null +++ b/week-13/solution/package.json @@ -0,0 +1,32 @@ +{ + "name": "solution", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "autoprefixer": "^10.4.20", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "postcss": "^8.4.48", + "tailwindcss": "^3.4.14", + "typescript": "~5.6.2", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" + } +} diff --git a/week-13/solution/postcss.config.js b/week-13/solution/postcss.config.js new file mode 100644 index 000000000..2e7af2b7f --- /dev/null +++ b/week-13/solution/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/week-13/solution/public/vite.svg b/week-13/solution/public/vite.svg new file mode 100644 index 000000000..e7b8dfb1b --- /dev/null +++ b/week-13/solution/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/week-13/solution/src/App.css b/week-13/solution/src/App.css new file mode 100644 index 000000000..e69de29bb diff --git a/week-13/solution/src/App.tsx b/week-13/solution/src/App.tsx new file mode 100644 index 000000000..7bd32d3ff --- /dev/null +++ b/week-13/solution/src/App.tsx @@ -0,0 +1,33 @@ +import "./index.css"; +import { useState } from "react"; +const App = () => { + return ; +}; +function Screen() { + const [drawer, setDrawer] = useState(true); + function toggleSlider(): void { + setDrawer((prev) => !prev); + } + return ( +
+
+
+ +
+
+ +
+
+ ); +} + +export default App; diff --git a/week-13/solution/src/assets/react.svg b/week-13/solution/src/assets/react.svg new file mode 100644 index 000000000..6c87de9bb --- /dev/null +++ b/week-13/solution/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/week-13/solution/src/index.css b/week-13/solution/src/index.css new file mode 100644 index 000000000..bd6213e1d --- /dev/null +++ b/week-13/solution/src/index.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/week-13/solution/src/main.tsx b/week-13/solution/src/main.tsx new file mode 100644 index 000000000..bef5202a3 --- /dev/null +++ b/week-13/solution/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/week-13/solution/src/vite-env.d.ts b/week-13/solution/src/vite-env.d.ts new file mode 100644 index 000000000..11f02fe2a --- /dev/null +++ b/week-13/solution/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/week-13/solution/tailwind.config.js b/week-13/solution/tailwind.config.js new file mode 100644 index 000000000..d37737fc0 --- /dev/null +++ b/week-13/solution/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/week-13/solution/tsconfig.app.json b/week-13/solution/tsconfig.app.json new file mode 100644 index 000000000..f867de0dd --- /dev/null +++ b/week-13/solution/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/week-13/solution/tsconfig.json b/week-13/solution/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/week-13/solution/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/week-13/solution/tsconfig.node.json b/week-13/solution/tsconfig.node.json new file mode 100644 index 000000000..abcd7f0da --- /dev/null +++ b/week-13/solution/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/week-13/solution/vite.config.ts b/week-13/solution/vite.config.ts new file mode 100644 index 000000000..8b0f57b91 --- /dev/null +++ b/week-13/solution/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +})