diff --git a/src/components/atoms/IconLinks/IconLinks.tsx b/src/components/atoms/IconLinks/IconLinks.tsx index 2994577..627e92e 100644 --- a/src/components/atoms/IconLinks/IconLinks.tsx +++ b/src/components/atoms/IconLinks/IconLinks.tsx @@ -1,10 +1,7 @@ import { Email, LinkedIn, GitHub, Description, OndemandVideo, School, OpenInNew, OpenInBrowser } from '@mui/icons-material' -import { Badge, IconButtonProps, SvgIcon } from '@mui/material' +import { Badge, Link, LinkProps, SvgIcon } from '@mui/material' -import IconButton from '../IconButton' - -interface IconLinkProps extends IconButtonProps { - href: string +interface IconLinkProps extends LinkProps { fontSize?: 'small' | 'large' | 'medium' | 'inherit' index?: number } @@ -13,25 +10,46 @@ interface IconWrapperProps extends IconLinkProps { Icon: typeof SvgIcon } -const IconWrapper = ({ index, href: to, fontSize, Icon, ...props }: IconWrapperProps) => { +const IconWrapper: React.FC = ({ index, fontSize, Icon, sx, ...props }) => { if (typeof index === 'undefined') { return ( - { - e.stopPropagation() - window.open(to, '_blank') - }} + ({ + color: 'inherit', + ':hover': { + backgroundColor: 'transparent', + color: theme.palette.primary.main, + }, + ...sx, + })} {...props}> - + ) } return ( - window.open(to, '_blank')} {...props}> + ({ + color: 'inherit', + ':hover': { + backgroundColor: 'transparent', + color: theme.palette.primary.main, + }, + ...sx, + })} + {...props}> - + ) } diff --git a/src/components/atoms/Publication/Publication.tsx b/src/components/atoms/Publication/Publication.tsx index d02dafa..03cb89a 100644 --- a/src/components/atoms/Publication/Publication.tsx +++ b/src/components/atoms/Publication/Publication.tsx @@ -26,7 +26,7 @@ const Publication = ({ Component = Box, ...props }: AwardEntryProps) => { {props.title} , In: {props.location} - {typeof props.link !== 'undefined' && } + {typeof props.link !== 'undefined' && } diff --git a/src/components/molecules/Footer/Footer.tsx b/src/components/molecules/Footer/Footer.tsx index 308e2df..cbbf388 100644 --- a/src/components/molecules/Footer/Footer.tsx +++ b/src/components/molecules/Footer/Footer.tsx @@ -6,10 +6,10 @@ const Footer = () => { const year = new Date().getFullYear() return ( - - - - + + + + © {year} Michele Tartari. All rights reserved. diff --git a/src/components/molecules/Hero/Hero.tsx b/src/components/molecules/Hero/Hero.tsx index daf1578..bf19bd4 100644 --- a/src/components/molecules/Hero/Hero.tsx +++ b/src/components/molecules/Hero/Hero.tsx @@ -62,10 +62,10 @@ const Hero = (props: { scrollTarget?: React.ForwardedRef }) = }}> See some of my works below. Send a message to get in touch. - - - - + + + + }) = {props.scrollTarget && ( (props.scrollTarget as React.MutableRefObject).current?.scrollIntoView()} + onClick={() => (props.scrollTarget as React.RefObject).current?.scrollIntoView()} sx={{ display: { xs: 'none', md: 'block' }, position: 'absolute', p: 1, bottom: 3 }}> diff --git a/src/components/molecules/Project/Project.tsx b/src/components/molecules/Project/Project.tsx index d673ec4..ae11c41 100644 --- a/src/components/molecules/Project/Project.tsx +++ b/src/components/molecules/Project/Project.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Accordion, AccordionDetails, AccordionSummary, Typography } from '@mui/material' +import { Accordion, AccordionDetails, AccordionSummary, Stack, Typography } from '@mui/material' import { ExpandMore as ExpandIcon } from '@mui/icons-material' interface ProjectProps { @@ -54,7 +54,9 @@ const Project = (props: ProjectProps) => { {props.title} - {props.subtitle} + + {props.subtitle} + {props.children} diff --git a/src/components/pages/ContactPage/ContactPage.tsx b/src/components/pages/ContactPage/ContactPage.tsx index a626e34..6dcbf0b 100644 --- a/src/components/pages/ContactPage/ContactPage.tsx +++ b/src/components/pages/ContactPage/ContactPage.tsx @@ -1,20 +1,41 @@ -import { List, ListItem, ListItemButton as MuiListItemButton, Typography, styled } from '@mui/material' -import { Drafts as DraftsIcon, LinkedIn as LinkedInIcon, GitHub as GitHubIcon } from '@mui/icons-material' +import { Link, List, ListItem, Stack, Typography } from '@mui/material' +import DraftsIcon from '@mui/icons-material/Drafts' +import LinkedInIcon from '@mui/icons-material/LinkedIn' +import GitHubIcon from '@mui/icons-material/GitHub' import { Page } from 'components/templates' -const ListItemButton = styled(MuiListItemButton)(({ theme }) => ({ - h6: { - color: theme.palette.text.secondary, - }, - ':hover': { - backgroundColor: 'transparent', - color: theme.palette.primary.main, - h6: { - color: theme.palette.primary.dark, - }, - }, -})) +interface ListItemProps { + children?: React.ReactNode + href?: string +} +const ListItemLink: React.FC = ({ children, ...props }) => ( + + ({ + color: 'inherit', + + h6: { + color: theme.palette.text.secondary, + }, + ':hover': { + backgroundColor: 'transparent', + color: theme.palette.primary.main, + h6: { + color: theme.palette.primary.dark, + }, + }, + })}> + + {children} + + + +) const ContactPage = () => { return ( @@ -23,32 +44,26 @@ const ContactPage = () => { Feel free to contact me using any of the following: - - window.open('mailto:info@m-tartari.eu', '_blank')}> - - - info - - @m-tartari.eu - - - - - window.open('https://www.linkedin.com/in/m-tartari/', '_blank')}> - - - m-tartari - - - - - window.open('https://www.github.com/m-tartari/', '_blank')}> - - - m-tartari - - - + + + + info + + @m-tartari.eu + + + + + + m-tartari + + + + + + m-tartari + + ) diff --git a/src/components/pages/CurriculumPage/CurriculumPage.tsx b/src/components/pages/CurriculumPage/CurriculumPage.tsx index 7aa5e5b..28517bf 100644 --- a/src/components/pages/CurriculumPage/CurriculumPage.tsx +++ b/src/components/pages/CurriculumPage/CurriculumPage.tsx @@ -132,9 +132,9 @@ const Curriculum = () => { {/* id="WUT" */} - + Credential ID: EZ34GWQLRHEG - + diff --git a/src/components/pages/MainPage/MainPage.tsx b/src/components/pages/MainPage/MainPage.tsx index 7950659..77317ae 100644 --- a/src/components/pages/MainPage/MainPage.tsx +++ b/src/components/pages/MainPage/MainPage.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { Box, Typography } from '@mui/material' +import { Box, Stack, Typography } from '@mui/material' import { ViewportProvider } from 'components/utils/viewport' import { AcademyIconLink, DescriptionIconLink, ExternalAppIconLink, GitHubIconLink, VideoIconLink } from 'components/atoms' @@ -28,12 +28,10 @@ const MainPage = () => { image="images/IIT_Linfa.webp" title="LINFA: An Intuitive Block-Programming Interface for Reconfigurable Robots" caption={ - <> - - - Software Engineer @ IIT - - + + + Software Engineer @ IIT + }> This project aims to simplify the control, monitoring, and programming of reconfigurable robots through an intuitive block-programming interface. It includes a front-end web app, built with TypeScript and React, allowing users to effortlessly change robot operating modes and @@ -52,13 +50,11 @@ const MainPage = () => { mobileImage="images/IIT_Modular_Mobile.webp" title="Revamping HHCM's Modular: Swift Generation of Modular Robot Models" caption={ - <> - - - - Software Engineer @ IIT - - + + + + Software Engineer @ IIT + }> This project focused on overhauling HHCM's Modular, enhancing its graphical interface, API, and deployment pipeline. Modular serves as a web application for the swift generation of modular robot models, with an offline approach (Building Mode) enabling users to set up robots in a @@ -75,12 +71,10 @@ const MainPage = () => { image="images/IIT_Modules.webp" title="Automated Actuators and Robotic Modules Calibration" caption={ - <> - - - Embedded Engineer @ IIT - - + + + Embedded Engineer @ IIT + }> This project focused on automating the calibration of EtherCAT actuators and robotic modules, aiming for a fully automated procedure for newly assembled actuators. The process involved testing the PDO, conducting phase angle calibration, torque sensor calibration, ripple and @@ -96,18 +90,11 @@ const MainPage = () => { mobileImage="images/thesis.webp" title="Voice Controlled Mobile Robot for Indoor Applications" caption={ - <> - - - - - Master Thesis @ WUT - - + + + + Master Thesis @ WUT + }> This thesis proposes a design for a small mobile robot controlled by voice. Firstly a preliminary analysis of the state of art of human-robot interaction has been conducted. Then, an analysis of the equipment selected took place, and, later, appropriate methodologies diff --git a/src/components/pages/ProjectsPage/ProjectsPage.tsx b/src/components/pages/ProjectsPage/ProjectsPage.tsx index 6c3475c..38d08b8 100644 --- a/src/components/pages/ProjectsPage/ProjectsPage.tsx +++ b/src/components/pages/ProjectsPage/ProjectsPage.tsx @@ -22,13 +22,13 @@ const ProjectsPage = () => { Software Engineer @ IIT {/* */} - + Software Engineer @ IIT @@ -49,9 +49,9 @@ const ProjectsPage = () => { Software Engineer @ IIT - - - + + + Software Engineer @ IIT @@ -70,14 +70,14 @@ const ProjectsPage = () => { Master Thesis @ WUT - + - + Master Thesis @ WUT @@ -94,9 +94,9 @@ const ProjectsPage = () => { title="Recharging Electric Cars with a Mobile Robot" subtitle={ <> - + { title="Mobile Robot Self-Localization" subtitle={ <> - + { subtitle={ <> { <> {/* */} { title="3RRR Planar Parallel Manipulator" subtitle={ { title="Simple Swarm" subtitle={ <> - + }> @@ -201,7 +201,7 @@ const ProjectsPage = () => { subtitle={ <> { subtitle={ <> { Embedded Engineer @ IIT - - + + Embedded Engineer @ IIT @@ -268,12 +263,12 @@ const ProjectsPage = () => { Bachelor Thesis @ TONGJI - + Bachelor Thesis @ TONGJI @@ -290,12 +285,12 @@ const ProjectsPage = () => { Bachelor Thesis @ UNIBO - + Bachelor Thesis @ UNIBO @@ -309,13 +304,13 @@ const ProjectsPage = () => { subtitle={ <> { title="Multi-Body System's Kinematic Analysis" subtitle={ <> - + { + }> Several Signal processing projects developed using MATLAB. + }> Several real-time systems' projects developed using C++ and OIL, and run using Trampoline RTOS on a Teensy board. @@ -373,7 +363,7 @@ const ProjectsPage = () => { + }> A collection of pdf and CAD models to create late XIV century furniture and medieval camp equipment. These objects are being realized by{' '} @@ -386,7 +376,7 @@ const ProjectsPage = () => { + }> Publishes all photos from a{' '}