@@ -12799,6 +12799,11 @@ | |||
"whatwg-fetch": "^3.4.1" | |||
} | |||
}, | |||
"react-circular-progressbar": { | |||
"version": "2.0.4", | |||
"resolved": "https://registry.npmjs.org/react-circular-progressbar/-/react-circular-progressbar-2.0.4.tgz", | |||
"integrity": "sha512-OfX0ThSxRYEVGaQSt0DlXfyl5w4DbXHsXetyeivmoQrh9xA9bzVPHNf8aAhOIiwiaxX2WYWpLDB3gcpsDJ9oww==" | |||
}, | |||
"react-dev-utils": { | |||
"version": "11.0.4", | |||
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", | |||
@@ -12,6 +12,7 @@ | |||
"@types/react-dom": "^17.0.8", | |||
"node-sass": "^6.0.1", | |||
"react": "^17.0.2", | |||
"react-circular-progressbar": "^2.0.4", | |||
"react-dom": "^17.0.2", | |||
"react-scripts": "4.0.3", | |||
"typescript": "^4.3.5", | |||
@@ -120,6 +120,10 @@ | |||
justify-content: center; | |||
margin-left: 1rem; | |||
&.expandButton { | |||
background-color: var(--red); | |||
} | |||
svg { | |||
fill: white; | |||
width: 1.2rem; | |||
@@ -154,48 +158,116 @@ $block-padding: 0 2rem; | |||
&:nth-child(3) .icon { | |||
background-color: var(--blue); | |||
} | |||
.icon { | |||
width: 4rem; | |||
height: 4rem; | |||
background-color: var(--grey); | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
border-radius: 50%; | |||
} | |||
svg { | |||
fill: white; | |||
width: 3rem; | |||
} | |||
.icon { | |||
width: 4rem; | |||
height: 4rem; | |||
background-color: var(--grey); | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
border-radius: 50%; | |||
svg { | |||
fill: white; | |||
width: 3rem; | |||
} | |||
} | |||
.info { | |||
width: calc(100% - 5rem); | |||
.info { | |||
width: calc(100% - 5rem); | |||
label, span { | |||
display: block; | |||
} | |||
label, span { | |||
display: block; | |||
} | |||
label { | |||
font-size: 1.2rem; | |||
color: var(--black); | |||
font-weight: 700; | |||
} | |||
label { | |||
font-size: 1.2rem; | |||
color: var(--black); | |||
font-weight: 700; | |||
} | |||
span { | |||
font-size: 1rem; | |||
color: var(--grey); | |||
font-weight: 500; | |||
} | |||
span { | |||
font-size: 1rem; | |||
color: var(--grey); | |||
font-weight: 500; | |||
} | |||
} | |||
} | |||
.Shelf { | |||
padding: #{$block-padding}; | |||
margin: 2rem 0; | |||
ul { | |||
list-style: none; | |||
display: grid; | |||
grid-template-columns: 1fr 1fr; | |||
grid-gap: 2rem; | |||
padding: 2rem 0; | |||
} | |||
[class*="CircularProgressbar"] { | |||
width: 100%; | |||
height: 100%; | |||
} | |||
.progress { | |||
position: relative; | |||
width: 7rem; | |||
height: 7rem; | |||
.text { | |||
position: absolute; | |||
left: 0; | |||
top: 0; | |||
height: 100%; | |||
display: flex; | |||
align-items: center; | |||
justify-content: center; | |||
width: 100%; | |||
text-align: center; | |||
font-size: 1.4rem; | |||
color: white; | |||
font-weight: 600; | |||
} | |||
} | |||
li { | |||
border-radius: 3rem; | |||
padding: 1.5rem; | |||
&:nth-child(1) { | |||
background-color: var(--orange); | |||
} | |||
&:nth-child(2) { | |||
background-color: var(--blue); | |||
} | |||
&:nth-child(3) { | |||
background-color: var(--red); | |||
} | |||
&:nth-child(4) { | |||
background-color: var(--teal); | |||
} | |||
} | |||
h5 { | |||
font-size: 1.2rem; | |||
color: white; | |||
font-weight: 600; | |||
margin-top: 1rem; | |||
} | |||
p { | |||
font-size: 1.1rem; | |||
color: white; | |||
&:last-child { | |||
margin-top: 1rem; | |||
} | |||
} | |||
} |
@@ -16,6 +16,9 @@ import { ReactComponent as PersonSpeakerIcon } from '../../assets/icons/user-spe | |||
import { ReactComponent as BrainIcon } from '../../assets/icons/bx-brain.svg'; | |||
import { ReactComponent as InternBadge } from '../../assets/icons/intern-badge.svg'; | |||
import { CircularProgressbar, buildStyles } from 'react-circular-progressbar'; | |||
export const Home: React.FC = () => { | |||
return <section> | |||
@@ -94,7 +97,7 @@ export const Home: React.FC = () => { | |||
<BookShelfIcon /> | |||
Active Shelves | |||
</h4> | |||
<button> | |||
<button className={styles.expandButton}> | |||
<ExpandIcon /> | |||
</button> | |||
<button> | |||
@@ -103,25 +106,81 @@ export const Home: React.FC = () => { | |||
</header> | |||
<ul> | |||
<li> | |||
<div className={styles.progress}></div> | |||
<div className={styles.progress}> | |||
<CircularProgressbar value={30} strokeWidth={7} | |||
styles={{ | |||
path: { | |||
stroke: 'white', | |||
strokeLinecap: 'round', | |||
}, | |||
trail: { | |||
stroke: 'rgba(255, 255, 255, 0.25)', | |||
strokeLinecap: 'round', | |||
}} | |||
} /> | |||
<span className={styles.text}> 30% </span> | |||
</div> | |||
<h5> All Words </h5> | |||
<p> Vocabulary </p> | |||
<p> 1.2K Words </p> | |||
</li> | |||
<li> | |||
<div className={styles.progress}></div> | |||
<div className={styles.progress}> | |||
<CircularProgressbar value={50} strokeWidth={7} | |||
styles={{ | |||
path: { | |||
stroke: 'white', | |||
strokeLinecap: 'round', | |||
}, | |||
trail: { | |||
stroke: 'rgba(255, 255, 255, 0.25)', | |||
strokeLinecap: 'round', | |||
}} | |||
} /> | |||
<span className={styles.text}> 50% </span> | |||
</div> | |||
<h5> IELTS Fundamentals </h5> | |||
<p> IELTS </p> | |||
<p> 250 Words </p> | |||
</li> | |||
<li> | |||
<div className={styles.progress}></div> | |||
<div className={styles.progress}> | |||
<CircularProgressbar value={10} strokeWidth={7} | |||
styles={{ | |||
path: { | |||
stroke: 'white', | |||
strokeLinecap: 'round', | |||
}, | |||
trail: { | |||
stroke: 'rgba(255, 255, 255, 0.25)', | |||
strokeLinecap: 'round', | |||
}} | |||
} /> | |||
<span className={styles.text}> 10% </span> | |||
</div> | |||
<h5> GRE Fundamentals </h5> | |||
<p> GRE </p> | |||
<p> 456 Words </p> | |||
</li> | |||
<li> | |||
<div className={styles.progress}></div> | |||
<div className={styles.progress}> | |||
<CircularProgressbar value={25} strokeWidth={7} | |||
styles={{ | |||
path: { | |||
stroke: 'white', | |||
strokeLinecap: 'round', | |||
}, | |||
trail: { | |||
stroke: 'rgba(255, 255, 255, 0.25)', | |||
strokeLinecap: 'round', | |||
}} | |||
} /> | |||
<span className={styles.text}> 25% </span> | |||
</div> | |||
<h5> Sapiens </h5> | |||
<p> Book </p> | |||
<p> 125 Words </p> | |||