diff --git a/src/components/FloatingActionButton.css b/src/components/FloatingActionButton.css deleted file mode 100644 index e829df8..0000000 --- a/src/components/FloatingActionButton.css +++ /dev/null @@ -1,39 +0,0 @@ -.floating-button-container { - position: fixed; - top: 20px; - right: 20px; - z-index: 100; - } - - .floating-button-container .MuiButton-root { - background-color: rgba(0,0,51, 0.7); - color: white; - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); - transition: 0.3s; - } - - .floating-button-container .MuiButton-root:hover, - .floating-button-container .MuiButton-root.Mui-focusVisible { - background-color: rgba(0,0,51, 0.9); - box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.4); - } - - .floating-button-container .MuiMenu-paper { - margin-top: 15px; - margin-right: 20px; - min-width: 20ch; - background-color: rgba(245, 245, 245, 0.8); - border-radius: 15px; - transition: 0.3s; - box-shadow: 0px 3px 5px 2px rgba(0, 0, 0, 0.2); - } - - .floating-button-container .MuiMenuItem-root:hover { - background-color: rgba(0,0,51, 0.6); - color: white; - } - - .floating-button-container .MuiMenuItem-root:hover svg { - color: white; - transition: color 0.3s; - } diff --git a/src/components/InfoBox.css b/src/components/InfoBox.css deleted file mode 100644 index 95fc8be..0000000 --- a/src/components/InfoBox.css +++ /dev/null @@ -1,28 +0,0 @@ -.info-box { - position: absolute; - /* top: 50%; */ - left: 50%; - transform: translate(-50%, -50%); - background-color: #fff; - padding: 1em; - border-radius: 1em; - font-size: 1em; - text-align: center; - box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.15); - width: 80%; - max-width: 90%; - margin: 0 auto; - color: #7a90a4; - z-index: 1; -} - -.info-box h1 { - color: #344D59; -} - -@media (min-width: 600px) { - .info-box { - font-size: 1.15em; - max-width: 60%; - } -} diff --git a/src/components/InfoBox.js b/src/components/InfoBox.js deleted file mode 100644 index 6dc3b13..0000000 --- a/src/components/InfoBox.js +++ /dev/null @@ -1,15 +0,0 @@ -import React from 'react'; -import './InfoBox.css'; - -function InfoBox({ title, description }) { - return ( -
-

{title}

- {description.map((line, index) => ( -

{line}

- ))} -
- ) -} - -export default InfoBox; diff --git a/src/components/ProjectCard.css b/src/components/ProjectCard.css deleted file mode 100644 index 0b50a9b..0000000 --- a/src/components/ProjectCard.css +++ /dev/null @@ -1,73 +0,0 @@ -.project-card { - position: relative; - border-radius: 20px; - display: block; - overflow: hidden; - transition: all 0.3s ease-in-out; -} - -.project-card-image-container { - position: relative; -} - -.project-image { - width: 100%; - object-fit: cover; - transition: transform 0.5s; - backface-visibility: hidden; -} - -.project-card:hover .project-image { - transform: scale(1.1); -} - -.project-card-overlay { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - background: rgba(12, 28, 34, 0.9); - color: white; - opacity: 0; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - padding: 20px; - transition: opacity 0.3s ease-in-out; -} - -.project-card:hover .project-card-overlay { - opacity: 1; -} - -.project-card-info { - margin-bottom: 10px; - display: flex; - flex-direction: column; - align-items: center; -} - -.project-button { - display: inline-block; - padding: 10px 20px; - background-color: #9b59b6; - color: #f3f6f7; - border: none; - border-radius: 20px; - text-decoration: none; - transition: all 0.3s ease-in-out; -} - -.project-button:hover { - color: #ffffff; - background-color: #8943a5; - border-color: #5c157a; - box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); -} - -.project-button:active { - transform: scale(0.99); - box-shadow: none; -} \ No newline at end of file diff --git a/src/components/ProjectCard.js b/src/components/ProjectCard.js deleted file mode 100644 index 6f00ddd..0000000 --- a/src/components/ProjectCard.js +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import './ProjectCard.css'; - -function ProjectCard({ projectName, projectDesc, projectImg, projectLink }) { - return ( -
-
- Project -
-
-

{projectName}

-

{projectDesc}

- Visiter le site -
-
-
-
- ); -} - -export default ProjectCard; diff --git a/src/components/ProjectCardSection.css b/src/components/ProjectCardSection.css deleted file mode 100644 index eef9069..0000000 --- a/src/components/ProjectCardSection.css +++ /dev/null @@ -1,49 +0,0 @@ -.project-cards-section { - width: 100%; - margin-top: 90px; - padding: 50px 0; -} - - -@media (max-width: 700px) { - .project-cards-section { - margin-top: 120px; - } -} - -.project-cards-container { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); - gap: 20px; - width: 90%; - margin: 0 auto; -} - - -.btn-see-more { - margin-top: 30px; - background-color: #851805ee; - color: #ffffff; - border: none; - padding: 10px 30px; - font-family: 'Nunito', sans-serif; - font-weight: 700; - font-size: 1.2em; - text-transform: uppercase; - letter-spacing: 2px; - transition: all 0.3s ease-in-out; - border-radius: 10px; - box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.1); - position: relative; - z-index: 100; -} - -.btn-see-more:hover { - background-color: #841b17; - box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); -} - -.btn-see-more:active { - transform: scale(0.98); - box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.1); -} diff --git a/src/components/ProjectCardSection.js b/src/components/ProjectCardSection.js deleted file mode 100644 index 8600582..0000000 --- a/src/components/ProjectCardSection.js +++ /dev/null @@ -1,62 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import Button from '@mui/material/Button'; -import './ProjectCardSection.css'; -import ProjectCard from '../components/ProjectCard'; - -function ProjectCardSection({ number }) { - const [projects, setProjects] = useState([]); - - useEffect(() => { - - const fetchGitHubProjects = async () => { - try { - const response = await fetch('https://api.github.com/users/redboarddev/repos?sort=pushed&direction=desc'); - if (!response.ok) { - throw new Error('Error while retrieving GitHub data'); - } - - const data = await response.json(); - - const filteredProjects = data.filter((project) => project.description); - - const slicedProjects = filteredProjects.slice(0, 6); - - const mappedProjects = slicedProjects.map((project) => ({ - projectName: project.name, - projectDesc: project.description, - projectImg: project.owner.avatar_url, - projectLink: project.html_url, - })); - - setProjects(mappedProjects); - } catch (error) { - console.error('Erreur:', error); - } - }; - - fetchGitHubProjects(); - }, []); - - return ( -
-
- {projects.map((project, index) => ( - - ))} -
-
- - -
- ); -} - -export default ProjectCardSection; diff --git a/src/components/WordCloud.css b/src/components/WordCloud.css deleted file mode 100644 index f9a7bd9..0000000 --- a/src/components/WordCloud.css +++ /dev/null @@ -1,51 +0,0 @@ -.word-cloud-box { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 25px; - box-shadow: 0px 10px 30px rgba(0, 0, 0, 0.3); - max-width: 90%; - margin: 0 auto; -} - -@media (max-width: 600px) { - .word-cloud-container { - height: 500px; - } - } - -.word-cloud-container { - position: relative; - width: 100%; - height: 400px; -} - -.description-container { - width: 100%; - position: relative; - color: #fff; - border-radius: 15px; - font-family: "Lucida Console", Monaco, monospace; - font-size: 16px; - letter-spacing: 0.1em; - line-height: 24px; - transition: all 0.3s ease; - background-color: rgb(114, 62, 62, 0.96); - margin-top: 1em; -} - -.word-cloud-word { - font-family: "Roboto", sans-serif; - cursor: pointer; - transition: all 0.3s ease; - font-weight: normal; -} - -.word-cloud-word:hover { - background-color: #f5f5f5; -} - -.word-cloud-word.selected { - font-weight: bold; -} \ No newline at end of file diff --git a/src/components/WordCloud.js b/src/components/WordCloud.js deleted file mode 100644 index 3cf6446..0000000 --- a/src/components/WordCloud.js +++ /dev/null @@ -1,138 +0,0 @@ -import React, { useEffect, useRef } from "react"; -import * as d3 from "d3"; -import cloud from "d3-cloud"; -import "./WordCloud.css"; -import { Paper, Box } from '@mui/material'; - -const WordCloud = ({ data }) => { - const wordCloudRef = useRef(null); - - useEffect(() => { - d3.select(wordCloudRef.current).html(""); - - const drawWordCloud = data => { - const color = d3.scaleOrdinal() - .domain(data.map(d => d.text)) - .range(["#003f5c", "#bc5090", "#ffa600", "#ff7c43", "#1F1F1F", "#008080", "#D2691E", "#808080"]); - - const screenWidth = wordCloudRef.current.clientWidth; - const maxWordSize = 40; - const minWordSize = 20; - const maxPadding = 10; - const minPadding = 5; - - const wordSizeScale = d3 - .scaleLinear() - .domain([300, 1200]) - .range([minWordSize, maxWordSize]) - .clamp(true); - - const paddingScale = d3 - .scaleLinear() - .domain([300, 1200]) - .range([minPadding, maxPadding]) - .clamp(true); - - const layout = cloud() - .size([screenWidth, 400]) - .words(data.map((d) => ({ text: d.text, size: wordSizeScale(screenWidth) }))) - .padding((d) => paddingScale(screenWidth)) - .rotate(() => Math.floor(Math.random() * 21) - 10) - .font("Arial") - .fontSize((d) => d.size) - .on("end", draw); - layout.start(); - - - function draw(words) { - const svg = d3.select(wordCloudRef.current) - .append("svg") - .attr("width", layout.size()[0]) - .attr("height", layout.size()[1]) - .append("g") - .attr("transform", "translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")"); - - svg.selectAll("text") - .data(words) - .enter() - .append("text") - .style("font-size", d => d.size + "px") - .style("font-family", "Arial") - .style("fill", d => color(d.text)) - .attr("class", "word-cloud-word") - .attr("text-anchor", "middle") - .attr("transform", d => "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")") - .text(d => d.text) - .on('click', handleClick); - } - - function handleClick(d) { - const word = d3.select(this); - const isSelected = word.classed("selected"); - - if (!isSelected) { - d3.selectAll(".word-cloud-word") - .style("font-weight", "normal") - .classed("selected", false); - - word.style("font-weight", "bold") - .classed("selected", true); - } - - const descriptionContainer = d3.select(".description-container"); - const matchedData = data.find(item => item.text === word.text()); - descriptionContainer.text(matchedData.text + ": " + matchedData.description); - } - }; - - drawWordCloud(data); - }, [data]); - - return ( - - - - - - Cliquez sur un mot pour plus de détails - - - ); -}; - -export default WordCloud; diff --git a/src/pages/Home.js b/src/pages/Home.js index d86fe78..04f7b8e 100644 --- a/src/pages/Home.js +++ b/src/pages/Home.js @@ -1,44 +1,13 @@ import React from 'react'; import Button from '@mui/material/Button'; import "./Home.css"; -import { Container, Grid } from '@mui/material'; import ProfileImage from '../components/ProfileImage'; -import FloatingActionButton from '../components/FloatingActionButton'; import TypingEffect from '../components/TypingEffect'; -import WordCloud from '../components/WordCloud'; -import InfoBox from '../components/InfoBox'; -import ProjectCardSection from '../components/ProjectCardSection'; function Home() { - const data = [ - { text: "JavaScript", value: 35, description: "Langage de programmation pour le développement web." }, - { text: "Python", value: 45, description: "Langage de programmation polyvalent et puissant." }, - { text: "React", value: 40, description: "Bibliothèque JavaScript pour la création d'interfaces utilisateur." }, - { text: "Node.js", value: 35, description: "Plateforme de développement côté serveur en JavaScript." }, - { text: "HTML/CSS", value: 50, description: "Langages de base pour la création de pages web." }, - { text: "Git", value: 45, description: "Système de contrôle de version pour le suivi des modifications de code." }, - { text: "Docker", value: 30, description: "Plateforme de conteneurisation pour l'exécution d'applications." }, - { text: "SQL", value: 40, description: "Langage de requête pour interagir avec les bases de données relationnelles." }, - { text: "C++", value: 20, description: "Langage de programmation pour le développement système et les applications." }, - { text: "Java", value: 30, description: "Langage de programmation polyvalent pour les applications." }, - { text: "TypeScript", value: 35, description: "Langage de programmation typé pour le développement JavaScript." }, - { text: "Ruby", value: 25, description: "Cadre d'application web basé sur Ruby." }, - { text: "PHP", value: 25, description: "Langage de script pour le développement web côté serveur." }, - { text: "DevOps", value: 35, description: "Méthodologie de développement logiciel centrée sur la collaboration entre équipes de développement et opérations." }, - { text: "Ansible", value: 30, description: "Outil d'automatisation pour la gestion de configuration et le déploiement d'applications." }, - { text: "Vue.js", value: 20, description: "Framework JavaScript progressif pour la création d'interfaces utilisateur." }, - { text: "Angular", value: 30, description: "Plateforme de développement d'applications web côté client." }, - { text: "API REST", value: 40, description: "Architecture d'API pour les services web." }, - { text: "Express.js", value: 30, description: "Cadre d'application web pour Node.js." }, - { text: "GraphQL", value: 25, description: "Langage de requête pour les API et les services web." }, - { text: "GraphQL", value: 25, description: "Langage de requête pour les API et les services web." }, - - ]; - return ( <>
-

@@ -55,34 +24,6 @@ function Home() {

-
-
- - - - - - - -
- - - -
- - - - - - - -
-
); }