navigation done only animations left to do for it

This commit is contained in:
yousifpa98
2024-12-20 02:40:46 +01:00
parent 54df568dc6
commit bf6591e4e1
19 changed files with 144 additions and 13 deletions

9
package-lock.json generated
View File

@@ -9,6 +9,7 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"clsx": "^2.1.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-router-dom": "^7.0.2", "react-router-dom": "^7.0.2",
@@ -1785,6 +1786,14 @@
"url": "https://github.com/chalk/chalk?sponsor=1" "url": "https://github.com/chalk/chalk?sponsor=1"
} }
}, },
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"engines": {
"node": ">=6"
}
},
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",

View File

@@ -11,6 +11,7 @@
}, },
"dependencies": { "dependencies": {
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"clsx": "^2.1.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-router-dom": "^7.0.2", "react-router-dom": "^7.0.2",

View File

@@ -3,6 +3,10 @@ import Layout from "./layout/Layout";
import { Route, Routes } from "react-router-dom"; import { Route, Routes } from "react-router-dom";
import Home from "./components/Home"; import Home from "./components/Home";
import "./App.css"; import "./App.css";
import About from "./components/mainViews/About";
import Experience from "./components/mainViews/Experience";
import Projects from "./components/mainViews/Projects";
import Contact from "./components/mainViews/Contact";
const App = () => { const App = () => {
return ( return (
@@ -10,6 +14,10 @@ const App = () => {
{/* <Layout> */} {/* <Layout> */}
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<Home />} />
<Route path="/about" element={<About />} />
<Route path="/workExp" element={<Experience />} />
<Route path="/projects" element={<Projects />} />
<Route path="/contact" element={<Contact />} />
</Routes> </Routes>
{/* </Layout> */} {/* </Layout> */}
</main> </main>

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M512 80c8.8 0 16 7.2 16 16l0 320c0 8.8-7.2 16-16 16L64 432c-8.8 0-16-7.2-16-16L48 96c0-8.8 7.2-16 16-16l448 0zM64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l448 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM208 256a64 64 0 1 0 0-128 64 64 0 1 0 0 128zm-32 32c-44.2 0-80 35.8-80 80c0 8.8 7.2 16 16 16l192 0c8.8 0 16-7.2 16-16c0-44.2-35.8-80-80-80l-64 0zM376 144c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l80 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-80 0z"/></svg>

After

Width:  |  Height:  |  Size: 842 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"/></svg>

After

Width:  |  Height:  |  Size: 753 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M64 112c-8.8 0-16 7.2-16 16l0 22.1L220.5 291.7c20.7 17 50.4 17 71.1 0L464 150.1l0-22.1c0-8.8-7.2-16-16-16L64 112zM48 212.2L48 384c0 8.8 7.2 16 16 16l384 0c8.8 0 16-7.2 16-16l0-171.8L322 328.8c-38.4 31.5-93.7 31.5-132 0L48 212.2zM0 128C0 92.7 28.7 64 64 64l384 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64L64 448c-35.3 0-64-28.7-64-64L0 128z"/></svg>

After

Width:  |  Height:  |  Size: 636 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M575.8 255.5c0 18-15 32.1-32 32.1l-32 0 .7 160.2c0 2.7-.2 5.4-.5 8.1l0 16.2c0 22.1-17.9 40-40 40l-16 0c-1.1 0-2.2 0-3.3-.1c-1.4 .1-2.8 .1-4.2 .1L416 512l-24 0c-22.1 0-40-17.9-40-40l0-24 0-64c0-17.7-14.3-32-32-32l-64 0c-17.7 0-32 14.3-32 32l0 64 0 24c0 22.1-17.9 40-40 40l-24 0-31.9 0c-1.5 0-3-.1-4.5-.2c-1.2 .1-2.4 .2-3.6 .2l-16 0c-22.1 0-40-17.9-40-40l0-112c0-.9 0-1.9 .1-2.8l0-69.7-32 0c-18 0-32-14-32-32.1c0-9 3-17 10-24L266.4 8c7-7 15-8 22-8s15 2 21 7L564.8 231.5c8 7 12 15 11 24z"/></svg>

After

Width:  |  Height:  |  Size: 775 B

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc. --><path d="M176 56l0 40 160 0 0-40c0-4.4-3.6-8-8-8L184 48c-4.4 0-8 3.6-8 8zM128 96l0-40c0-30.9 25.1-56 56-56L328 0c30.9 0 56 25.1 56 56l0 40 0 32 0 352-256 0 0-352 0-32zM64 96l32 0 0 384-32 0c-35.3 0-64-28.7-64-64L0 160c0-35.3 28.7-64 64-64zM448 480l-32 0 0-384 32 0c35.3 0 64 28.7 64 64l0 256c0 35.3-28.7 64-64 64z"/></svg>

After

Width:  |  Height:  |  Size: 595 B

View File

@@ -15,7 +15,7 @@ const Hero = ({ initialAnimation, onMouseEnter, onAnimationEnd }) => {
<span> <span>
Hi, I'm Yousif. <br /> Hi, I'm Yousif. <br />
</span>{" "} </span>{" "}
I'm a Full-Stack Developer from Germany. I'm a Full-Stack Developer from <span>Germany</span>.
</p> </p>
</div> </div>
); );

View File

@@ -37,7 +37,11 @@ const Home = () => {
<LangSelect /> <LangSelect />
<Mail /> <Mail />
<Switch /> <Switch />
<Navigation /> <Navigation
initialAnimation="animate__backInDown"
onMouseEnter={handleMouseEnter}
onAnimationEnd={handleAnimationEnd}
/>
<div className="linkedIn container"> <div className="linkedIn container">
<LinkedInIcon className="linkedInIcon" /> <LinkedInIcon className="linkedInIcon" />
</div> </div>

View File

@@ -1,8 +1,49 @@
import React from "react"; import React from "react";
import "../css/Navigation.css"; import "../css/Navigation.css";
import { useState } from "react";
import AddressCardIcon from "../assets/icons/navIcons/address-card.svg?react";
import CodeIcon from "../assets/icons/navIcons/code.svg?react";
import EnvelopeIcon from "../assets/icons/navIcons/envelope.svg?react";
import HouseIcon from "../assets/icons/navIcons/house.svg?react";
import SuitcaseIcon from "../assets/icons/navIcons/suitcase.svg?react";
import { NavLink } from "react-router-dom";
import clsx from "clsx";
const Navigation = () => { const Navigation = ({ initialAnimation, onMouseEnter, onAnimationEnd }) => {
return <div className="navigation container">Nav</div>; const [animation, setAnimation] = useState(initialAnimation);
const navItems = [
{ name: "Home", to: "/", icon: HouseIcon, id: 1 },
{ name: "About", to: "/about", icon: AddressCardIcon, id: 2 },
{ name: "Experience", to: "/workExp", icon: SuitcaseIcon, id: 3 },
{ name: "Projects", to: "/projects", icon: CodeIcon, id: 4 },
{ name: "Contact", to: "/contact", icon: EnvelopeIcon, id: 5 },
];
return (
<div
className={`navigation container animate__animated ${animation}`}
onMouseEnter={() => onMouseEnter(setAnimation)}
onAnimationEnd={() => onAnimationEnd(setAnimation)}
>
<ul className="navList">
{navItems.map((item) => {
const IconComponent = item.icon;
return (
<li className="navItem" key={item.id}>
<NavLink
to={item.to}
className={({ isActive }) =>
clsx("navLink", { active: isActive })
}
>
<span>{item.name}</span> <IconComponent className="navIcon" />
</NavLink>
</li>
);
})}
</ul>
</div>
);
}; };
export default Navigation; export default Navigation;

View File

@@ -0,0 +1,9 @@
import React from 'react'
const About = () => {
return (
<div>About</div>
)
}
export default About

View File

@@ -0,0 +1,9 @@
import React from 'react'
const Contact = () => {
return (
<div>Contact</div>
)
}
export default Contact

View File

@@ -0,0 +1,9 @@
import React from 'react'
const Experience = () => {
return (
<div>Experience</div>
)
}
export default Experience

View File

@@ -0,0 +1,9 @@
import React from 'react'
const Projects = () => {
return (
<div>Projects</div>
)
}
export default Projects

View File

@@ -3,10 +3,6 @@
animation-duration: 1.5s; animation-duration: 1.5s;
} }
.hero:hover {
animation-duration: .5s;
}
.hero p span { .hero p span {
color: white; color: white;
font-weight: bold; font-weight: bold;

View File

@@ -16,6 +16,7 @@
.container:hover { .container:hover {
cursor: pointer; cursor: pointer;
animation-duration: .5s;
} }
h2 { h2 {

View File

@@ -1,3 +1,35 @@
.navigation { .navigation {
grid-area: 1 / 9 / 9 / 12; grid-area: 1 / 9 / 9 / 12;
} }
.navList {
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
list-style-type: none;
height: 100%;
}
.navItem {
font-size: 1.5rem;
}
.navIcon {
fill: white;
height: 1.5rem;
width: auto;
}
.navLink {
text-decoration: none;
color: white;
display: flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
.navLink.active span {
border-bottom: 1px solid white;
}

View File

@@ -7,9 +7,7 @@
animation-duration: 1s; animation-duration: 1s;
} }
.techStackContainer:hover {
animation-duration: 0.5s;
}
.techStackContainer h2 { .techStackContainer h2 {
margin-bottom: 10px; margin-bottom: 10px;