diff --git a/package.json b/package.json
index ab20b1c..00c931d 100644
--- a/package.json
+++ b/package.json
@@ -22,15 +22,18 @@
"@mui/material": "^5.6.4",
"@typescript-eslint/eslint-plugin": "^5.22.0",
"@typescript-eslint/parser": "^5.22.0",
+ "chart.js": "^3.7.1",
"eslint-plugin-react": "^7.29.4",
"eslit": "^6.0.0",
"next": "12.1.6",
"react": "18.1.0",
+ "react-chartjs-2": "^4.1.0",
"react-dom": "18.1.0",
"react-icons": "^4.3.1",
"styled-components": "^5.3.5"
},
"devDependencies": {
+ "@types/chartjs": "^0.0.31",
"@types/node": "^17.0.31",
"@types/react": "^18.0.8",
"@types/styled-components": "^5.1.25",
diff --git a/pages/_app.tsx b/pages/_app.tsx
index b81b5d2..edfa29c 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,13 +1,18 @@
import React from 'react'
-import '../styles/globals.css'
+import '../styles/globals.ts'
import { AppProps } from 'next/app'
+import Sidebar from '../src/components/sidebar/Sidebar'
+import { GlobalStyle } from '../styles/globals'
+import { AppView } from '../styles/app/AppView'
function MyApp({ Component, pageProps }: AppProps) {
return (
- <>
+
+
+
- >
+
)
}
diff --git a/pages/_document.tsx b/pages/_document.tsx
index bc5322b..a05c9c1 100644
--- a/pages/_document.tsx
+++ b/pages/_document.tsx
@@ -35,8 +35,11 @@ export default class MyDocument extends Document {
-
+
+
+
+
diff --git a/pages/areaTest.tsx b/pages/areaTest.tsx
new file mode 100644
index 0000000..03ffc5b
--- /dev/null
+++ b/pages/areaTest.tsx
@@ -0,0 +1,10 @@
+import React from 'react'
+import BasicButton from '../src/components/buttons/basicButton/BasicButton'
+import Graph from '../src/components/graph/Graph'
+
+export default function areaTest() {
+ return (
+ //
+
+ )
+}
diff --git a/pages/dashboard.tsx b/pages/dashboard.tsx
new file mode 100644
index 0000000..7758e39
--- /dev/null
+++ b/pages/dashboard.tsx
@@ -0,0 +1,27 @@
+import React from 'react'
+
+import { DashboardView } from '../styles/layouts/Dashboard/DashboardView'
+import MapCard from '../src/components/mapCard/MapCard'
+import GraphCard from '../src/components/graph/graphCard/GraphCard'
+
+export default function Dashboard() {
+ return (
+
+ Visão Geral
+ Bem Vindo a Smart Energia
+
+
+
+
+ )
+}
diff --git a/pages/index.tsx b/pages/index.tsx
index d7f0907..14bfc65 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -46,22 +46,20 @@ export default function Home() {
return (
-
-
-
+
diff --git a/public/assets/bannerTemplate.png b/public/assets/bannerTemplate.png
new file mode 100644
index 0000000..c9b75c7
Binary files /dev/null and b/public/assets/bannerTemplate.png differ
diff --git a/public/assets/hamburgerModal.svg b/public/assets/hamburgerModal.svg
new file mode 100644
index 0000000..0027fb2
--- /dev/null
+++ b/public/assets/hamburgerModal.svg
@@ -0,0 +1,5 @@
+
diff --git a/public/assets/logo.svg b/public/assets/logo.svg
new file mode 100644
index 0000000..2309ada
--- /dev/null
+++ b/public/assets/logo.svg
@@ -0,0 +1,9 @@
+
diff --git a/public/copel.svg b/public/copel.svg
new file mode 100644
index 0000000..d95856e
--- /dev/null
+++ b/public/copel.svg
@@ -0,0 +1,9 @@
+
diff --git a/public/graphLineIcon.svg b/public/graphLineIcon.svg
new file mode 100644
index 0000000..25ecb93
--- /dev/null
+++ b/public/graphLineIcon.svg
@@ -0,0 +1,10 @@
+
diff --git a/public/mapSample.svg b/public/mapSample.svg
new file mode 100644
index 0000000..804924b
--- /dev/null
+++ b/public/mapSample.svg
@@ -0,0 +1,9 @@
+
diff --git a/public/moneyIcon.svg b/public/moneyIcon.svg
new file mode 100644
index 0000000..6ffff61
--- /dev/null
+++ b/public/moneyIcon.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/txt.txt b/src/assets/txt.txt
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/banner/Banner.tsx b/src/components/banner/Banner.tsx
new file mode 100644
index 0000000..f97b093
--- /dev/null
+++ b/src/components/banner/Banner.tsx
@@ -0,0 +1,24 @@
+import React from 'react'
+import Image from 'next/image'
+
+import { BannerView } from './BannerView'
+
+interface BannerInterface {
+ title: string,
+ subtitle: string,
+ imgSource: string
+}
+
+export default function Banner({ title, subtitle, imgSource }: BannerInterface) {
+ return (
+
+ {/* */}
+
+
+
+
+ )
+}
diff --git a/src/components/banner/BannerView.ts b/src/components/banner/BannerView.ts
new file mode 100644
index 0000000..6054c72
--- /dev/null
+++ b/src/components/banner/BannerView.ts
@@ -0,0 +1,30 @@
+import styled from 'styled-components'
+
+export const BannerView = styled.div`
+ position: relative;
+ width: 100%;
+ height: 19rem;
+
+ .gradient {
+ position: absolute;
+ width: 100%;
+ height: 19rem;
+
+ background: linear-gradient(0deg, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2)), rgba(7, 23, 100, 0.6);
+ opacity: 0.9;
+
+ z-index: 1;
+ }
+
+ .text {
+ position: relative;
+ margin: 82px 0 0 20px;
+
+ font-family: 'Poppins';
+ font-style: normal;
+
+ color: white;
+
+ z-index: 2;
+ }
+`
diff --git a/src/components/buttons/basicButton/BasicButton.tsx b/src/components/buttons/basicButton/BasicButton.tsx
new file mode 100644
index 0000000..fd5f3b1
--- /dev/null
+++ b/src/components/buttons/basicButton/BasicButton.tsx
@@ -0,0 +1,12 @@
+import React from 'react'
+import { BasicButtonView } from './BasicButtonView'
+
+interface BasicButtonInterface {
+ title: string
+}
+
+export default function BasicButton({ title }: BasicButtonInterface) {
+ return (
+ {title}
+ )
+}
diff --git a/src/components/buttons/basicButton/BasicButtonView.ts b/src/components/buttons/basicButton/BasicButtonView.ts
new file mode 100644
index 0000000..5c66b88
--- /dev/null
+++ b/src/components/buttons/basicButton/BasicButtonView.ts
@@ -0,0 +1,21 @@
+import styled from 'styled-components'
+
+export const BasicButtonView = styled.button`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ width: 120px;
+ height: 45px;
+
+ background: #254F7F;
+ border-radius: 8px;
+ border-style: none;
+
+ font-family: 'Poppins';
+ font-size: 16px;
+ /* identical to box height */
+
+
+ color: #FFFFFF;
+`
diff --git a/src/components/buttons/loginButton/LoginButton.tsx b/src/components/buttons/loginButton/LoginButton.tsx
new file mode 100644
index 0000000..37d374a
--- /dev/null
+++ b/src/components/buttons/loginButton/LoginButton.tsx
@@ -0,0 +1,14 @@
+import React from 'react'
+import { LoginButtonView } from './LoginButtonView'
+
+interface LoginButtonInterface {
+ title: string
+}
+
+export default function LoginButton({ title }: LoginButtonInterface) {
+ return (
+
+ {title}
+
+ )
+}
diff --git a/src/components/buttons/loginButton/LoginButtonView.ts b/src/components/buttons/loginButton/LoginButtonView.ts
new file mode 100644
index 0000000..337672b
--- /dev/null
+++ b/src/components/buttons/loginButton/LoginButtonView.ts
@@ -0,0 +1,19 @@
+import styled from 'styled-components'
+
+export const LoginButtonView = styled.button`
+ width: 100%;
+ height: 95px;
+
+ border-radius: 8px;
+ background: linear-gradient(88.75deg, #254F7F 0.18%, #888888 99.28);
+
+ font-family: 'Nunito Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-size: 32px;
+ line-height: 44px;
+ text-align: center;
+ letter-spacing: 0.03em;
+
+ color: #FFFFFF;
+`
diff --git a/src/components/graph/Graph.tsx b/src/components/graph/Graph.tsx
new file mode 100644
index 0000000..16e0d45
--- /dev/null
+++ b/src/components/graph/Graph.tsx
@@ -0,0 +1,63 @@
+import React, { useState, useEffect } from 'react'
+
+import { Bar, Line } from 'react-chartjs-2';
+import {
+ Chart as ChartJS,
+ CategoryScale,
+ LinearScale,
+ BarElement,
+ Title,
+ Tooltip,
+ Legend
+} from 'chart.js'
+
+ChartJS.register(
+ CategoryScale,
+ LinearScale,
+ BarElement,
+ Title,
+ Tooltip,
+ Legend
+)
+
+export default function Graph() {
+
+ const [ graphData, setGraphData ] = useState({
+ labels: [],
+ datasets: [],
+ })
+ const [ graphOptions, setGraphOptions ] = useState({})
+
+ useEffect(() => {
+ setGraphData({
+ labels: ['John', 'kevin', 'george', 'michael', 'oreo'],
+ datasets: [{
+ label: "Whom'st let the dogsout",
+ data: [12, 55, 34, 120, 720],
+ borderColor: "rgb(53, 162, 235)",
+ backgroundColor: "rgb(53, 162, 235, 0.4)"
+ }]
+ })
+ setGraphOptions({
+ responsive: true,
+ plugins: {
+ legend: {
+ position: 'top'
+ },
+ title: {
+ display: true,
+ text: "Whom'st let the dogsout"
+ }
+ }
+ })
+ }, [])
+
+
+ return (
+
+ )
+}
diff --git a/src/components/graph/graphCard/GraphCard.tsx b/src/components/graph/graphCard/GraphCard.tsx
new file mode 100644
index 0000000..a1c7f4e
--- /dev/null
+++ b/src/components/graph/graphCard/GraphCard.tsx
@@ -0,0 +1,69 @@
+import React from 'react'
+import Link from 'next/link';
+
+import ToggleButton from '@mui/material/ToggleButton';
+import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
+
+import { GraphCardView } from './GraphCardView';
+
+interface GraphCardInterface {
+ title: string,
+ subtitle: string,
+ consumption?: number,
+ className?: string
+}
+
+export default function GraphCard({ title, subtitle, consumption, className }: GraphCardInterface) {
+ const [timeCourse, setTimeCourse] = React.useState('left');
+
+ const handleAlignment = (
+ event: React.MouseEvent,
+ newAlignment: string | null,
+ ) => {
+ setTimeCourse(newAlignment);
+ };
+
+ return (
+
+
+
+
+
{title}
+ {subtitle}
+
+
+
+ Mensal
+
+
+ Semanal
+
+
+ Hoje
+
+
+
+ {
+ consumption?
+
+ :
+ <>>
+ }
+
+
+
+ )
+}
diff --git a/src/components/graph/graphCard/GraphCardView.ts b/src/components/graph/graphCard/GraphCardView.ts
new file mode 100644
index 0000000..f6b5e03
--- /dev/null
+++ b/src/components/graph/graphCard/GraphCardView.ts
@@ -0,0 +1,108 @@
+import styled from 'styled-components';
+
+export const GraphCardView = styled.article`
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ flex-direction: column;
+
+ width: 100%;
+ /* max-width: ; */
+ height: fit-content;
+ min-height: 34.5rem;
+
+ background: #F8F8F8;
+ box-shadow: 0 0 11px rgba(0, 0, 0, 0.2) ;
+ -webkit-box-shadow: 0 0 11px rgba(0, 0, 0, 0.2) ;
+ -moz-box-shadow: 0 0 11px rgba(0, 0, 0, 0.2) ;
+ border-radius: 20px;
+
+ background-color: #FFFFFF;
+
+ .graph {
+ width: 90%;
+ min-height: 300px;
+
+ background-color: black;
+
+ margin-bottom: 20px;
+ }
+
+ a {
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 24px;
+
+ color: #2F4CDD;
+ }
+
+ .statusDot {
+ max-width: 11px;
+ max-height: 11px;
+ min-width: 11px;
+ min-height: 11px;
+
+ border-radius: 100%;
+
+ background-color: #2BC155;
+ }
+
+ .content {
+ width: 90%;
+
+ margin-top: 20px;
+ }
+
+ .header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ width: 100%;
+ }
+
+ aside {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+
+ flex-direction: row;
+
+ width: 100%;
+ height: 4rem;
+
+ margin: 30px 0 30px 0;
+
+ border-radius: 12px;
+
+ padding: 0 12px 0 12px;
+
+ background-color: #E9FFEF;
+
+ div {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ width: 40%;
+ min-width: 50px;
+ }
+
+ .info {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ width: 87px;
+ height: 44px;
+
+ border-radius: 12px;
+
+ background-color: #2BC155;
+ color: white;
+ }
+ }
+
+`
diff --git a/src/components/mapCard/MapCard.tsx b/src/components/mapCard/MapCard.tsx
new file mode 100644
index 0000000..f308a4a
--- /dev/null
+++ b/src/components/mapCard/MapCard.tsx
@@ -0,0 +1,27 @@
+import React from 'react'
+import Image from 'next/image'
+import { MapCardView } from './style'
+
+interface MapCardInterface {
+ title: string,
+ subtitle: string,
+ statistic: string,
+ imgSource: string,
+}
+
+export default function MapCard({ title, subtitle, statistic, imgSource }: MapCardInterface) {
+
+ return (
+
+
+
+
{title}
+
{subtitle}
+
+
+ {statistic}
+
+
+
+ )
+}
diff --git a/src/components/mapCard/style.ts b/src/components/mapCard/style.ts
new file mode 100644
index 0000000..f33a672
--- /dev/null
+++ b/src/components/mapCard/style.ts
@@ -0,0 +1,27 @@
+import styled from 'styled-components'
+
+export const MapCardView = styled.figure`
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ flex-direction: row;
+
+ margin-right: 25px;
+
+ span {
+ margin-bottom: 25px;
+ }
+
+ div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ flex-direction: column;
+
+ article {
+ display: flex;
+ }
+ }
+`
diff --git a/src/components/sidebar/Sidebar.tsx b/src/components/sidebar/Sidebar.tsx
new file mode 100644
index 0000000..a632be8
--- /dev/null
+++ b/src/components/sidebar/Sidebar.tsx
@@ -0,0 +1,42 @@
+import Image from 'next/image'
+import React, { useState } from 'react'
+import { SidebarView } from './SidebarView'
+
+export default function Sidebar() {
+ const [ economiaDrawer, setEconomiaDrawer ] = useState(false)
+
+ const [ viewModal, setViewModal ] = useState(false)
+
+ return (
+
+ setViewModal(!viewModal)} >
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/components/sidebar/SidebarView.ts b/src/components/sidebar/SidebarView.ts
new file mode 100644
index 0000000..31c5720
--- /dev/null
+++ b/src/components/sidebar/SidebarView.ts
@@ -0,0 +1,142 @@
+import styled from 'styled-components'
+
+interface SidebarViewInterface {
+ economiaDrawer: boolean | null,
+ modalOpen: boolean | null
+}
+
+export const SidebarView = styled.nav`
+ position: relative;
+
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+
+ flex-direction: column;
+
+ width: 20%;
+
+ margin: 0;
+ padding: 0;
+
+ box-shadow: 18px 4px 35px rgba(0, 0, 0, 0.02);
+
+ background-color: #FFFFFF;
+
+ ul {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ flex-direction: column;
+
+ list-style: none;
+
+ width: 100%;
+
+ li {
+ display: flex;
+ align-items: center;
+ justify-content: flex-start;
+
+ width: 100%;
+ height: 60px;
+
+ font-style: normal;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 27px;
+ /* identical to box height */
+
+ color: #969BA0;
+
+ cursor: pointer;
+ }
+
+ .economiaDrawer {
+ display: ${props => props.economiaDrawer? 'block' : 'none'};
+ }
+ }
+
+ aside {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ flex-wrap: wrap;
+
+ width: 90%;
+ height: 190px;
+
+ background: linear-gradient(155.54deg, #254F7F 15.63%, #9C9C9C 136.34%);
+ border-radius: 26px;
+
+ p {
+ text-align: center;
+ width: 80%;
+
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 600;
+ font-size: 14px;
+ line-height: 21px;
+ text-align: center;
+
+ color: #FFFFFF;
+ }
+
+ div {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ width: 80%;
+ height: 60px;
+
+ background: #FFFFFF;
+ border-radius: 8px;
+ }
+ }
+
+ .drawer {
+ margin-left: 20px;
+ }
+
+ .hamburger {
+ display: none;
+ }
+
+ @media (max-width: 1196px) {
+ align-items: flex-start;
+
+ width: 100%;
+ /* height: 0%; */
+ /* height: ${props => props.modalOpen? '100%' : null}; */
+
+ padding: 18px;
+
+ border-bottom: solid black 1px;
+
+ z-index: 2;
+
+ .hamburger {
+ display: flex;
+
+ cursor: pointer;
+
+ z-index: 2;
+ }
+ .imageNext {
+ display: none;
+ }
+ ul {
+ display: ${props => props.modalOpen? 'block' : 'none'};
+ min-height: 100vh;
+
+ background-color: #FFF;
+ }
+ aside {
+ display: none;
+ }
+ }
+`
diff --git a/src/components/txt.txt b/src/components/txt.txt
new file mode 100644
index 0000000..e69de29
diff --git a/styles/app/AppView.ts b/styles/app/AppView.ts
new file mode 100644
index 0000000..f20a055
--- /dev/null
+++ b/styles/app/AppView.ts
@@ -0,0 +1,9 @@
+import styled from 'styled-components'
+
+export const AppView = styled.main`
+ display: flex;
+
+ @media (max-width: 1196px) {
+ flex-direction: column;
+ }
+`
diff --git a/styles/globals.css b/styles/globals.css
deleted file mode 100644
index e5e2dcc..0000000
--- a/styles/globals.css
+++ /dev/null
@@ -1,16 +0,0 @@
-html,
-body {
- padding: 0;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
- Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
-}
-
-a {
- color: inherit;
- text-decoration: none;
-}
-
-* {
- box-sizing: border-box;
-}
diff --git a/styles/globals.ts b/styles/globals.ts
new file mode 100644
index 0000000..4b3e974
--- /dev/null
+++ b/styles/globals.ts
@@ -0,0 +1,28 @@
+import { createGlobalStyle } from 'styled-components'
+
+export const GlobalStyle = createGlobalStyle`
+ body {
+ margin: 0;
+ padding: 0;
+ font-family: 'Poppins';
+ }
+
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ * {
+ box-sizing: border-box;
+ }
+`;
+
+// html,
+// body {
+// padding: 0;
+// margin: 0;
+// font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+// Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
+// }
+
+
diff --git a/styles/layouts/Dashboard/DashboardView.ts b/styles/layouts/Dashboard/DashboardView.ts
index e69de29..28837b2 100644
--- a/styles/layouts/Dashboard/DashboardView.ts
+++ b/styles/layouts/Dashboard/DashboardView.ts
@@ -0,0 +1,114 @@
+import styled from 'styled-components'
+
+export const DashboardView = styled.main`
+ * {
+ margin: 0;
+ padding: 0;
+ }
+
+ display: flex;
+ justify-content: center;
+ align-items: flex-start;
+
+ flex-wrap: wrap;
+
+ flex-direction: column;
+
+ width: 100%;
+
+ padding: 30px;
+
+ span {
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 500;
+ font-size: 16px;
+ line-height: 24px;
+ }
+
+ h4 {
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 600;
+ font-size: 21px;
+ line-height: 32px;
+ }
+
+ h1 {
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 600;
+ font-size: 28px;
+ line-height: 42px;
+ }
+
+ p {
+ font-family: 'Poppins';
+ font-style: normal;
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 24px;
+ }
+
+ .cardsSection {
+ display: flex;
+ justify-content: space-evenly;
+ align-items: center;
+
+ flex-wrap: wrap;
+
+ box-shadow: 0px 0px 15px -3px rgba(0,0,0,0.1);
+ border-radius: 10px;
+
+ width: 100%;
+ height: fit-content;
+
+ margin: 2rem 0 2rem 0;
+ }
+
+ .dashboard {
+ display: grid;
+
+ grid-template-columns: 50% 50% 100%;
+ grid-template-rows: 50% 50%;
+
+ gap: 30px;
+
+ width: 99%;
+
+ padding-right: 20px;
+
+ .footerGraph {
+ grid-row-start: 2;
+
+ grid-column-start: 1;
+ grid-column-end: 3;
+ }
+ }
+
+ @media (max-width: 1195px) {
+ /* align-items: center; */
+ width: 100%;
+ padding: 30px;
+ margin: 0;
+
+ .dashboard {
+ display: flex;
+
+ padding: 0;
+ margin: 0;
+
+ justify-content: center;
+ align-items: center;
+
+ flex-wrap: wrap;
+
+ grid-template-columns: 50% 50%;
+
+ grid-auto-rows: 1;
+ grid-auto-columns: 1;
+
+ width: 100%;
+ }
+ }
+`
diff --git a/yarn.lock b/yarn.lock
index bf36460..6e9008c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -575,6 +575,11 @@
resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0"
integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==
+"@types/chartjs@^0.0.31":
+ version "0.0.31"
+ resolved "https://registry.yarnpkg.com/@types/chartjs/-/chartjs-0.0.31.tgz#b16a687eaad3ea3e5cd3e961aee5a28e47b57949"
+ integrity sha512-eF1AgrIO0qP9KJYwM2dTKL2pczTjiLa0hfmZdQfKiqFq5WIvFTKPn1gkgADitF5sT4byEyq4EFdMVvuPIk6zeQ==
+
"@types/hoist-non-react-statics@*":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
@@ -954,6 +959,11 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chart.js@^3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada"
+ integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==
+
clean-stack@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
@@ -2352,6 +2362,11 @@ queue-microtask@^1.2.2:
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+react-chartjs-2@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-4.1.0.tgz#2a123df16d3a987c54eb4e810ed766d3c03adf8d"
+ integrity sha512-AsUihxEp8Jm1oBhbEovE+w50m9PVNhz1sfwEIT4hZduRC0m14gHWHd0cUaxkFDb8HNkdMIGzsNlmVqKiOpU74g==
+
react-dom@18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f"