diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..80ee0cb Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/favicon_io/android-chrome-192x192.png b/public/favicon_io/android-chrome-192x192.png new file mode 100644 index 0000000..5893af2 Binary files /dev/null and b/public/favicon_io/android-chrome-192x192.png differ diff --git a/public/favicon_io/android-chrome-512x512.png b/public/favicon_io/android-chrome-512x512.png new file mode 100644 index 0000000..d1ca0b8 Binary files /dev/null and b/public/favicon_io/android-chrome-512x512.png differ diff --git a/public/favicon_io/apple-touch-icon.png b/public/favicon_io/apple-touch-icon.png new file mode 100644 index 0000000..6fe853e Binary files /dev/null and b/public/favicon_io/apple-touch-icon.png differ diff --git a/public/favicon_io/favicon-16x16.png b/public/favicon_io/favicon-16x16.png new file mode 100644 index 0000000..9e04d74 Binary files /dev/null and b/public/favicon_io/favicon-16x16.png differ diff --git a/public/favicon_io/favicon-32x32.png b/public/favicon_io/favicon-32x32.png new file mode 100644 index 0000000..bb82b79 Binary files /dev/null and b/public/favicon_io/favicon-32x32.png differ diff --git a/public/favicon_io/site.webmanifest b/public/favicon_io/site.webmanifest new file mode 100644 index 0000000..fa99de7 --- /dev/null +++ b/public/favicon_io/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/public/index.html b/public/index.html index 03daad6..6ab7456 100644 --- a/public/index.html +++ b/public/index.html @@ -4,6 +4,11 @@ + + Personal Portfolio diff --git a/src/App.jsx b/src/App.jsx index 9a7d463..5bf36d9 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from "react"; import { BrowserRouter as Router, Route, Routes } from "react-router-dom"; +import PropTypes from "prop-types"; import Header from "./components/header/Header"; import Nav from "./components/nav/Nav"; @@ -33,6 +34,10 @@ const App = () => { ); + RouterWrapper.propTypes = { + children: PropTypes.node.isRequired, + }; + return ( {screenWidth > 600 ? ( diff --git a/src/components/education/educationitem.jsx b/src/components/education/educationitem.jsx index 22dbd6c..0fc980d 100644 --- a/src/components/education/educationitem.jsx +++ b/src/components/education/educationitem.jsx @@ -1,4 +1,5 @@ import React from "react"; +import PropTypes from "prop-types"; import { BsFillCalendarEventFill } from "react-icons/bs"; const EducationItem = (props) => { @@ -17,3 +18,12 @@ const EducationItem = (props) => { }; export default EducationItem; + +EducationItem.propTypes = { + item: PropTypes.shape({ + date: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + text: PropTypes.string.isRequired, + cgpa: PropTypes.string.isRequired, + }).isRequired, +}; diff --git a/src/components/experience/experienceitem.jsx b/src/components/experience/experienceitem.jsx index 74418e1..c6cb9a0 100644 --- a/src/components/experience/experienceitem.jsx +++ b/src/components/experience/experienceitem.jsx @@ -1,4 +1,5 @@ import React, { useState } from "react"; +import PropTypes from "prop-types"; import { BsFillCalendarEventFill } from "react-icons/bs"; import { IoLocationSharp } from "react-icons/io5"; import { CiCircleChevDown, CiCircleChevUp } from "react-icons/ci"; @@ -10,6 +11,13 @@ const ExperienceItem = ({ item }) => { setShow(!show); }; + // Function to handle keyboard events for accessibility + const handleKeyPress = (e) => { + if (e.key === "Enter" || e.key === " ") { + toggleDropdown(); + } + }; + return (

@@ -17,7 +25,13 @@ const ExperienceItem = ({ item }) => { {item.date} -
+
{show ? : } @@ -49,7 +63,7 @@ const ExperienceItem = ({ item }) => {

What I did?

    {Object.values(item.description).map((desc, index) => ( -
  • {desc}
  • +
  • {desc}
  • ))}
@@ -57,7 +71,7 @@ const ExperienceItem = ({ item }) => {

Skills I Learned & Used!

{item.skills.map((skill, index) => ( - {skill} + {skill} ))}
@@ -65,4 +79,17 @@ const ExperienceItem = ({ item }) => { ); }; +ExperienceItem.propTypes = { + item: PropTypes.shape({ + date: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + position: PropTypes.string.isRequired, + company: PropTypes.string.isRequired, + location: PropTypes.string.isRequired, + location_type: PropTypes.string.isRequired, + description: PropTypes.objectOf(PropTypes.string).isRequired, + skills: PropTypes.arrayOf(PropTypes.string).isRequired, + }).isRequired, +}; + export default ExperienceItem; diff --git a/src/components/header/Header.jsx b/src/components/header/Header.jsx index e25691c..c2f3767 100644 --- a/src/components/header/Header.jsx +++ b/src/components/header/Header.jsx @@ -1,9 +1,9 @@ import React from "react"; import "./header.css"; -import CTA from "./CTA"; +import CtaComponent from "./CTA"; // Renamed the import to CtaComponent import ME from "../../assets/me.png"; import HeaderSocials from "./HeaderSocials"; -import TW from "./TW"; +import TwComponent from "./TW"; // Renamed the import to TwComponent const Header = () => { const words = [ @@ -14,15 +14,16 @@ const Header = () => { "Open Source Contributor", "Tech Enthusiast", ]; + return (