From dffdab7139cf6fb0c221f72255ad4281e6c4a944 Mon Sep 17 00:00:00 2001 From: Ehsan Date: Tue, 10 Sep 2024 02:00:41 +0330 Subject: [PATCH] design sidebar & head layout & page dashboard --- app/component/CustomTable.js | 15 +- app/panel/page.js | 13 + components/icons/ArrowDownP.js | 11 + components/icons/ArrowLeftBlueP.js | 9 + components/icons/ArrowLeftP.js | 10 + components/icons/CalendarP.js | 10 + components/icons/CalendarTickGreenP.js | 11 + components/icons/CardOrangeP.js | 11 + components/icons/CategoryP.js | 12 + components/icons/LocationP.js | 10 + components/icons/LogoPanel.js | 17 + components/icons/LogoutOrangeP.js | 11 + components/icons/MoonP.js | 9 + components/icons/NotificationP.js | 11 + components/icons/PeopleBlueP.js | 14 + components/icons/ProfileAddP.js | 10 + components/icons/ProfileCircleP.js | 10 + components/icons/SearchHeaderP.js | 10 + components/icons/SettingP.js | 10 + components/icons/WarnP.js | 10 + components/layoutPanel/header/Icons.js | 36 ++ components/layoutPanel/header/Search.js | 54 ++ components/layoutPanel/header/index.js | 18 + components/layoutPanel/index.js | 32 + components/layoutPanel/sidebar/Links.js | 47 ++ components/layoutPanel/sidebar/index.js | 30 + .../layoutPanel/userDetail/Activities.js | 32 + components/layoutPanel/userDetail/Date.js | 14 + components/layoutPanel/userDetail/Head.js | 43 ++ components/layoutPanel/userDetail/index.js | 21 + components/panel/Cards.js | 36 ++ components/panel/amountOfIncome/Chart.js | 66 ++ components/panel/amountOfIncome/Head.js | 47 ++ components/panel/amountOfIncome/index.js | 13 + components/panel/index.js | 15 + components/panel/list/Table.js | 70 ++ components/panel/list/index.js | 23 + data/information.json | 84 +++ package-lock.json | 608 +++++++++++++----- package.json | 7 +- public/assets/images/user.png | Bin 0 -> 2208 bytes 41 files changed, 1350 insertions(+), 170 deletions(-) create mode 100644 app/panel/page.js create mode 100644 components/icons/ArrowDownP.js create mode 100644 components/icons/ArrowLeftBlueP.js create mode 100644 components/icons/ArrowLeftP.js create mode 100644 components/icons/CalendarP.js create mode 100644 components/icons/CalendarTickGreenP.js create mode 100644 components/icons/CardOrangeP.js create mode 100644 components/icons/CategoryP.js create mode 100644 components/icons/LocationP.js create mode 100644 components/icons/LogoPanel.js create mode 100644 components/icons/LogoutOrangeP.js create mode 100644 components/icons/MoonP.js create mode 100644 components/icons/NotificationP.js create mode 100644 components/icons/PeopleBlueP.js create mode 100644 components/icons/ProfileAddP.js create mode 100644 components/icons/ProfileCircleP.js create mode 100644 components/icons/SearchHeaderP.js create mode 100644 components/icons/SettingP.js create mode 100644 components/icons/WarnP.js create mode 100644 components/layoutPanel/header/Icons.js create mode 100644 components/layoutPanel/header/Search.js create mode 100644 components/layoutPanel/header/index.js create mode 100644 components/layoutPanel/index.js create mode 100644 components/layoutPanel/sidebar/Links.js create mode 100644 components/layoutPanel/sidebar/index.js create mode 100644 components/layoutPanel/userDetail/Activities.js create mode 100644 components/layoutPanel/userDetail/Date.js create mode 100644 components/layoutPanel/userDetail/Head.js create mode 100644 components/layoutPanel/userDetail/index.js create mode 100644 components/panel/Cards.js create mode 100644 components/panel/amountOfIncome/Chart.js create mode 100644 components/panel/amountOfIncome/Head.js create mode 100644 components/panel/amountOfIncome/index.js create mode 100644 components/panel/index.js create mode 100644 components/panel/list/Table.js create mode 100644 components/panel/list/index.js create mode 100644 data/information.json create mode 100644 public/assets/images/user.png diff --git a/app/component/CustomTable.js b/app/component/CustomTable.js index 712bf80..5ccbefb 100644 --- a/app/component/CustomTable.js +++ b/app/component/CustomTable.js @@ -1,9 +1,16 @@ import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from '@mui/material' -function CustomTable({ tableHead, centerTable, children }) { +function CustomTable({ tableHead, zeroRadius, centerTable, children }) { return ( - - + +
i === idx) ? '!text-center' : '!text-start'} + ${centerTable.includes(idx) ? '!text-center' : '!text-start'} `} > {item} diff --git a/app/panel/page.js b/app/panel/page.js new file mode 100644 index 0000000..e34e175 --- /dev/null +++ b/app/panel/page.js @@ -0,0 +1,13 @@ +import PanelPage from "@/components/panel"; +import LayoutPanel from "@/components/layoutPanel"; +import Information from '../../data/information.json'; + +function Panel() { + return ( + + + + ) +} + +export default Panel \ No newline at end of file diff --git a/components/icons/ArrowDownP.js b/components/icons/ArrowDownP.js new file mode 100644 index 0000000..1edb626 --- /dev/null +++ b/components/icons/ArrowDownP.js @@ -0,0 +1,11 @@ +function ArrowDownP({ data }) { + return ( +
+ + + +
+ ) +} + +export default ArrowDownP \ No newline at end of file diff --git a/components/icons/ArrowLeftBlueP.js b/components/icons/ArrowLeftBlueP.js new file mode 100644 index 0000000..26cc99f --- /dev/null +++ b/components/icons/ArrowLeftBlueP.js @@ -0,0 +1,9 @@ +function ArrowLeftBlueP() { + return ( + + + + ) +} + +export default ArrowLeftBlueP \ No newline at end of file diff --git a/components/icons/ArrowLeftP.js b/components/icons/ArrowLeftP.js new file mode 100644 index 0000000..9c8ff1e --- /dev/null +++ b/components/icons/ArrowLeftP.js @@ -0,0 +1,10 @@ +function ArrowLeftP() { + return ( + + + + + ) +} + +export default ArrowLeftP \ No newline at end of file diff --git a/components/icons/CalendarP.js b/components/icons/CalendarP.js new file mode 100644 index 0000000..a89340a --- /dev/null +++ b/components/icons/CalendarP.js @@ -0,0 +1,10 @@ +function CalendarP() { + return ( + + + + + ) +} + +export default CalendarP \ No newline at end of file diff --git a/components/icons/CalendarTickGreenP.js b/components/icons/CalendarTickGreenP.js new file mode 100644 index 0000000..3da9260 --- /dev/null +++ b/components/icons/CalendarTickGreenP.js @@ -0,0 +1,11 @@ +function CalendarTickGreenP() { + return ( + + + + + + ) +} + +export default CalendarTickGreenP \ No newline at end of file diff --git a/components/icons/CardOrangeP.js b/components/icons/CardOrangeP.js new file mode 100644 index 0000000..c1051cf --- /dev/null +++ b/components/icons/CardOrangeP.js @@ -0,0 +1,11 @@ +function CardOrangeP() { + return ( + + + + + + ) +} + +export default CardOrangeP \ No newline at end of file diff --git a/components/icons/CategoryP.js b/components/icons/CategoryP.js new file mode 100644 index 0000000..08bec21 --- /dev/null +++ b/components/icons/CategoryP.js @@ -0,0 +1,12 @@ +function CategoryP() { + return ( + + + + + + + ) +} + +export default CategoryP \ No newline at end of file diff --git a/components/icons/LocationP.js b/components/icons/LocationP.js new file mode 100644 index 0000000..ec061d6 --- /dev/null +++ b/components/icons/LocationP.js @@ -0,0 +1,10 @@ +function LocationP() { + return ( + + + + + ) +} + +export default LocationP \ No newline at end of file diff --git a/components/icons/LogoPanel.js b/components/icons/LogoPanel.js new file mode 100644 index 0000000..dd2f1e7 --- /dev/null +++ b/components/icons/LogoPanel.js @@ -0,0 +1,17 @@ +function LogoPanel() { + return ( + + + + + + + + + + + + ) +} + +export default LogoPanel \ No newline at end of file diff --git a/components/icons/LogoutOrangeP.js b/components/icons/LogoutOrangeP.js new file mode 100644 index 0000000..7c30842 --- /dev/null +++ b/components/icons/LogoutOrangeP.js @@ -0,0 +1,11 @@ +function LogoutOrangeP() { + return ( + + + + + + ) +} + +export default LogoutOrangeP \ No newline at end of file diff --git a/components/icons/MoonP.js b/components/icons/MoonP.js new file mode 100644 index 0000000..240abf4 --- /dev/null +++ b/components/icons/MoonP.js @@ -0,0 +1,9 @@ +function MoonP() { + return ( + + + + ) +} + +export default MoonP \ No newline at end of file diff --git a/components/icons/NotificationP.js b/components/icons/NotificationP.js new file mode 100644 index 0000000..5027e2d --- /dev/null +++ b/components/icons/NotificationP.js @@ -0,0 +1,11 @@ +function NotificationP() { + return ( + + + + + + ) +} + +export default NotificationP \ No newline at end of file diff --git a/components/icons/PeopleBlueP.js b/components/icons/PeopleBlueP.js new file mode 100644 index 0000000..cbbcc9d --- /dev/null +++ b/components/icons/PeopleBlueP.js @@ -0,0 +1,14 @@ +function PeopleBlueP() { + return ( + + + + + + + + + ) +} + +export default PeopleBlueP \ No newline at end of file diff --git a/components/icons/ProfileAddP.js b/components/icons/ProfileAddP.js new file mode 100644 index 0000000..46c7548 --- /dev/null +++ b/components/icons/ProfileAddP.js @@ -0,0 +1,10 @@ +function ProfileAddP() { + return ( + + + + + ) +} + +export default ProfileAddP \ No newline at end of file diff --git a/components/icons/ProfileCircleP.js b/components/icons/ProfileCircleP.js new file mode 100644 index 0000000..f8840fd --- /dev/null +++ b/components/icons/ProfileCircleP.js @@ -0,0 +1,10 @@ +function ProfileCircleP() { + return ( + + + + + ) +} + +export default ProfileCircleP \ No newline at end of file diff --git a/components/icons/SearchHeaderP.js b/components/icons/SearchHeaderP.js new file mode 100644 index 0000000..0d001c3 --- /dev/null +++ b/components/icons/SearchHeaderP.js @@ -0,0 +1,10 @@ +function SearchHeaderP() { + return ( + + + + + ) +} + +export default SearchHeaderP \ No newline at end of file diff --git a/components/icons/SettingP.js b/components/icons/SettingP.js new file mode 100644 index 0000000..98d8658 --- /dev/null +++ b/components/icons/SettingP.js @@ -0,0 +1,10 @@ +function SettingP() { + return ( + + + + + ) +} + +export default SettingP \ No newline at end of file diff --git a/components/icons/WarnP.js b/components/icons/WarnP.js new file mode 100644 index 0000000..19ad9f5 --- /dev/null +++ b/components/icons/WarnP.js @@ -0,0 +1,10 @@ +function WarnP() { + return ( + + + + + ) +} + +export default WarnP \ No newline at end of file diff --git a/components/layoutPanel/header/Icons.js b/components/layoutPanel/header/Icons.js new file mode 100644 index 0000000..09a7299 --- /dev/null +++ b/components/layoutPanel/header/Icons.js @@ -0,0 +1,36 @@ +import { Button } from '@mui/material' +import React from 'react' +import MoonP from '@/components/icons/MoonP' +import NotificationP from '@/components/icons/NotificationP' +import SettingP from '@/components/icons/SettingP' + +function Icons() { + return ( +
+ + + +
+ ) +} + +export default Icons \ No newline at end of file diff --git a/components/layoutPanel/header/Search.js b/components/layoutPanel/header/Search.js new file mode 100644 index 0000000..8740695 --- /dev/null +++ b/components/layoutPanel/header/Search.js @@ -0,0 +1,54 @@ +import SearchHeaderP from "@/components/icons/SearchHeaderP" +import { InputAdornment, TextField } from "@mui/material" + +function Search() { + return ( + + + + ), + }} + sx={{ + '& .MuiOutlinedInput-input': { + paddingTop: '9px !important', + paddingBottom: '9px !important' + }, + '& .MuiFormLabel-root': { + top: '-4px !important' + }, + '& .MuiInputBase-root': { + borderRadius: '8px', + }, + '& .MuiOutlinedInput-input': { + paddingTop: '9px !important', + paddingBottom: '9px !important' + }, + '& .MuiOutlinedInput-notchedOutline': { + border: '1px solid #EFEFEF !important', + transition: '0.3s all !important' + }, + '& .MuiOutlinedInput-root': { + '&.MuiInputBase-root,.MuiFormLabel-root ': { + color: '#7E7E7E !important', + fontsize: '14px', + fontweight: '400', + }, + '&:hover .MuiOutlinedInput-notchedOutline': { + border: '1px solid #EFEFEF !important', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline': { + border: '1px solid #5559CE !important', + transition: '0.3s all !important' + }, + }, + }} + /> + ) +} + +export default Search \ No newline at end of file diff --git a/components/layoutPanel/header/index.js b/components/layoutPanel/header/index.js new file mode 100644 index 0000000..81aef0e --- /dev/null +++ b/components/layoutPanel/header/index.js @@ -0,0 +1,18 @@ +import Icons from "./Icons" +import Search from "./Search" + +function index() { + return ( +
+ + +
+ ) +} + +export default index \ No newline at end of file diff --git a/components/layoutPanel/index.js b/components/layoutPanel/index.js new file mode 100644 index 0000000..bd22dc7 --- /dev/null +++ b/components/layoutPanel/index.js @@ -0,0 +1,32 @@ +'use client'; + +import { useEffect } from "react"; +import Header from './header'; +import Sidebar from './sidebar'; +import UserDetail from './userDetail'; + +// AOS +import Aos from "aos"; +import "aos/dist/aos.css"; + +function LayoutPanel({ children, data }) { + + useEffect(() => { + Aos.init({ duration: 1000 }); + }, []) + + return ( +
+ +
+
+
+ {children} +
+
+ +
+ ) +} + +export default LayoutPanel \ No newline at end of file diff --git a/components/layoutPanel/sidebar/Links.js b/components/layoutPanel/sidebar/Links.js new file mode 100644 index 0000000..7e72ee6 --- /dev/null +++ b/components/layoutPanel/sidebar/Links.js @@ -0,0 +1,47 @@ +import CalendarP from "@/components/icons/CalendarP"; +import CategoryP from "@/components/icons/CategoryP"; +import ProfileAddP from "@/components/icons/ProfileAddP"; +import ProfileCircleP from "@/components/icons/ProfileCircleP"; +import { Button } from "@mui/material"; +import { useState } from "react"; + +function Links() { + + const list = [ + { name: 'دشبورد', icon: }, + { name: 'حساب کاربری', icon: }, + { name: 'اضافه کردن پزشک', icon: }, + { name: 'نوبت ها', icon: } + ]; + + const [value, setValue] = useState(0); + + return ( +
    + {list.map((item, idx) => ( +
  • + +
  • + ))} +
+ ) +} + +export default Links \ No newline at end of file diff --git a/components/layoutPanel/sidebar/index.js b/components/layoutPanel/sidebar/index.js new file mode 100644 index 0000000..04926e8 --- /dev/null +++ b/components/layoutPanel/sidebar/index.js @@ -0,0 +1,30 @@ +import LogoutOrangeP from "@/components/icons/LogoutOrangeP"; +import LogoPanel from "@/components/icons/LogoPanel"; +import { Button } from "@mui/material"; +import Links from "./Links"; + +function Sidebar() { + return ( + + ) +} + +export default Sidebar \ No newline at end of file diff --git a/components/layoutPanel/userDetail/Activities.js b/components/layoutPanel/userDetail/Activities.js new file mode 100644 index 0000000..866a4d6 --- /dev/null +++ b/components/layoutPanel/userDetail/Activities.js @@ -0,0 +1,32 @@ +import WarnP from "@/components/icons/WarnP" + +function Activities({ data }) { + return ( +
+

فعالیت های امروز

+
    + {data.todays_activities.map((item, idx) => ( +
  • +
    +
    +
    + +
    +

    {item.text}

    +
    +

    {item.time}

    +
    + {data.todays_activities.length > idx + 1 && ( + + )} +
  • + ))} +
+
+ ) +} + +export default Activities \ No newline at end of file diff --git a/components/layoutPanel/userDetail/Date.js b/components/layoutPanel/userDetail/Date.js new file mode 100644 index 0000000..1c40fc0 --- /dev/null +++ b/components/layoutPanel/userDetail/Date.js @@ -0,0 +1,14 @@ +import { DatePicker } from "jalaali-react-date-picker" + +function Date() { + return ( +
+ } + prevIcon={<>} + /> +
+ ) +} + +export default Date \ No newline at end of file diff --git a/components/layoutPanel/userDetail/Head.js b/components/layoutPanel/userDetail/Head.js new file mode 100644 index 0000000..0aa19ef --- /dev/null +++ b/components/layoutPanel/userDetail/Head.js @@ -0,0 +1,43 @@ +import ArrowLeftBlueP from '@/components/icons/ArrowLeftBlueP' +import LocationP from '@/components/icons/LocationP' +import { Button } from '@mui/material' +import Image from 'next/image' +import React from 'react' + +function Head({ data }) { + return ( +
+ +

{data.name}

+
+ +

نماینده شهر اهواز

+
+
+
+

کل بیماران

+

{data.all_patients}

+
+ +
+

کل نوبت ها

+

{data.total_turns}

+
+
+ +
+ ) +} + +export default Head \ No newline at end of file diff --git a/components/layoutPanel/userDetail/index.js b/components/layoutPanel/userDetail/index.js new file mode 100644 index 0000000..4ddb670 --- /dev/null +++ b/components/layoutPanel/userDetail/index.js @@ -0,0 +1,21 @@ +import Head from "./Head"; +import Date from "./Date"; +import Activities from "./Activities"; + +function UserDetail({ data }) { + return ( +
+
+ + + + +
+
+ ) +} + +export default UserDetail \ No newline at end of file diff --git a/components/panel/Cards.js b/components/panel/Cards.js new file mode 100644 index 0000000..01d2e4b --- /dev/null +++ b/components/panel/Cards.js @@ -0,0 +1,36 @@ +import CalendarTickGreenP from "../icons/CalendarTickGreenP" +import CardOrangeP from "../icons/CardOrangeP" +import PeopleBlueP from "../icons/PeopleBlueP" + +function Cards({ data }) { + + const list = [ + { text: 'تعداد کل بیماران', bg_color: 'bg-[#E5E9FF]', value: data.number_of_patients, label: 'نفر', icon: }, + { text: 'نوبت های امروز', bg_color: 'bg-[rgba(20,204,38,0.14)]', value: data.today_turns, label: 'نوبت', icon: }, + { text: 'پرداختی ها', bg_color: 'bg-[#FFD8C5]', value: data.payments, label: 'تومان', icon: } + ]; + + return ( +
    + {list.map((item, idx) => ( +
  • +
    + {item.icon} +
    +
    +

    {item.text}

    +

    + {item.value} + {item.label} +

    +
    +
  • + ))} +
+ ) +} + +export default Cards \ No newline at end of file diff --git a/components/panel/amountOfIncome/Chart.js b/components/panel/amountOfIncome/Chart.js new file mode 100644 index 0000000..d8ed57a --- /dev/null +++ b/components/panel/amountOfIncome/Chart.js @@ -0,0 +1,66 @@ +'use client'; + +import { LineChart, lineElementClasses } from "@mui/x-charts" + +function Chart({ data }) { + return ( + + + + + + + + + ) +} + +export default Chart \ No newline at end of file diff --git a/components/panel/amountOfIncome/Head.js b/components/panel/amountOfIncome/Head.js new file mode 100644 index 0000000..3342748 --- /dev/null +++ b/components/panel/amountOfIncome/Head.js @@ -0,0 +1,47 @@ +'use client' + +import ArrowDownP from "@/components/icons/ArrowDownP"; +import { MenuItem, Select } from "@mui/material"; + +function Head() { + + const list = [ + { id: 1, text: 'سال 1402' }, + { id: 2, text: 'سال 1403' }, + { id: 3, text: 'سال 1404' }, + { id: 4, text: 'سال 1405' }, + { id: 5, text: 'سال 1406' }, + { id: 6, text: 'سال 1407' } + ] + + return ( +
+

میزان درآمد

+ +
+ ) +} + +export default Head \ No newline at end of file diff --git a/components/panel/amountOfIncome/index.js b/components/panel/amountOfIncome/index.js new file mode 100644 index 0000000..d3033a9 --- /dev/null +++ b/components/panel/amountOfIncome/index.js @@ -0,0 +1,13 @@ +import Chart from "./Chart" +import Head from "./Head" + +function AmountOfIncome({ data }) { + return ( +
+ + +
+ ) +} + +export default AmountOfIncome \ No newline at end of file diff --git a/components/panel/index.js b/components/panel/index.js new file mode 100644 index 0000000..507ab67 --- /dev/null +++ b/components/panel/index.js @@ -0,0 +1,15 @@ +import AmountOfIncome from "./amountOfIncome"; +import Cards from "./Cards"; +import List from "./list"; + +function PanelPage({ data }) { + return ( +
+ + + +
+ ) +} + +export default PanelPage \ No newline at end of file diff --git a/components/panel/list/Table.js b/components/panel/list/Table.js new file mode 100644 index 0000000..f7ed1ee --- /dev/null +++ b/components/panel/list/Table.js @@ -0,0 +1,70 @@ +import CustomTable from "@/app/component/CustomTable" +import CircularLoading from "@/app/component/loading/Circular" +import CustomLoading from "@/app/component/loading/Custom" +import TextLoading from "@/app/component/loading/Text" +import { TableCell, TableRow } from "@mui/material" +import Image from "next/image" + +function Table({ data }) { + + const tableHead = ['ردیف', 'نام پزشک', 'تخصص', 'تاریخ', 'ساعت', 'تعدد نوبت']; + const centerTable = [0, 4]; + + return ( + + {data.list_of_doctors_appointments.map((row, idx) => ( + + + + {idx + 1} + + + +
+ + + + + {row.name} + +
+
+ + + {row.expertise} + + + + + {row.date} + + + + + {row.hour} + + + + + {row.number_of_turns} + + +
+ ))} +
+ ) +} + +export default Table \ No newline at end of file diff --git a/components/panel/list/index.js b/components/panel/list/index.js new file mode 100644 index 0000000..20e4d91 --- /dev/null +++ b/components/panel/list/index.js @@ -0,0 +1,23 @@ +import { Button } from "@mui/material" +import ArrowLeftP from "../../icons/ArrowLeftP" +import Table from "./Table" + +function List({ data }) { + return ( +
+
+

لیست نوبت های پزشکان

+ +
+
+ + ) +} + +export default List \ No newline at end of file diff --git a/data/information.json b/data/information.json new file mode 100644 index 0000000..681da38 --- /dev/null +++ b/data/information.json @@ -0,0 +1,84 @@ +{ + "name": "مهران امینی", + "detail": "نماینده شهر اهواز", + "all_patients": 532, + "total_turns": 2103, + "src": "/assets/images/doctor.png", + "todays_activities": [ + { + "text": "3 پزشک اضافه شد.", + "time": "23 دقیقه پیش" + }, + { + "text": "12 نفر نوبت گرفته اند.", + "time": "23 دقیقه پیش" + } + ], + "number_of_patients": 2163, + "today_turns": 53, + "payments": 12625000, + "list_of_doctors_appointments": [ + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + }, + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + }, + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + }, + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + }, + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + }, + { + "name": "دنیا خلیلی", + "expertise": "دندان پزشکی", + "date": "1403-03-27", + "image": "/assets/images/user.png", + "hour": "15:30", + "number_of_turns": 12 + } + ], + "chart_amount_income": [ + 6000, + 16000, + 6500, + 5000, + 9000, + 5500, + 11000, + 13000, + 18500, + 5000, + 7000, + 5000 + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1ae9de8..49f3823 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,12 @@ "version": "0.1.0", "dependencies": { "@emotion/cache": "^11.11.0", - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.5", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", "@material-ui/core": "^4.11.2", - "@mui/material": "^5.14.17", + "@mui/material": "^5.16.7", "@mui/styled-engine-sc": "^6.0.0-alpha.18", + "@mui/x-charts": "^7.16.0", "aos": "^2.3.4", "date-fns": "^3.6.0", "i": "^0.3.7", @@ -1981,9 +1982,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2310,15 +2311,15 @@ } }, "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", @@ -2327,32 +2328,42 @@ "stylis": "4.2.0" } }, + "node_modules/@emotion/babel-plugin/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, "node_modules/@emotion/babel-plugin/node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", "stylis": "4.2.0" } }, + "node_modules/@emotion/cache/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, "node_modules/@emotion/cache/node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.2", @@ -2368,17 +2379,17 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.4", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", - "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { @@ -2391,33 +2402,43 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", - "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.1.tgz", + "integrity": "sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==", "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.0", "csstype": "^3.0.2" } }, + "node_modules/@emotion/serialize/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/serialize/node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" }, "node_modules/@emotion/styled": { - "version": "11.11.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", - "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.2", - "@emotion/serialize": "^1.1.4", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", @@ -2429,28 +2450,41 @@ } } }, + "node_modules/@emotion/styled/node_modules/@emotion/is-prop-valid": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.0.tgz", + "integrity": "sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/styled/node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, "node_modules/@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.0.tgz", + "integrity": "sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==" }, "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", @@ -2565,40 +2599,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "dependencies": { - "@floating-ui/utils": "^0.2.7" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==" - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -3485,62 +3485,31 @@ } } }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.23", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.23.tgz", - "integrity": "sha512-9L8SQUGAWtd/Qi7Qem26+oSSgpY7f2iQTuvcz/rsGpyZjSomMMO6lwYeQSA0CpWM7+aN7eGoSY/WV6wxJiIxXw==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@floating-ui/react-dom": "^2.0.2", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.17", - "@popperjs/core": "^2.11.8", - "clsx": "^2.0.0", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.17", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.17.tgz", - "integrity": "sha512-DVAejDQkjNnIac7MfP8sLzuo7fyrBPxNdXe+6bYqOqg1z2OPTlfFAejSNzWe7UenRMuFu9/AyFXj/X2vN2w6dA==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.7.tgz", + "integrity": "sha512-RtsCt4Geed2/v74sbihWzzRs+HsIQCfclHeORh5Ynu2fS4icIKozcSubwuG7vtzq2uW3fOR1zITSP84TNt2GoQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/material": { - "version": "5.14.17", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.17.tgz", - "integrity": "sha512-+y0VeOLWfEA4Z98We/UH6KCo8+f2HLZDK45FY+sJf8kSojLy3VntadKtC/u0itqnXXb1Pr4wKB2tSIBW02zY4Q==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.7.tgz", + "integrity": "sha512-cwwVQxBhK60OIOqZOVLFt55t01zmarKJiJUWbk0+8s/Ix5IaUzAShqlJchxsIQ4mSrWqgcKCCXKtIlG5H+/Jmg==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "5.0.0-beta.23", - "@mui/core-downloads-tracker": "^5.14.17", - "@mui/system": "^5.14.17", - "@mui/types": "^7.2.8", - "@mui/utils": "^5.14.17", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.16.7", + "@mui/system": "^5.16.7", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.6", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^18.3.1", "react-transition-group": "^4.4.5" }, "engines": { @@ -3548,7 +3517,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", @@ -3570,12 +3539,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", - "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.6.tgz", + "integrity": "sha512-rAk+Rh8Clg7Cd7shZhyt2HGTTE5wYKNSJ5sspf28Fqm/PZ69Er9o6KX25g03/FG2dfpg5GCwZh/xOojiTfm3hw==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.20", + "@mui/utils": "^5.16.6", "prop-types": "^15.8.1" }, "engines": { @@ -3596,9 +3565,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", - "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.6.tgz", + "integrity": "sha512-zaThmS67ZmtHSWToTiHslbI8jwrmITcN93LQaR2lKArbvS7Z3iLkwRoiikNWutx9MBs8Q6okKvbZq1RQYB3v7g==", "dependencies": { "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", @@ -3648,15 +3617,15 @@ } }, "node_modules/@mui/system": { - "version": "5.15.15", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.15.tgz", - "integrity": "sha512-aulox6N1dnu5PABsfxVGOZffDVmlxPOVgj56HrUnJE8MCSh8lOvvkd47cebIVQQYAjpwieXQXiDPj5pwM40jTQ==", + "version": "5.16.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.7.tgz", + "integrity": "sha512-Jncvs/r/d/itkxh7O7opOunTqbbSSzMTHzZkNLM+FjAOg+cYAZHrPDlYe1ZGKUYORwwb2XexlWnpZp0kZ4AHuA==", "dependencies": { "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.14", - "@mui/styled-engine": "^5.15.14", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", + "@mui/private-theming": "^5.16.6", + "@mui/styled-engine": "^5.16.6", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.6", "clsx": "^2.1.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -3687,11 +3656,11 @@ } }, "node_modules/@mui/types": { - "version": "7.2.14", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", - "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.16.tgz", + "integrity": "sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag==", "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3700,14 +3669,16 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", - "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.6.tgz", + "integrity": "sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA==", "dependencies": { "@babel/runtime": "^7.23.9", - "@types/prop-types": "^15.7.11", + "@mui/types": "^7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^18.3.1" }, "engines": { "node": ">=12.0.0" @@ -3726,6 +3697,81 @@ } } }, + "node_modules/@mui/x-charts": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.16.0.tgz", + "integrity": "sha512-YnimCNnLpmSu93LEGYAy8HaMoa6xqqQNFRD8BtzGs492sk/coM9uh6OwHJekF5302fDpANu3rYSF0KEpFWZM2Q==", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^5.16.6", + "@mui/x-charts-vendor": "7.16.0", + "@mui/x-internals": "7.16.0", + "@react-spring/rafz": "^9.7.4", + "@react-spring/web": "^9.7.4", + "clsx": "^2.1.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0", + "@mui/system": "^5.15.14 || ^6.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-charts-vendor": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-7.16.0.tgz", + "integrity": "sha512-MyMCCl7eAM53rLbjqP4zbMy5hYtdeqCjAYCH2jpvBKdgugm2eaPLKOPM8bUVfen0wHA8BXleQrIrNceytFPyZA==", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@types/d3-color": "^3.1.3", + "@types/d3-delaunay": "^6.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.8", + "@types/d3-shape": "^3.1.6", + "@types/d3-time": "^3.0.3", + "d3-color": "^3.1.0", + "d3-delaunay": "^6.0.4", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "delaunator": "^5.0.1", + "robust-predicates": "^3.0.2" + } + }, + "node_modules/@mui/x-internals": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.16.0.tgz", + "integrity": "sha512-ijer5XYmWlJqWaTmF6TGH1odG7EAupv8iDWYmDm2yVR9IQ+L2nQSuhiFClI+wmGx40KS2VKOlzDMPpF0t7/HCg==", + "dependencies": { + "@babel/runtime": "^7.25.6", + "@mui/utils": "^5.16.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@next/env": { "version": "14.2.3", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", @@ -3999,6 +4045,72 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@react-spring/animated": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.4.tgz", + "integrity": "sha512-7As+8Pty2QlemJ9O5ecsuPKjmO0NKvmVkRR1n6mEotFgWar8FKuQt2xgxz3RTgxcccghpx1YdS1FCdElQNexmQ==", + "dependencies": { + "@react-spring/shared": "~9.7.4", + "@react-spring/types": "~9.7.4" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.4.tgz", + "integrity": "sha512-GzjA44niEJBFUe9jN3zubRDDDP2E4tBlhNlSIkTChiNf9p4ZQlgXBg50qbXfSXHQPHak/ExYxwhipKVsQ/sUTw==", + "dependencies": { + "@react-spring/animated": "~9.7.4", + "@react-spring/shared": "~9.7.4", + "@react-spring/types": "~9.7.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.4.tgz", + "integrity": "sha512-mqDI6rW0Ca8IdryOMiXRhMtVGiEGLIO89vIOyFQXRIwwIMX30HLya24g9z4olDvFyeDW3+kibiKwtZnA4xhldA==" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.4.tgz", + "integrity": "sha512-bEPI7cQp94dOtCFSEYpxvLxj0+xQfB5r9Ru1h8OMycsIq7zFZon1G0sHrBLaLQIWeMCllc4tVDYRTLIRv70C8w==", + "dependencies": { + "@react-spring/rafz": "~9.7.4", + "@react-spring/types": "~9.7.4" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.4.tgz", + "integrity": "sha512-iQVztO09ZVfsletMiY+DpT/JRiBntdsdJ4uqk3UJFhrhS8mIC9ZOZbmfGSRs/kdbNPQkVyzucceDicQ/3Mlj9g==" + }, + "node_modules/@react-spring/web": { + "version": "9.7.4", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.4.tgz", + "integrity": "sha512-UMvCZp7I5HCVIleSa4BwbNxynqvj+mJjG2m20VO2yPoi2pnCYANy58flvz9v/YcXTAvsmL655FV3pm5fbr6akA==", + "dependencies": { + "@react-spring/animated": "~9.7.4", + "@react-spring/core": "~9.7.4", + "@react-spring/shared": "~9.7.4", + "@react-spring/types": "~9.7.4" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4575,6 +4687,50 @@ "@types/node": "*" } }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==" + }, "node_modules/@types/eslint": { "version": "8.56.11", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", @@ -7362,6 +7518,111 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -7569,6 +7830,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -10515,6 +10784,14 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, "node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", @@ -19218,6 +19495,11 @@ "node": "*" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" + }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", diff --git a/package.json b/package.json index 30089b6..108d657 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,12 @@ }, "dependencies": { "@emotion/cache": "^11.11.0", - "@emotion/react": "^11.11.4", - "@emotion/styled": "^11.11.5", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", "@material-ui/core": "^4.11.2", - "@mui/material": "^5.14.17", + "@mui/material": "^5.16.7", "@mui/styled-engine-sc": "^6.0.0-alpha.18", + "@mui/x-charts": "^7.16.0", "aos": "^2.3.4", "date-fns": "^3.6.0", "i": "^0.3.7", diff --git a/public/assets/images/user.png b/public/assets/images/user.png new file mode 100644 index 0000000000000000000000000000000000000000..06979507a8758df53ec9f4c9ed3cd13c25b42e4f GIT binary patch literal 2208 zcmV;R2w(S!P)WdSz5+6#`}!%?DH?T=lnBc1{{o2^;p;cKli`)obR0T zopY~*B}#kyv9RtA?h%^U2^-CGbFs$DXS>3mo&Ff{cx+bJwCM2Yc+Ypf`@@qjeE+46 zwzj>qOVKMm*6`5}8dXUsu6=taQiM>08w;~jrv*IIe+k-vAo(caz_{z3rQYt0wDOs@wX{&uwe5YAsZi;CotNKaE*CMU*977l1W`!efX5`e$H^HH;==v|~~!G>Gc`!G0o z1&KroimpJ(XRu>U9iCfXk2;Tx)fEgtKoSBcKK$4HjiifpvhGCzFiHXC*ykB%8N7NK zdBcRTZJ3!Hmb+y9_IJO=z90VpU)}yC{AkxkRC!&_+TP1&AKXkjS@*+{m_Q1%C>FT6j})@Yr?uW343k=CbdP0 zT$-9q!lSy-P#H#+h{|rRYFhJ1UEJ7+3kPMzF!o@HvTob6xH*<|-Y0Hcz}WC8(s>JK zIzK}HoftYkIEDAmT}8&Q@!YQG@#My>i>V7MK4Xt833(TmASQ7@R#e0?I?nfAh1>5# zh*BcWBoVS**ic`CTa$5IpPEDMiU#a!{W)Y=SyU%|-ziHn7KJIOsm$G*#n@;RS1xtq z%Ei-g`FwN$%_3Y~iL4pJ)YKhJ&BQR7$RceDytMCUaJgJ~oJc}yRv}4^4rR+EN&UUA z?*eXIzlLl5y+~1i54r>@{C-sXU5Mw1M5>0w^d!QO1~hEAi^$+@TB&P)@(>A&<4PxsvJ5Ut}AvHOI>D&FdHgFSHXL4|BDxV0rbm24fTs(uuHS4ka zo8QCs?O%h>A9%o?OzR%FIB@e|!!k7!)1-278`oJ5u)l}u+5pG(p@hCqL$XNV&4=RY07Z+`U?^!1!CH#bWyOGL|O-aq~x(LyRl zz=B;IkX=wTx1*3j-5#ID=)eucr^ivhb}izG4B}~n6HDv)P^MAT!}=6OMr!UJK0SG2 z-WI`&ax3mF2auxt@dh?xnK{@L1x3{z(peM1BQj4Ks|myJ zQ5Se#o|1-@tDSdB?Q71H|Gm7oB`PHG=B=B9u$+?&PS`nj%maz?Z;@e+1c%=)c!0UQ zfsY49k;|l^sS?&UEJuaA=sk1L7V}jgla638h%KA9axmUxoAUr1?-k`BwcaRiuz3@O zk%!|sh0wAL8o2@>1|X}jsN5!~^so-sef>BeG z50>oCcS7buxVE;1(00+Swvp@^+quyUpOJ89Bt{%NH5RQ03URjzB1cw5>S~ z@V-(tmHJ99XGGUE)wMj|6qzUe1GnPY@$qQZHujS3XrT!eYnY?JmBH^t28qH29Ml|$ zH#y>ug^MGzxHL55cwSCqrve0`*ZQyQZEA`{%WW<=up zuSX|Rnvhh*=?xYUlyJTFxNNff%>V(0BaELp%mW~zI>zfGHO{kOREblFxU?Jb{}OT{tY})R;?@uAUT=@?^Tinq8&owl{zOxK ikIX