diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..6c4516e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true + } \ No newline at end of file diff --git a/README.md b/README.md index a77b4ce..2db285a 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,66 @@ -# 2์ฃผ์ฐจ ๋ฏธ์ : React-Todo +## ๐ย ๋ฐฐํฌ ๋งํฌ -# ์๋ก +[https://react-todo-19th-psi.vercel.app/](https://react-todo-19th-psi.vercel.app/) -์๋ ํ์ธ์ ๐๐ป 19๊ธฐ ํ๋ก ํธ์๋ ์ด์์ง **๋ณ์งํ**์ ๋๋ค. +## ๐ถ๏ธย ๊ธฐ๋ฅ๊ตฌํ -๋ค๋ค 1์ฃผ์ฐจ ๋ฏธ์ Vanilla Todo ๋ง๋์๋๋ผ ์๊ณ ๋ง์ผ์ จ์ต๋๋ค! 1์ฃผ์ฐจ ๋ฏธ์ ์ ํตํด ์ฌ๋ฌ๋ถ๋ค๊ป์ ๋ณธ๊ฒฉ์ ์ธ React ์ฌ์ฉ์ ์์ Vanilla JS๋ก SPA๋ฅผ ๋ง๋ค๋์ ๋ถํธํ ์ ์ ๋๋ผ์ จ์ ๊ฒ ์ด๋ผ ์๊ฐํฉ๋๋ค. + -๊ทธ๋ฆฌํ์ฌ ์ด๋ฒ ๋ฏธ์ ์, 1์ฃผ์ฐจ ์คํฐ์ ๋ฏธ์ ์ผ๋ก ์ฃผ์ด์ง Todo list ๋ง๋ค๊ธฐ๋ฅผ **React**๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ฒ ์ ๋๋ค! -๊ธฐ์กด์ ๋ฆฌ์กํธ๋ฅผ ์ ์์๋ ๋ถ๋ค๊ป๋, ์กฐ๊ธ ๋ ํจ์ธ์ ์ธ ๋์์ธ ํจํด์ ๋ํด ๊ณ ๋ฏผํ ์ ์๋ ์ฃผ์ฐจ๊ฐ ๋ ๊ฒ์ด๊ณ , ๋ฆฌ์กํธ๋ฅผ ์ ๋๋ก ์ ํด๋ณด์ง ๋ชปํ์ ๋ถ๋ค๊ป๋ ๊ธฐ์กด์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์กํธ๋ก ํฌํ ํ๋ ๊ณผ์ ์ ํตํด ์ ํ๋ก ํธ์๋ ์์ฅ์ ๋ฆฌ์กํธ๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๊ณ , ๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์๋ค์ด ์ ๋ฐ๋๋ผ์ ๋นํด ํจ์จ์ ์ธ์ง ๊บ ๋ซ๋ ์ฃผ์ฐจ๊ฐ ๋ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค. +- todo ์ถ๊ฐํ๊ธฐ +- local storage ๊ตฌํ +- check๋ฒํผ ํด๋ฆญ์ todo โ done์ผ๋ก ์ด๋ +- delete๋ฒํผ ํด๋ฆญ์ local storage์์ ์ญ์ +- text overflow ๊ด๋ฆฌ +- scroll ๊ฐ๋ฅ -๋น๊ต์ ๊ฐ๋ฒผ์ด ๋ฏธ์ ์ธ ๋งํผ ์ฝ๋๋ฅผ ์ง๋ ๋ฐ ์์ด ์ฌ๋ฌ๋ถ์ **์ฐฝ์์ฑ**์ ์ถฉ๋ถํ ๋ฐํํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค. _โ์๋ํ๊ธฐ๋ง ํ๋ฉด ๋๋ ๊ฒ๋ณด๋ค ๊ฐ์ ์ฝ๋๋ฅผ ์ง๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ์๊ณผ ํจํด์ ๋ํด ๋ง์ด ๊ณ ๋ฏผํด๋ณด์๊ณ , ๋ณธ์ธ์ด ์์ฑํ ์ ์๋ ๊ฐ์ฅ ์ฐฝ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ จ์ผ๋ฉด ํฉ๋๋ค.โ_ ์ฌ๋ฌ๋ถ์ด ๋ฏธ์ ์ํ์ ํ๋ ๊ณผ์ ์์ ํ ์๊ฐ๊ณผ ๊ณ ๋ฏผ๋งํผ ์คํฐ๋์์ ๋ ๋ง์ ๊ฒ์ ์ป์ด๊ฐ์ค ์ ์์ ๊ฑฐ๋ผ ๊ธฐ๋ํฉ๋๋ค! +## ๐ฉโ๐ปย ๋๋์ -๋งํ๋ ๋ถ๋ถ์ด ์๋๋ผ๋ ์ฐ์ ์ค์ค๋ก ๊ณต๋ถํ๊ณ ์ฐพ์๋ณด๋ฉด์ ๋ฏธ์ ์ ์งํํ๋ ๋ฐฉ์์ ๊ถ๊ณ ๋๋ฆฌ์ง๋ง, ๋ฏธ์ ๊ณผ ๊ด๋ จํ์ฌ ์ด์์ง์ ๋์์ด ํ์ํ์๋ค๋ฉด ์ผ๋ง๋ ์ง ์ฌ๋ Q&A ์ฑ๋์ด๋ ํ๋ก ํธ์๋ ์นดํก๋ฐฉ์ ์ง๋ฌธ์ ๋จ๊ฒจ ์ฃผ์ธ์! +์ง๋ ๋ฏธ์ ์์ local storage๋ฅผ ํฌํจํด์ ์ฌ๋ฌ๊ฐ์ง ๊ตฌํํ์ง ๋ชปํด ์์ฌ์ ๋ ์ ์ ๋ง์ด ๋ณด์ํ๊ณ ์ ๋ ธ๋ ฅํ์ต๋๋ค..! local storage๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋๊น ๋ฐฐ์ด ํํ๋ฅผ ๊ฐ๊ณตํ๋ ๊ฒ์ด ๋ง์ด ์ด๋ ค์์ ํค๋งค๋ค ๋ณด๋ ์๊ฐ์ด ๋ถ์กฑํด์ ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ง์ด ์ฐธ๊ณ ํ์ต๋๋ค. ์ฌ์ ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ์ ๋ ์ง์ค ํด์ผ๊ฒ ๋ค๊ณ ๋ค์งํ์ต๋๋ค. ๋ฆฌ์กํธ๊ฐ ๋ ํธํ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ hook๊ณผ ์นํด์ง์ง ๋ชปํด์์ธ์ง ์คํ๋ ค ๋ ์ด๋ ค์ ๋ ๋ฏธ์ ์ด์์ต๋๋ค..๐ฅน -# ๋ฏธ์ +## ๐ปย ์ด๋ ค์ ๋์ -## ์์ +1. deleteTodo() ๊ฐ toggleTodo() ์ดํ์ ๋ถ๋ ค์ค๋ฉด ์๋ฌ๊ฐ ๋จ +deleteTodo ํจ์๊ฐ filter๋ฅผ ํตํด ์๋กญ๊ฒ ๋ฐฐ์ด์ ๋ฐํํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ด ํจ์๊ฐ ๋จผ์ ์ค๋ฉด undefined๊ฐ ๋ธ. +๋ฐ๋ผ์ useEffect๋ฅผ ํตํด ์ง์ ์ ์ดํด ์ค ์ ์์ผ๋ฉด ๋ ์ข์์๊ฑฐ๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ ํํ ๊ตฌํ์ ํ์ง ๋ชปํด ์๊ฐ์ ๋ ํด๋ณด์์ผ ํ ๊ฒ ๊ฐ๋ค. ๋ฐฐ์ด ์์ฒด๋ฅผ todolist์ ๋ค์ด๊ฐ ๊ฒ๊ณผ donelist์ ๋ค์ด๊ฐ๊ฒ์ผ๋ก ๋๋์ด์ ์์ ๋ถ๋ฆฌ๋ ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ๋ ๊ณ ๋ คํด ๋ดค์ง๋ง, ๋ก์ปฌ์คํ ๋ฆฌ์ง ํฌ๊ธฐ ์์ฒด๊ฐ ์์์ ํจ์จ์ ์ด์ง ์๋ค๊ณ ์๊ฐํจ. +2. deleteTodoํจ์์์ ์ง์ ๋ฐฐ์ด ์ธ๋ฑ์ค๋ฅผ ์ฐพ์์ sliceํ๋ ๋ฐฉ๋ฒ๋ ๊ณ ๋ฏผํด๋ณด๊ณ ์ง์ ๊ตฌํํด ๋ณด์์ง๋ง, ์ธ๋ฑ์ค๋ก ์ฐพ๊ฒ๋๋ฉด ๋งค๋ฒ ๋ง์ดํ ๋ ๋ ๋ง๋ค id ๊ฐ์ด ์ผ์นํ๋ ๊ฒ์ ์ฐพ๊ณ , ๋ ์ธ๋ฑ์ค ๊ฐ์ ๋งค๋ฒ ๊ณ์ฐํ๊ฒ ๋์ด ์ฌ๋ฌ๋ฒ์ ์์ฐจํ์์ ํ๊ฒ๋๋ฏ๋ก ํจ์จ์ฑ์ด ๋จ์ด์ง๋ค๊ณ ์๊ฐํจ. +3. ์์ง props์ ์นํด์ง์ง ๋ชปํด์ ToDo ์ปดํฌ๋ํธ์ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ชฐ์๋ฃ๊ณ ์์ ์ปดํฌ๋ํธ์ ํ๋ํ๋ props๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ๋ง ์ผ์ผ๋, ์ข๋ ํจ์จ์ ์ธ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ๊ณ ๋ฏผํ๊ณ ๋ฐฐ์นํ์ฌ ํ ์ปดํฌ๋ํธ์ ํ๋์ ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ ์ ์๊ฒ ์ฌ์ฌ์ฉ์ฑ์ด ์ข์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ผ๊ฒ ๋ค๊ณ ๋ฐ์ฑํจ. +4. ๋ง์ html์์ react๋ก ๋์ด๊ฐ๋ ์ต์ํ์ง ์์๋ค. useState ๋ฟ ์๋๋ผ useEffect๋ก๋ ๊ด๋ฆฌ ํ ์ ์์์ผ๋ฉด ํจ์ฌ ์ข์์ ๊ฒ ๊ฐ๋ค. +5. ์ฌ์ํ ๋ถ๋ถ์ด์ง๋ง, ๋ ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ด ์ฐ์ด๋ moment.js๋ ์ ์์ฐ์ด๋ ์ถ์ธ์ด๊ณ ํจ์ฌ ๊ฐ๋ฒผ์ด days ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค. ํฌ๋งท ๋ณํ๋ ์ด๋ ค์ ๋๋ฐ days๋ ํ๊ตญ์ด๋ ์ง์ํ๊ธฐ ๋๋ฌธ์ days github ๋ฅผ ์ฐธ๊ณ ํด์ ํฌ๋งทํ๋ฉด ์ ์ฉํ๋ค. -- [๋ฆฌ์กํธ ํฌ๋ ์์](https://react-todo-18th-lemon.vercel.app/) +## ๐ย key questions -## ๋ฏธ์ ๋ชฉํ + -## Key Questions + -- 1์ฃผ์ฐจ ๋ฏธ์ ์ ๊ฒฐ๊ณผ๋ฌผ์ ๊ทธ๋๋ก React๋ก ๊ตฌํํฉ๋๋ค. (โผ๏ธ todo / done ๊ฐ์ ์์ง ๋ง์ธ์ โผ๏ธ) -- Functional Components๋ฅผ ์ฌ์ฉํฉ๋๋ค. -- React Hooks๋ง์ ์ฌ์ฉํด ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. -- (์ด๋ฒ์ฃผ๋ Redux, MobX, Recoil, SWR๋ฑ์ ์ธ๋ถ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋ฏธ์ ์ํ์ ์ง์ฅ์ด ์์ต๋๋ค.) + ---- + diff --git a/package-lock.json b/package-lock.json index e523af2..f327cb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,15 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "dayjs": "^1.11.10", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "styled-components": "^6.1.8", "web-vitals": "^2.1.4" + }, + "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -643,9 +648,17 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, "engines": { "node": ">=6.9.0" }, @@ -1888,6 +1901,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -2283,6 +2307,24 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", + "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4534,6 +4576,11 @@ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" }, + "node_modules/@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, "node_modules/@types/testing-library__jest-dom": { "version": "5.14.9", "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", @@ -6037,6 +6084,14 @@ "node": ">= 6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -6469,6 +6524,14 @@ "postcss": "^8.4" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", @@ -6659,6 +6722,16 @@ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "1.0.0-alpha.37", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", @@ -6922,6 +6995,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -15998,6 +16076,11 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -16530,6 +16613,70 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-components": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz", + "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.1", + "@emotion/unitless": "0.8.0", + "@types/stylis": "4.2.0", + "css-to-react-native": "3.2.0", + "csstype": "3.1.2", + "postcss": "8.4.31", + "shallowequal": "1.1.0", + "stylis": "4.3.1", + "tslib": "2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -16545,6 +16692,11 @@ "postcss": "^8.2.15" } }, + "node_modules/stylis": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", + "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", diff --git a/package.json b/package.json index 6c9c71f..3bec54f 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,11 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "dayjs": "^1.11.10", "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "5.0.1", + "styled-components": "^6.1.8", "web-vitals": "^2.1.4" }, "scripts": { @@ -34,5 +36,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "@babel/plugin-proposal-private-property-in-object": "^7.21.11" } } diff --git a/public/img/screenshot.png b/public/img/screenshot.png new file mode 100644 index 0000000..939945b Binary files /dev/null and b/public/img/screenshot.png differ diff --git a/public/img/state.png b/public/img/state.png new file mode 100644 index 0000000..e3c7c5e Binary files /dev/null and b/public/img/state.png differ diff --git a/public/img/virtualDom.png b/public/img/virtualDom.png new file mode 100644 index 0000000..bad16d2 Binary files /dev/null and b/public/img/virtualDom.png differ diff --git a/src/App.js b/src/App.js deleted file mode 100644 index 3b90819..0000000 --- a/src/App.js +++ /dev/null @@ -1,9 +0,0 @@ -function App() { - return ( -