From c8b7a7977584e530922023ea8f297ae1d98ca747 Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 09:54:34 +0530 Subject: [PATCH 01/14] recoil intro --- package-lock.json | 9 ++-- src/App.jsx | 93 ++++++++++++++++++++------------------- src/store/atoms/count.js | 18 -------- src/store/atoms/count.jsx | 8 ++-- 4 files changed, 56 insertions(+), 72 deletions(-) delete mode 100644 src/store/atoms/count.js diff --git a/package-lock.json b/package-lock.json index 34f56fa..a1cd47f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4857,8 +4857,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "ajv": { "version": "6.12.6", @@ -5435,15 +5434,13 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-react-refresh": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.5.tgz", "integrity": "sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==", - "dev": true, - "requires": {} + "dev": true }, "eslint-scope": { "version": "7.2.2", diff --git a/src/App.jsx b/src/App.jsx index 896ad1e..1cd34c1 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,58 +1,61 @@ -import { useContext, useMemo, useState } from "react" -import { CountContext } from "./context"; -import { RecoilRoot, useRecoilState, useRecoilValue, useSetRecoilState } from "recoil"; -import { countAtom, evenSelector } from "./store/atoms/count"; +import { + RecoilRoot, + useRecoilState, + useRecoilValue, + useSetRecoilState, +} from "recoil"; +import CountAtom from "./store/atoms/count"; function App() { - return ( -
- - - -
- ) + return ( +
+ + + +
+ ); } function Count() { - console.log("re-render"); - return
- - -
+ return ( +
+ + +
+ ); } function CountRenderer() { - const count = useRecoilValue(countAtom); - - return
- - {count} - - -
-} - -function EvenCountRenderer() { - const isEven = useRecoilValue(evenSelector); - - return
- {isEven ? "It is even" : null} -
+ const count = useRecoilValue(CountAtom); + return ( +
+ {count} + {/* */} +
+ ); } function Buttons() { - const setCount = useSetRecoilState(countAtom); - console.log("buttons re-rendererd"); - - return
- - - -
+ const setCount = useSetRecoilState(CountAtom); + return ( +
+ + + +
+ ); } -export default App +export default App; diff --git a/src/store/atoms/count.js b/src/store/atoms/count.js deleted file mode 100644 index 0ff7aef..0000000 --- a/src/store/atoms/count.js +++ /dev/null @@ -1,18 +0,0 @@ -import { createContext, useMemo } from "react"; -import { atom, selector } from "recoil"; - -export const countAtom = atom({ - key: "countAtom", - default: 0 -}); - -export const evenSelector = selector({ - key: "evenSelector", - get: ({get}) => { - const count = get(countAtom); - return count % 2; - } -}); - -// Todo creation application with filtering logic -// todos, filter \ No newline at end of file diff --git a/src/store/atoms/count.jsx b/src/store/atoms/count.jsx index ab5ab9a..44da69e 100644 --- a/src/store/atoms/count.jsx +++ b/src/store/atoms/count.jsx @@ -1,6 +1,8 @@ import { atom } from "recoil"; -export const countAtom = atom({ - key: "countAtom", - default: 0 +const CountAtom = atom({ + key: "countAtom", //key should be unique + default: 0, }); + +export default CountAtom; From f9c1fd0b17cef6058b1c4c92789691022efb1431 Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 10:41:51 +0530 Subject: [PATCH 02/14] selector intro --- src/App.jsx | 24 +++++++++++++++++------- src/store/selector/countIsEven.jsx | 14 ++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 src/store/selector/countIsEven.jsx diff --git a/src/App.jsx b/src/App.jsx index 1cd34c1..f7a7c82 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,12 +1,12 @@ -import { - RecoilRoot, - useRecoilState, - useRecoilValue, - useSetRecoilState, -} from "recoil"; +import { RecoilRoot, useRecoilValue, useSetRecoilState } from "recoil"; import CountAtom from "./store/atoms/count"; +import CountIsEven from "./store/selector/countIsEven"; + +//we can get the value of the selector function by using the useRecoilValue +//useRecoilValue can take either an atom or the selector to return the value function App() { + CountIsEven; return (
@@ -27,16 +27,26 @@ function Count() { function CountRenderer() { const count = useRecoilValue(CountAtom); + + const countEven = useRecoilValue(CountIsEven); + + console.log(countEven); + return (
{count} - {/* */} + {countEven && }
); } +function EvenCountRenderer() { + return <> The count is now even; +} + function Buttons() { const setCount = useSetRecoilState(CountAtom); + console.log(`button component rendering`); return (
+ ); +} + +export default Todo; + +function TItem() { + const [todoItem, setTodoItem] = useRecoilState(TodoItem); + const [todos, setTodos] = useRecoilState(Todos); + const [filter, setFilter] = useRecoilState(FilterWord); + + console.log(todos); + + const Ref = React.useRef(null); + + function handleFilter(e) { + setFilter(e.target.value); + } + + function handleChange(e) { + const newItem = { + ...todoItem, + [e.target.name]: e.target.value, + }; + setTodoItem(newItem); + } + function handleAddTodo() { + setTodos((currentTodos) => [...currentTodos, todoItem]); + setTodoItem({ + title: "", + description: "", + }); + Ref.current.focus(); + } + return ( +
+
+ + +
+
+ + +
+ + + +
+ +
+
+ ); +} + +function DisplayTodoItems() { + const todos = useRecoilValue(derivedState); + + return ( +
+ {todos.length > 0 && + todos.map((todo) => ( +
+

Title: {todo.title}

+

Description: {todo.description}

+
+ ))} +
+ ); +} diff --git a/src/components/Todo/index.js b/src/components/Todo/index.js new file mode 100644 index 0000000..effb7f6 --- /dev/null +++ b/src/components/Todo/index.js @@ -0,0 +1,2 @@ +export * from "./Todo"; +export { default } from "./Todo"; diff --git a/src/components/Todo/todo.module.css b/src/components/Todo/todo.module.css new file mode 100644 index 0000000..b0b03a8 --- /dev/null +++ b/src/components/Todo/todo.module.css @@ -0,0 +1,64 @@ +.todoContainer { + display: flex; + flex-direction: column; + padding: 2rem; + gap: 1rem; + background-color: peachpuff; + color: brown; + margin: 0 auto; + justify-content: center; + align-items: center; + + + +} + +.inputGroup { + display: flex; + align-items: center; +} + + +.inputGroup label { + min-width: 100px; +} + + +.todoContainer button { + margin-top: 1rem; + padding: 1rem; + color: white; + background-color: deeppink; + border-radius: 11px; + text-align: center; + border: none; + cursor: pointer; +} + +@keyframes highlighter { + from { + transform: scale(0.95); + } + + to { + transform: scale(1.05); + } +} + +.todoContainer button:hover { + animation: highlighter 1s forwards; + transition: highlighter 2s ease-in-out; +} + + +.todoItemsDisplay { + + + display: flex; + flex-direction: column; + align-items: center; + padding: 1rem; + margin-top: 2rem; + background-color: saddlebrown; + color: white; +} \ No newline at end of file diff --git a/src/store/atoms/todo.jsx b/src/store/atoms/todo.jsx new file mode 100644 index 0000000..67334de --- /dev/null +++ b/src/store/atoms/todo.jsx @@ -0,0 +1,21 @@ +import { atom } from "recoil"; + +const TodoItem = atom({ + key: "todoItem", + default: { + title: "", + description: "", + }, +}); + +export const Todos = atom({ + key: "todos", + default: [], +}); + +export const FilterWord = atom({ + key: "todoFilter", + default: "", +}); + +export default TodoItem; diff --git a/src/store/selector/derviedState.jsx b/src/store/selector/derviedState.jsx new file mode 100644 index 0000000..7e20fb4 --- /dev/null +++ b/src/store/selector/derviedState.jsx @@ -0,0 +1,19 @@ +import { selector } from "recoil"; +import { FilterWord, Todos } from "../atoms/todo"; + +const derivedState = selector({ + key: "filteredDerivedState", + get: ({ get }) => { + const value = get(FilterWord); + const todos = get(Todos); + + if ((value == "") | (value === undefined)) { + return todos; + } + + const filteredTodos = todos.filter((todo) => todo.title.includes(value)); + return filteredTodos; + }, +}); + +export default derivedState; From 2746199f2eecc1307e7beeda6230a0b6de9d8007 Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 13:29:11 +0530 Subject: [PATCH 04/14] udpates --- src/components/Todo/Todo.jsx | 3 ++- src/components/Todo/todo.module.css | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/components/Todo/Todo.jsx b/src/components/Todo/Todo.jsx index 778206b..30dd238 100644 --- a/src/components/Todo/Todo.jsx +++ b/src/components/Todo/Todo.jsx @@ -74,7 +74,8 @@ function TItem() {
- + +
); diff --git a/src/components/Todo/todo.module.css b/src/components/Todo/todo.module.css index b0b03a8..164f016 100644 --- a/src/components/Todo/todo.module.css +++ b/src/components/Todo/todo.module.css @@ -55,10 +55,22 @@ display: flex; - flex-direction: column; align-items: center; padding: 1rem; margin-top: 2rem; - background-color: saddlebrown; + background-color: rgb(9, 83, 29); color: white; + gap: 0.75rem; + border-radius: 11px; + flex-direction: column; + +} + +.todoItemsDisplay div { + border: 1px solid white; + border-radius: 11px; + padding: 0.75rem; + display: grid; + place-items: center; + margin: 0 } \ No newline at end of file From bb29f1104b969ed88ce7376018c10f077c15fde6 Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 15:16:03 +0530 Subject: [PATCH 05/14] husky package installed --- .husky/pre-commit | 1 + package-lock.json | 726 +++++++++++++++++++++++++--------------------- package.json | 4 +- 3 files changed, 400 insertions(+), 331 deletions(-) create mode 100644 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..72c4429 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm test diff --git a/package-lock.json b/package-lock.json index a1cd47f..aecddd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", + "husky": "^9.0.11", "vite": "^5.0.8" } }, @@ -374,9 +375,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -390,9 +391,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -406,9 +407,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -422,9 +423,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -438,9 +439,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -454,9 +455,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -470,9 +471,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -486,9 +487,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -502,9 +503,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -518,9 +519,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -534,9 +535,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -550,9 +551,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -566,9 +567,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -582,9 +583,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -598,9 +599,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -614,9 +615,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -630,9 +631,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -646,9 +647,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -662,9 +663,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -678,9 +679,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -694,9 +695,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -710,9 +711,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -726,9 +727,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -937,9 +938,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", + "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", "cpu": [ "arm" ], @@ -950,9 +951,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", + "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", "cpu": [ "arm64" ], @@ -963,9 +964,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", + "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", "cpu": [ "arm64" ], @@ -976,9 +977,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", + "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", "cpu": [ "x64" ], @@ -989,9 +990,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", + "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", "cpu": [ "arm" ], @@ -1002,9 +1003,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", + "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", "cpu": [ "arm64" ], @@ -1015,9 +1016,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", + "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", "cpu": [ "arm64" ], @@ -1027,10 +1028,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", + "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", + "cpu": [ + "ppc64le" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", + "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", "cpu": [ "riscv64" ], @@ -1040,10 +1054,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", + "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", + "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", "cpu": [ "x64" ], @@ -1054,9 +1081,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", + "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", "cpu": [ "x64" ], @@ -1067,9 +1094,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", + "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", "cpu": [ "arm64" ], @@ -1080,9 +1107,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", + "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", "cpu": [ "ia32" ], @@ -1093,9 +1120,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", + "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", "cpu": [ "x64" ], @@ -1736,9 +1763,9 @@ } }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, "bin": { @@ -1748,29 +1775,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escalade": { @@ -2433,6 +2460,21 @@ "node": ">= 0.4" } }, + "node_modules/husky": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "dev": true, + "bin": { + "husky": "bin.mjs" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -3226,9 +3268,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -3247,7 +3289,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3478,9 +3520,9 @@ } }, "node_modules/rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", + "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -3493,19 +3535,21 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "@rollup/rollup-android-arm-eabi": "4.13.2", + "@rollup/rollup-android-arm64": "4.13.2", + "@rollup/rollup-darwin-arm64": "4.13.2", + "@rollup/rollup-darwin-x64": "4.13.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", + "@rollup/rollup-linux-arm64-gnu": "4.13.2", + "@rollup/rollup-linux-arm64-musl": "4.13.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", + "@rollup/rollup-linux-riscv64-gnu": "4.13.2", + "@rollup/rollup-linux-s390x-gnu": "4.13.2", + "@rollup/rollup-linux-x64-gnu": "4.13.2", + "@rollup/rollup-linux-x64-musl": "4.13.2", + "@rollup/rollup-win32-arm64-msvc": "4.13.2", + "@rollup/rollup-win32-ia32-msvc": "4.13.2", + "@rollup/rollup-win32-x64-msvc": "4.13.2", "fsevents": "~2.3.2" } }, @@ -3649,9 +3693,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3929,14 +3973,14 @@ } }, "node_modules/vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", + "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", "dev": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -4356,163 +4400,163 @@ } }, "@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "dev": true, "optional": true }, "@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "dev": true, "optional": true }, @@ -4659,93 +4703,107 @@ "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==" }, "@rollup/rollup-android-arm-eabi": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.5.tgz", - "integrity": "sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz", + "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==", "dev": true, "optional": true }, "@rollup/rollup-android-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.5.tgz", - "integrity": "sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz", + "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==", "dev": true, "optional": true }, "@rollup/rollup-darwin-arm64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.5.tgz", - "integrity": "sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz", + "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==", "dev": true, "optional": true }, "@rollup/rollup-darwin-x64": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.5.tgz", - "integrity": "sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz", + "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.5.tgz", - "integrity": "sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz", + "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.5.tgz", - "integrity": "sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz", + "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-arm64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.5.tgz", - "integrity": "sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz", + "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz", + "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==", "dev": true, "optional": true }, "@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.5.tgz", - "integrity": "sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz", + "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz", + "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-gnu": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.5.tgz", - "integrity": "sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz", + "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==", "dev": true, "optional": true }, "@rollup/rollup-linux-x64-musl": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.5.tgz", - "integrity": "sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz", + "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==", "dev": true, "optional": true }, "@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.5.tgz", - "integrity": "sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz", + "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==", "dev": true, "optional": true }, "@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.5.tgz", - "integrity": "sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz", + "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==", "dev": true, "optional": true }, "@rollup/rollup-win32-x64-msvc": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.5.tgz", - "integrity": "sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz", + "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==", "dev": true, "optional": true }, @@ -5241,34 +5299,34 @@ } }, "esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", - "dev": true, - "requires": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "escalade": { @@ -5745,6 +5803,12 @@ "function-bind": "^1.1.2" } }, + "husky": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", + "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "dev": true + }, "ignore": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", @@ -6313,14 +6377,14 @@ "dev": true }, "postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" } }, "prelude-ls": { @@ -6464,24 +6528,26 @@ } }, "rollup": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.5.tgz", - "integrity": "sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==", - "dev": true, - "requires": { - "@rollup/rollup-android-arm-eabi": "4.9.5", - "@rollup/rollup-android-arm64": "4.9.5", - "@rollup/rollup-darwin-arm64": "4.9.5", - "@rollup/rollup-darwin-x64": "4.9.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.5", - "@rollup/rollup-linux-arm64-gnu": "4.9.5", - "@rollup/rollup-linux-arm64-musl": "4.9.5", - "@rollup/rollup-linux-riscv64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-gnu": "4.9.5", - "@rollup/rollup-linux-x64-musl": "4.9.5", - "@rollup/rollup-win32-arm64-msvc": "4.9.5", - "@rollup/rollup-win32-ia32-msvc": "4.9.5", - "@rollup/rollup-win32-x64-msvc": "4.9.5", + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz", + "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.13.2", + "@rollup/rollup-android-arm64": "4.13.2", + "@rollup/rollup-darwin-arm64": "4.13.2", + "@rollup/rollup-darwin-x64": "4.13.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.2", + "@rollup/rollup-linux-arm64-gnu": "4.13.2", + "@rollup/rollup-linux-arm64-musl": "4.13.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2", + "@rollup/rollup-linux-riscv64-gnu": "4.13.2", + "@rollup/rollup-linux-s390x-gnu": "4.13.2", + "@rollup/rollup-linux-x64-gnu": "4.13.2", + "@rollup/rollup-linux-x64-musl": "4.13.2", + "@rollup/rollup-win32-arm64-msvc": "4.13.2", + "@rollup/rollup-win32-ia32-msvc": "4.13.2", + "@rollup/rollup-win32-x64-msvc": "4.13.2", "@types/estree": "1.0.5", "fsevents": "~2.3.2" } @@ -6582,9 +6648,9 @@ } }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "string.prototype.matchall": { @@ -6773,15 +6839,15 @@ } }, "vite": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.11.tgz", - "integrity": "sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz", + "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==", "dev": true, "requires": { - "esbuild": "^0.19.3", + "esbuild": "^0.20.1", "fsevents": "~2.3.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" + "postcss": "^8.4.38", + "rollup": "^4.13.0" } }, "which": { diff --git a/package.json b/package.json index 2892dc2..c3fcea9 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "vite build", "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", - "preview": "vite preview" + "preview": "vite preview", + "prepare": "husky" }, "dependencies": { "react": "^18.2.0", @@ -23,6 +24,7 @@ "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", + "husky": "^9.0.11", "vite": "^5.0.8" } } From 633ed0c897ded4dece8168250909a11c48e307ae Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 15:21:35 +0530 Subject: [PATCH 06/14] changes to pre-commit file --- .husky/pre-commit | 1 - 1 file changed, 1 deletion(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 72c4429..e69de29 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +0,0 @@ -npm test From f02dcab9ab07e5268d778d88f4e30ca75553953d Mon Sep 17 00:00:00 2001 From: tanishka Date: Fri, 29 Mar 2024 16:50:03 +0530 Subject: [PATCH 07/14] week 7 profile assignment done --- src/App.jsx | 5 +- src/components/ProfileAssnt1/Profile.jsx | 41 ++++++++++ src/components/ProfileAssnt1/index.js | 2 + .../ProfileAssnt1/profile.module.css | 81 +++++++++++++++++++ 4 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 src/components/ProfileAssnt1/Profile.jsx create mode 100644 src/components/ProfileAssnt1/index.js create mode 100644 src/components/ProfileAssnt1/profile.module.css diff --git a/src/App.jsx b/src/App.jsx index 5dacd07..7c7ae67 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ import { RecoilRoot, useRecoilValue, useSetRecoilState } from "recoil"; import CountAtom from "./store/atoms/count"; import CountIsEven from "./store/selector/countIsEven"; -import Todo from "./components/Todo"; +import Profile from "./components/ProfileAssnt1/Profile"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -12,7 +12,8 @@ function App() {
- +
+
); diff --git a/src/components/ProfileAssnt1/Profile.jsx b/src/components/ProfileAssnt1/Profile.jsx new file mode 100644 index 0000000..5965653 --- /dev/null +++ b/src/components/ProfileAssnt1/Profile.jsx @@ -0,0 +1,41 @@ +import React from "react"; +import styles from "./profile.module.css"; + +function Profile() { + return ( +
+
+
+
+ saka +

+ B Saka, 22 +

+

Arsenal, London

+
+
+ +
+
+

7M

+

Followers

+
+
+

16M

+

Likes

+
+
+

2.3k

+

Photos

+
+
+
+ ); +} + +export default Profile; diff --git a/src/components/ProfileAssnt1/index.js b/src/components/ProfileAssnt1/index.js new file mode 100644 index 0000000..7fe0f09 --- /dev/null +++ b/src/components/ProfileAssnt1/index.js @@ -0,0 +1,2 @@ +export * from "./Profile"; +export { default } from "./Profile"; diff --git a/src/components/ProfileAssnt1/profile.module.css b/src/components/ProfileAssnt1/profile.module.css new file mode 100644 index 0000000..85c1c00 --- /dev/null +++ b/src/components/ProfileAssnt1/profile.module.css @@ -0,0 +1,81 @@ +.profileContainer { + + display: flex; + flex-direction: column; + align-items: center; + border: 1px solid rgb(78, 6, 6); + margin-top: 2rem; + margin: 0 auto; + height: fit-content; + max-width: 30vw; + padding-bottom: 1rem; + + border-radius: 11px; +} + + +.footerContainer { + display: flex; + gap: 1rem; + border-top: 2px solid pink; + width: 100%; + justify-content: space-around; +} + +.footerContainer article p:nth-child(1) { + font-weight: bolder; +} + +.footerContainer article p { + margin: 0; + margin-top: 0.55rem; + text-align: center; +} + + +.footerContainer article p:nth-child(2) { + font-weight: 100; + font-size: x-small; + opacity: 0.57; +} + +.firstHalf { + height: 40vh; + width: 100%; + position: relative; + display: flex; + flex-direction: column; + justify-content: flex-end; + +} + +.onlyBackground { + height: 50%; + width: 100%; + background: linear-gradient(rgb(17, 65, 113), rgb(147, 15, 15)); + border-radius: 11px; + position: absolute; + top: 0; + left: 0; +} + +.profile img { + object-fit: cover; + border-radius: 50%; + position: absolute; + top: 33%; + left: 50%; + transform: translateX(-50%); +} + +.profile { + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; +} + +.profile p { + margin: 0; + margin-bottom: 1rem; +} \ No newline at end of file From 76b2e15d2dcdb4d03e0f8726d9489d85fcc8528c Mon Sep 17 00:00:00 2001 From: tanishka Date: Sat, 30 Mar 2024 19:22:03 +0530 Subject: [PATCH 08/14] background Color changer task is done --- src/App.css | 4 ++ src/App.jsx | 68 +++---------------- .../BackGchanger.jsx | 40 +++++++++++ .../Assgmnt2BackgroundChanger/atom.js | 6 ++ .../backGchanger.module.css | 28 ++++++++ .../Assgmnt2BackgroundChanger/index.js | 2 + src/index.css | 0 src/main.jsx | 17 +++-- 8 files changed, 97 insertions(+), 68 deletions(-) create mode 100644 src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx create mode 100644 src/components/Assgmnt2BackgroundChanger/atom.js create mode 100644 src/components/Assgmnt2BackgroundChanger/backGchanger.module.css create mode 100644 src/components/Assgmnt2BackgroundChanger/index.js delete mode 100644 src/index.css diff --git a/src/App.css b/src/App.css index e69de29..b864067 100644 --- a/src/App.css +++ b/src/App.css @@ -0,0 +1,4 @@ +body { + background-color: steelblue; + +} \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index 7c7ae67..cd4a296 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,68 +1,18 @@ -import { RecoilRoot, useRecoilValue, useSetRecoilState } from "recoil"; -import CountAtom from "./store/atoms/count"; -import CountIsEven from "./store/selector/countIsEven"; -import Profile from "./components/ProfileAssnt1/Profile"; +import "./App.css"; +import BackGchanger from "./components/Assgmnt2BackgroundChanger/BackGchanger"; + +import { RecoilRoot } from "recoil"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value function App() { - CountIsEven; - return ( -
- - -
- -
-
- ); -} - -function Count() { - return ( -
- - -
- ); -} - -function CountRenderer() { - const count = useRecoilValue(CountAtom); - const countEven = useRecoilValue(CountIsEven); - return ( -
- {count} - {countEven && } -
- ); -} - -function EvenCountRenderer() { - return <> The count is now even; -} - -function Buttons() { - const setCount = useSetRecoilState(CountAtom); return ( -
- - - -
+ +
+ +
+
); } diff --git a/src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx b/src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx new file mode 100644 index 0000000..5fea066 --- /dev/null +++ b/src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx @@ -0,0 +1,40 @@ +/* eslint-disable react/prop-types */ +import React from "react"; +import styles from "./backGchanger.module.css"; +import { atomColor } from "./atom"; +import { useRecoilState } from "recoil"; + +const colors = ["red", "yellow", "pink", "purple", "brown", "green", "white"]; + +function BackGchanger() { + return ( +
+ {colors.map((color) => { + return ; + })} +
+ ); +} + +export default BackGchanger; + +function ColorButton({ color }) { + const [bgColor, setBgColor] = useRecoilState(atomColor); + React.useEffect(() => { + document.body.style.backgroundColor = bgColor; + }, [bgColor]); + + return ( + + ); +} diff --git a/src/components/Assgmnt2BackgroundChanger/atom.js b/src/components/Assgmnt2BackgroundChanger/atom.js new file mode 100644 index 0000000..293e5d5 --- /dev/null +++ b/src/components/Assgmnt2BackgroundChanger/atom.js @@ -0,0 +1,6 @@ +import { atom } from "recoil"; + +export const atomColor = atom({ + key: "color_Atom", + default: "", +}); diff --git a/src/components/Assgmnt2BackgroundChanger/backGchanger.module.css b/src/components/Assgmnt2BackgroundChanger/backGchanger.module.css new file mode 100644 index 0000000..b8825e1 --- /dev/null +++ b/src/components/Assgmnt2BackgroundChanger/backGchanger.module.css @@ -0,0 +1,28 @@ +.colorContainer { + margin: 0; + padding: 0; + + color: white; + display: flex; + justify-content: space-between; + gap: 1rem; + width: 600px; + padding: 1rem 2rem; + border-bottom: 1px solid white; + box-shadow: 0px 5px 4px rgba(0, 0, 0, 0.3); + text-align: center; + position: absolute; + top: 80%; + left: 50%; + transform: translateX(-50%); + +} + + +.buttonColor { + padding: 0.5rem 1rem; + border: none; + border-radius: 11px; + text-align: center; + cursor: pointer; +} \ No newline at end of file diff --git a/src/components/Assgmnt2BackgroundChanger/index.js b/src/components/Assgmnt2BackgroundChanger/index.js new file mode 100644 index 0000000..e24e544 --- /dev/null +++ b/src/components/Assgmnt2BackgroundChanger/index.js @@ -0,0 +1,2 @@ +export * from "./BackGchanger"; +export { default } from "./BackGchanger"; diff --git a/src/index.css b/src/index.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/main.jsx b/src/main.jsx index 54b39dd..08a16f8 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,10 +1,9 @@ -import React from 'react' -import ReactDOM from 'react-dom/client' -import App from './App.jsx' -import './index.css' +import React from "react"; +import ReactDOM from "react-dom/client"; +import App from "./App.jsx"; -ReactDOM.createRoot(document.getElementById('root')).render( - - - , -) +ReactDOM.createRoot(document.getElementById("root")).render( + + + +); From 5f261810931a40ad863380bfb8ce1690bcf746ab Mon Sep 17 00:00:00 2001 From: tanishka Date: Sat, 30 Mar 2024 19:58:08 +0530 Subject: [PATCH 09/14] assignment 3 is executed --- src/App.jsx | 4 +- .../ReactElement.jsx | 39 +++++++++++++++++++ .../Assgmnt3_CustomReactElement/index.js | 2 + 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/components/Assgmnt3_CustomReactElement/ReactElement.jsx create mode 100644 src/components/Assgmnt3_CustomReactElement/index.js diff --git a/src/App.jsx b/src/App.jsx index cd4a296..54b964d 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ import "./App.css"; -import BackGchanger from "./components/Assgmnt2BackgroundChanger/BackGchanger"; import { RecoilRoot } from "recoil"; +import ReactElement from "./components/Assgmnt3_CustomReactElement/ReactElement"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -10,7 +10,7 @@ function App() { return (
- +
); diff --git a/src/components/Assgmnt3_CustomReactElement/ReactElement.jsx b/src/components/Assgmnt3_CustomReactElement/ReactElement.jsx new file mode 100644 index 0000000..f4493fb --- /dev/null +++ b/src/components/Assgmnt3_CustomReactElement/ReactElement.jsx @@ -0,0 +1,39 @@ +import React from "react"; +/* implemented in react */ + +//a function to generate a react element +// function generateReactElement() { +// const element = React.createElement( +// "a", +// { +// href: "https://www.google.com", +// style: { +// color: "white", +// }, +// }, +// "click here to vist Google" +// ); +// return element; +// } + +function customRender() { + const path = document.getElementById("appendTothiDiv"); + const anchorElement = document.createElement("a"); + anchorElement.setAttribute("href", "https://www.google.com"); + anchorElement.style.color = "white"; + anchorElement.textContent = "click here to visit Google"; + path.appendChild(anchorElement); +} + +function ReactElement() { + const loadOnce = React.useRef(false); + React.useEffect(() => { + if (loadOnce.current) { + customRender(); + } + loadOnce.current = true; + }, []); + return
; +} + +export default ReactElement; diff --git a/src/components/Assgmnt3_CustomReactElement/index.js b/src/components/Assgmnt3_CustomReactElement/index.js new file mode 100644 index 0000000..6826b4c --- /dev/null +++ b/src/components/Assgmnt3_CustomReactElement/index.js @@ -0,0 +1,2 @@ +export * from "./ReactElement"; +export { default } from "./ReactElement"; From aaf5af0a5484e76751a92941f3fd949704b3ffb0 Mon Sep 17 00:00:00 2001 From: tanishka Date: Sat, 30 Mar 2024 20:00:15 +0530 Subject: [PATCH 10/14] minor updates --- src/components/{ProfileAssnt1 => Assgmnt1_Profile}/Profile.jsx | 0 src/components/{ProfileAssnt1 => Assgmnt1_Profile}/index.js | 0 .../{ProfileAssnt1 => Assgmnt1_Profile}/profile.module.css | 0 .../BackGchanger.jsx | 0 .../atom.js | 0 .../backGchanger.module.css | 0 .../index.js | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename src/components/{ProfileAssnt1 => Assgmnt1_Profile}/Profile.jsx (100%) rename src/components/{ProfileAssnt1 => Assgmnt1_Profile}/index.js (100%) rename src/components/{ProfileAssnt1 => Assgmnt1_Profile}/profile.module.css (100%) rename src/components/{Assgmnt2BackgroundChanger => Assgmnt2_BackgroundChanger}/BackGchanger.jsx (100%) rename src/components/{Assgmnt2BackgroundChanger => Assgmnt2_BackgroundChanger}/atom.js (100%) rename src/components/{Assgmnt2BackgroundChanger => Assgmnt2_BackgroundChanger}/backGchanger.module.css (100%) rename src/components/{Assgmnt2BackgroundChanger => Assgmnt2_BackgroundChanger}/index.js (100%) diff --git a/src/components/ProfileAssnt1/Profile.jsx b/src/components/Assgmnt1_Profile/Profile.jsx similarity index 100% rename from src/components/ProfileAssnt1/Profile.jsx rename to src/components/Assgmnt1_Profile/Profile.jsx diff --git a/src/components/ProfileAssnt1/index.js b/src/components/Assgmnt1_Profile/index.js similarity index 100% rename from src/components/ProfileAssnt1/index.js rename to src/components/Assgmnt1_Profile/index.js diff --git a/src/components/ProfileAssnt1/profile.module.css b/src/components/Assgmnt1_Profile/profile.module.css similarity index 100% rename from src/components/ProfileAssnt1/profile.module.css rename to src/components/Assgmnt1_Profile/profile.module.css diff --git a/src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx b/src/components/Assgmnt2_BackgroundChanger/BackGchanger.jsx similarity index 100% rename from src/components/Assgmnt2BackgroundChanger/BackGchanger.jsx rename to src/components/Assgmnt2_BackgroundChanger/BackGchanger.jsx diff --git a/src/components/Assgmnt2BackgroundChanger/atom.js b/src/components/Assgmnt2_BackgroundChanger/atom.js similarity index 100% rename from src/components/Assgmnt2BackgroundChanger/atom.js rename to src/components/Assgmnt2_BackgroundChanger/atom.js diff --git a/src/components/Assgmnt2BackgroundChanger/backGchanger.module.css b/src/components/Assgmnt2_BackgroundChanger/backGchanger.module.css similarity index 100% rename from src/components/Assgmnt2BackgroundChanger/backGchanger.module.css rename to src/components/Assgmnt2_BackgroundChanger/backGchanger.module.css diff --git a/src/components/Assgmnt2BackgroundChanger/index.js b/src/components/Assgmnt2_BackgroundChanger/index.js similarity index 100% rename from src/components/Assgmnt2BackgroundChanger/index.js rename to src/components/Assgmnt2_BackgroundChanger/index.js From 827d7f04b2f924fb5af5b6db2f5850506a99a01c Mon Sep 17 00:00:00 2001 From: tanishka Date: Sat, 30 Mar 2024 22:03:25 +0530 Subject: [PATCH 11/14] para generator done using recoile state management --- src/App.jsx | 6 +-- .../Assgmnt4_ParagraphGenerator/Paragraph.jsx | 23 +++++++++++ .../Assgmnt4_ParagraphGenerator/atom.js | 30 ++++++++++++++ .../Assgmnt4_ParagraphGenerator/index.js | 3 ++ .../paragraph.module.css | 39 +++++++++++++++++++ 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/components/Assgmnt4_ParagraphGenerator/Paragraph.jsx create mode 100644 src/components/Assgmnt4_ParagraphGenerator/atom.js create mode 100644 src/components/Assgmnt4_ParagraphGenerator/index.js create mode 100644 src/components/Assgmnt4_ParagraphGenerator/paragraph.module.css diff --git a/src/App.jsx b/src/App.jsx index 54b964d..61c6d46 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ import "./App.css"; import { RecoilRoot } from "recoil"; -import ReactElement from "./components/Assgmnt3_CustomReactElement/ReactElement"; +import Paragraph from "./components/Assgmnt4_ParagraphGenerator/Paragraph"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -10,10 +10,10 @@ function App() { return (
- +
); -} +} export default App; diff --git a/src/components/Assgmnt4_ParagraphGenerator/Paragraph.jsx b/src/components/Assgmnt4_ParagraphGenerator/Paragraph.jsx new file mode 100644 index 0000000..f0b4cef --- /dev/null +++ b/src/components/Assgmnt4_ParagraphGenerator/Paragraph.jsx @@ -0,0 +1,23 @@ +import { useRecoilValue, useRecoilState } from "recoil"; +import styles from "./paragraph.module.css"; +import { atomNumber, derivedState } from "./atom"; + +function Paragraph() { + const [number, setNumber] = useRecoilState(atomNumber); + const paragraph = useRecoilValue(derivedState); + return ( +
+

Para Generator

+ setNumber(e.target.value)} + /> + + +
{paragraph}
+
+ ); +} + +export default Paragraph; diff --git a/src/components/Assgmnt4_ParagraphGenerator/atom.js b/src/components/Assgmnt4_ParagraphGenerator/atom.js new file mode 100644 index 0000000..7e8952c --- /dev/null +++ b/src/components/Assgmnt4_ParagraphGenerator/atom.js @@ -0,0 +1,30 @@ +import { atom, selector } from "recoil"; + +export const atomNumber = atom({ + key: "atomStateNumber", + default: 0, +}); + +const words = [ + "loreum", + "ispesum", + "knights", + "arsenal", + "london", + "starlights", + "skills", + "success", +]; + +export const derivedState = selector({ + key: "pargraph_generator", + get: ({ get }) => { + const number = get(atomNumber); + let sentence = ``; + for (let i = 0; i < number; i++) { + const word = words[Math.floor(Math.random() * words.length)]; + sentence += word + " "; + } + return sentence; + }, +}); diff --git a/src/components/Assgmnt4_ParagraphGenerator/index.js b/src/components/Assgmnt4_ParagraphGenerator/index.js new file mode 100644 index 0000000..35c4cd1 --- /dev/null +++ b/src/components/Assgmnt4_ParagraphGenerator/index.js @@ -0,0 +1,3 @@ +export * from "./Paragraph"; + +export { default } from "./Paragraph"; diff --git a/src/components/Assgmnt4_ParagraphGenerator/paragraph.module.css b/src/components/Assgmnt4_ParagraphGenerator/paragraph.module.css new file mode 100644 index 0000000..41ca319 --- /dev/null +++ b/src/components/Assgmnt4_ParagraphGenerator/paragraph.module.css @@ -0,0 +1,39 @@ +.paragraphContainer { + + display: flex; + flex-direction: column; + align-items: center; + color: rgb(226, 197, 197); +} + +input { + margin-bottom: 1rem; + text-align: center; +} + + +button { + padding: 0.25rem 0.75rem; + cursor: pointer; + border: none; + border-radius: 11px; +} + +button:hover { + cursor: pointer; + background-color: rgb(219, 164, 26); + border: none; +} + + +section { + margin-top: 1rem; + color: rgb(219, 164, 26); + font-family: Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif; + padding: 2rem; + width: 350px; + line-height: 3ch; + word-spacing: 1ch; + letter-spacing: 0.2ch; + +} \ No newline at end of file From eb6e01407b0b637a5e8b1ff9b6a12769a162a59f Mon Sep 17 00:00:00 2001 From: tanishka Date: Sun, 31 Mar 2024 12:15:36 +0530 Subject: [PATCH 12/14] github profile assignment done --- src/App.jsx | 6 +-- .../GithubProfile.jsx | 39 +++++++++++++++++++ .../github.module.css | 38 ++++++++++++++++++ .../Assgmnt5_GithubProfileCard/index.js | 3 ++ .../Assgmnt5_GithubProfileCard/store/atom.js | 15 +++++++ 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/components/Assgmnt5_GithubProfileCard/GithubProfile.jsx create mode 100644 src/components/Assgmnt5_GithubProfileCard/github.module.css create mode 100644 src/components/Assgmnt5_GithubProfileCard/index.js create mode 100644 src/components/Assgmnt5_GithubProfileCard/store/atom.js diff --git a/src/App.jsx b/src/App.jsx index 61c6d46..a203b7c 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,7 @@ import "./App.css"; import { RecoilRoot } from "recoil"; -import Paragraph from "./components/Assgmnt4_ParagraphGenerator/Paragraph"; +import GithubProfile from "./components/Assgmnt5_GithubProfileCard/GithubProfile"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -10,10 +10,10 @@ function App() { return (
- +
); -} +} export default App; diff --git a/src/components/Assgmnt5_GithubProfileCard/GithubProfile.jsx b/src/components/Assgmnt5_GithubProfileCard/GithubProfile.jsx new file mode 100644 index 0000000..c7177ae --- /dev/null +++ b/src/components/Assgmnt5_GithubProfileCard/GithubProfile.jsx @@ -0,0 +1,39 @@ +/* eslint-disable react/prop-types */ +import styles from "./github.module.css"; + +import { useRecoilValueLoadable } from "recoil"; +import { atomGithubProfile } from "./store/atom"; + +function GithubProfile() { + return ( +
+ +
+ ); +} + +export default GithubProfile; + +function GithhubUser({ username }) { + const userContentLoadable = useRecoilValueLoadable( + atomGithubProfile(username) + ); + //avatar_url,name(username),followers + //userContentLoadable has state and contents, state has 3 values..hasValue, loading and hasError + const { avatar_url, name, followers } = userContentLoadable.contents; + + switch (userContentLoadable.state) { + case "hasValue": + return ( +
+ profile image +
{name}
+

Followers :{followers}

+
+ ); + case "loading": + return

Loading....

; + case "hasError": + throw new Error("Something has happend,kindly check the code once"); + } +} diff --git a/src/components/Assgmnt5_GithubProfileCard/github.module.css b/src/components/Assgmnt5_GithubProfileCard/github.module.css new file mode 100644 index 0000000..0268651 --- /dev/null +++ b/src/components/Assgmnt5_GithubProfileCard/github.module.css @@ -0,0 +1,38 @@ +* { + padding: 0; + margin: 0; + box-sizing: border-box; +} + +.githubProfContainer { + display: flex; + justify-content: center; + margin-top: 3rem; + padding: 0.25rem; +} + +.profile { + display: flex; + flex-direction: column; + align-items: center; + background-color: rgb(133, 209, 47); + width: 200px; + border-radius: 11px; + padding: 1rem; +} + +h5 { + margin-top: 11px; + font-size: larger; +} + +img { + height: 100px; + width: 100px; + object-fit: cover; + border-radius: 50%; +} + +p { + color: blue; +} \ No newline at end of file diff --git a/src/components/Assgmnt5_GithubProfileCard/index.js b/src/components/Assgmnt5_GithubProfileCard/index.js new file mode 100644 index 0000000..2846b0d --- /dev/null +++ b/src/components/Assgmnt5_GithubProfileCard/index.js @@ -0,0 +1,3 @@ +export * from "./GithubProfile"; + +export { default } from "./GithubProfile"; diff --git a/src/components/Assgmnt5_GithubProfileCard/store/atom.js b/src/components/Assgmnt5_GithubProfileCard/store/atom.js new file mode 100644 index 0000000..2ace460 --- /dev/null +++ b/src/components/Assgmnt5_GithubProfileCard/store/atom.js @@ -0,0 +1,15 @@ +import { atomFamily, selectorFamily } from "recoil"; + +export const atomGithubProfile = atomFamily({ + key: "github_profile", + + default: selectorFamily({ + key: "selectorFamily_github", + get: (username) => async () => { + const response = await fetch(`https://api.github.com/users/${username}`); + const data = await response.json(); + console.log(data); + return data; + }, + }), +}); From 9adf20b301895953a7ad5e00ba3a4012628634f0 Mon Sep 17 00:00:00 2001 From: tanishka Date: Mon, 1 Apr 2024 18:42:09 +0530 Subject: [PATCH 13/14] OTP assgnment work done --- package-lock.json | 56 +++++---- package.json | 2 +- src/App.jsx | 14 ++- src/components/Assgmnt6_OTPlogin/OtpLogin.jsx | 109 ++++++++++++++++++ src/components/Assgmnt6_OTPlogin/atom.js | 6 + src/components/Assgmnt6_OTPlogin/index.js | 3 + .../Assgmnt6_OTPlogin/otp.module.css | 75 ++++++++++++ 7 files changed, 235 insertions(+), 30 deletions(-) create mode 100644 src/components/Assgmnt6_OTPlogin/OtpLogin.jsx create mode 100644 src/components/Assgmnt6_OTPlogin/atom.js create mode 100644 src/components/Assgmnt6_OTPlogin/index.js create mode 100644 src/components/Assgmnt6_OTPlogin/otp.module.css diff --git a/package-lock.json b/package-lock.json index aecddd2..8ee3850 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.21.2", "recoil": "^0.7.7" }, "devDependencies": { @@ -22,6 +21,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "husky": "^9.0.11", + "react-router-dom": "^6.22.3", "vite": "^5.0.8" } }, @@ -930,9 +930,10 @@ } }, "node_modules/@remix-run/router": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz", - "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "dev": true, "engines": { "node": ">=14.0.0" } @@ -3383,11 +3384,12 @@ } }, "node_modules/react-router": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.2.tgz", - "integrity": "sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA==", + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "dev": true, "dependencies": { - "@remix-run/router": "1.14.2" + "@remix-run/router": "1.15.3" }, "engines": { "node": ">=14.0.0" @@ -3397,12 +3399,13 @@ } }, "node_modules/react-router-dom": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.2.tgz", - "integrity": "sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg==", + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "dev": true, "dependencies": { - "@remix-run/router": "1.14.2", - "react-router": "6.21.2" + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" }, "engines": { "node": ">=14.0.0" @@ -4698,9 +4701,10 @@ } }, "@remix-run/router": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz", - "integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==" + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "dev": true }, "@rollup/rollup-android-arm-eabi": { "version": "4.13.2", @@ -6446,20 +6450,22 @@ "dev": true }, "react-router": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.2.tgz", - "integrity": "sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA==", + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "dev": true, "requires": { - "@remix-run/router": "1.14.2" + "@remix-run/router": "1.15.3" } }, "react-router-dom": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.2.tgz", - "integrity": "sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg==", + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "dev": true, "requires": { - "@remix-run/router": "1.14.2", - "react-router": "6.21.2" + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" } }, "recoil": { diff --git a/package.json b/package.json index c3fcea9..e9e76b5 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.21.2", "recoil": "^0.7.7" }, "devDependencies": { @@ -25,6 +24,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "husky": "^9.0.11", + "react-router-dom": "^6.22.3", "vite": "^5.0.8" } } diff --git a/src/App.jsx b/src/App.jsx index a203b7c..48b8f3f 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,7 +1,10 @@ import "./App.css"; import { RecoilRoot } from "recoil"; -import GithubProfile from "./components/Assgmnt5_GithubProfileCard/GithubProfile"; +import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; +import OtpLogin, { + OTPINPUTScreen, +} from "./components/Assgmnt6_OTPlogin/OtpLogin"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -9,9 +12,12 @@ import GithubProfile from "./components/Assgmnt5_GithubProfileCard/GithubProfile function App() { return ( -
- -
+ + + } /> + } /> + +
); } diff --git a/src/components/Assgmnt6_OTPlogin/OtpLogin.jsx b/src/components/Assgmnt6_OTPlogin/OtpLogin.jsx new file mode 100644 index 0000000..8960c4f --- /dev/null +++ b/src/components/Assgmnt6_OTPlogin/OtpLogin.jsx @@ -0,0 +1,109 @@ +import React from "react"; +import styles from "./otp.module.css"; +import { Link } from "react-router-dom"; +import { useRecoilState } from "recoil"; +import { inputAtom } from "./atom"; + +function OtpLogin() { + return ( +
+ +
+ ); +} + +export default OtpLogin; + +function LoginScreen() { + const [inputNumber, setInputNumber] = useRecoilState(inputAtom); + + return ( +
alert("number has been submitted")} + > +

Login Via OTP

+ + setInputNumber(e.target.value)} + required={true} + name="mobileNumber" + id="mobileNumber" + pattern="[0-9]{10}" + placeholder={"Enter your Mobile Number"} + /> + + +
+ ); +} + +export function OTPINPUTScreen() { + const [focus, setFocus] = React.useState("otp-1"); + + const timerRef = React.useRef(null); + function handleChange(e) { + if (timerRef.current) { + window.clearTimeout(timerRef.current); + } + const containerRef = document.getElementById("digitContainer"); + const inputList = containerRef.querySelectorAll("input"); + + const arrayInputList = Array.from(inputList); + const indexTarget = arrayInputList.findIndex( + (item) => item.id === e.target.id + ); + if (indexTarget + 1 === arrayInputList.length) return; + + timerRef.current = setTimeout(() => { + arrayInputList[indexTarget + 1].focus(); + }, 250); + } + return ( + <> +
+

Login Via OTP

+
+ + + + +
+ + +
+ + ); +} diff --git a/src/components/Assgmnt6_OTPlogin/atom.js b/src/components/Assgmnt6_OTPlogin/atom.js new file mode 100644 index 0000000..3eafc93 --- /dev/null +++ b/src/components/Assgmnt6_OTPlogin/atom.js @@ -0,0 +1,6 @@ +import { atom } from "recoil"; + +export const inputAtom = atom({ + key: "inputMobileNumber", + default: 0, +}); diff --git a/src/components/Assgmnt6_OTPlogin/index.js b/src/components/Assgmnt6_OTPlogin/index.js new file mode 100644 index 0000000..49eab49 --- /dev/null +++ b/src/components/Assgmnt6_OTPlogin/index.js @@ -0,0 +1,3 @@ +export * from "./OtpLogin"; + +export { default } from "./OtpLogin"; diff --git a/src/components/Assgmnt6_OTPlogin/otp.module.css b/src/components/Assgmnt6_OTPlogin/otp.module.css new file mode 100644 index 0000000..7b343a8 --- /dev/null +++ b/src/components/Assgmnt6_OTPlogin/otp.module.css @@ -0,0 +1,75 @@ +.loginContainer { + + display: grid; + place-items: center; + margin-top: 15%; + padding: 1rem; +} + +.loginScreen { + display: flex; + flex-direction: column; + gap: 1rem; + flex: 1; + padding: 1rem; + background-color: rgb(19, 19, 19); + color: white; + border-radius: 11px; +} + +button { + width: fit-content; + margin: 0 auto; +} + + +.loginScreen { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 300px; + position: absolute; + top: 50%; + left: 40%; + transform: translateX(-50%); + transform: translateY(-50%); +} + +.otpDigitsContainer { + display: flex; + gap: 0.35rem; + +} + +.otpDigit { + + width: 50px; + padding: 0.75rem 0.5rem; + background: transparent; + border-radius: 11px; + +} + +.loginScreen button { + padding: 0.25rem; + width: 100px; + background-color: transparent; + color: white; + border: 1px solid white; + border-radius: 11px; + cursor: pointer; +} + +.link { + text-decoration: none; + color: white; +} + +.otpDigitsContainer input { + + color: yellow; + text-align: center; + font-size: 2rem; + +} \ No newline at end of file From 24a2b5a8c1d2bf36857d009e1372cf7b037e5944 Mon Sep 17 00:00:00 2001 From: tanishka Date: Tue, 2 Apr 2024 08:41:36 +0530 Subject: [PATCH 14/14] final assgnment done --- src/App.css | 5 +- src/App.jsx | 12 +--- .../Assgmnt7_BirthdayCards/Birthday.jsx | 54 +++++++++++++++ src/components/Assgmnt7_BirthdayCards/atom.js | 11 ++++ .../birthday.module.css | 66 +++++++++++++++++++ .../Assgmnt7_BirthdayCards/index.js | 2 + 6 files changed, 137 insertions(+), 13 deletions(-) create mode 100644 src/components/Assgmnt7_BirthdayCards/Birthday.jsx create mode 100644 src/components/Assgmnt7_BirthdayCards/atom.js create mode 100644 src/components/Assgmnt7_BirthdayCards/birthday.module.css create mode 100644 src/components/Assgmnt7_BirthdayCards/index.js diff --git a/src/App.css b/src/App.css index b864067..0842b98 100644 --- a/src/App.css +++ b/src/App.css @@ -1,4 +1,3 @@ body { - background-color: steelblue; - -} \ No newline at end of file + +} \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx index 48b8f3f..fa45716 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,10 +1,7 @@ import "./App.css"; import { RecoilRoot } from "recoil"; -import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; -import OtpLogin, { - OTPINPUTScreen, -} from "./components/Assgmnt6_OTPlogin/OtpLogin"; +import Birthday from "./components/Assgmnt7_BirthdayCards/Birthday"; //we can get the value of the selector function by using the useRecoilValue //useRecoilValue can take either an atom or the selector to return the value @@ -12,12 +9,7 @@ import OtpLogin, { function App() { return ( - - - } /> - } /> - - + ); } diff --git a/src/components/Assgmnt7_BirthdayCards/Birthday.jsx b/src/components/Assgmnt7_BirthdayCards/Birthday.jsx new file mode 100644 index 0000000..0c79ed4 --- /dev/null +++ b/src/components/Assgmnt7_BirthdayCards/Birthday.jsx @@ -0,0 +1,54 @@ +/* eslint-disable react/prop-types */ + +import styles from "./birthday.module.css"; +import { useRecoilState } from "recoil"; +import { nameAtom, showCardAtom } from "./atom"; + +function Birthday() { + const [name, setName] = useRecoilState(nameAtom); + const [show, setShow] = useRecoilState(showCardAtom); + const content = ( + <> + + On your special day, I wish you endless joy, laughter, and love. May + each moment be filled with happiness and may your heart be filled with + warmth. Happy Birthday {name}! + + + May each day be an opportunity for growth and may you achieve all that + you aspire for. Happy Birthday {name}! + + + Hey {name}, it's time to celebrate! Wishing you a birthday filled + with laughter, fun, and unforgettable memories. May your day be as + bright and colorful as you are. Happy Birthday! + + + ); + return ( +
+
+

Enter your Name

+ setName(e.target.value)} + /> + + +
+ + {show && name.length > 2 && content} +
+
+ ); +} + +export default Birthday; + +function BirthdayCard({ children }) { + return
{children}
; +} diff --git a/src/components/Assgmnt7_BirthdayCards/atom.js b/src/components/Assgmnt7_BirthdayCards/atom.js new file mode 100644 index 0000000..badc3ad --- /dev/null +++ b/src/components/Assgmnt7_BirthdayCards/atom.js @@ -0,0 +1,11 @@ +import { atom } from "recoil"; + +export const showCardAtom = atom({ + key: "showingBIrthdayCard", + default: false, +}); + +export const nameAtom = atom({ + key: "nameofBirthdayPerson", + default: "", +}); diff --git a/src/components/Assgmnt7_BirthdayCards/birthday.module.css b/src/components/Assgmnt7_BirthdayCards/birthday.module.css new file mode 100644 index 0000000..f3f26c6 --- /dev/null +++ b/src/components/Assgmnt7_BirthdayCards/birthday.module.css @@ -0,0 +1,66 @@ +* { + margin: 0; + padding: 0; +} + +.birthdayContainer { + color: white; + width: 500px; + height: 150px; + padding: 1.5rem 1.23rem; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + border-radius: 11px; + margin: 0 auto; + gap: 1rem; + font-weight: bolder; + background-color: rgba(33, 71, 138, 0.25); + backdrop-filter: blur(2px); + +} + +input { + width: 100%; + text-align: center; + padding: 0.25rem 0; + color: purple; + +} + +button { + padding: 0.5rem 0.5rem; + cursor: pointer; + background-color: darkblue; + color: white; + border: none; + border-radius: 11px; + +} + +input::placeholder { + font-size: xx-small; + font-weight: 100; +} + +.card { + + padding: 1rem 2rem; + border: 1px solid white; + background-color: rgba(98, 138, 33, 0.726); + margin-top: 1.25rem; + border-radius: 11px; + + +} + +.mainBackground { + background-color: steelblue; + background-image: url("https://images.unsplash.com/photo-1548567117-02328f050eaa?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"); + background-repeat: no-repeat; + background-size: cover; + height: 95vh; + width: 100vw; + padding-top: 2rem; +} \ No newline at end of file diff --git a/src/components/Assgmnt7_BirthdayCards/index.js b/src/components/Assgmnt7_BirthdayCards/index.js new file mode 100644 index 0000000..64af3a8 --- /dev/null +++ b/src/components/Assgmnt7_BirthdayCards/index.js @@ -0,0 +1,2 @@ +export * from "./Birthday"; +export { default } from "./Birthday";