Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
224 changes: 167 additions & 57 deletions src/components/Contributors.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import React, { useState, useEffect } from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faGithub, faLinkedin } from "@fortawesome/free-brands-svg-icons";
import { faHeart } from "@fortawesome/free-solid-svg-icons";
import Splide from "@splidejs/splide";
import "@splidejs/splide/dist/css/splide.min.css";

const owner = "harmeetsingh11";
const repoName = "RefactorMate";
Expand Down Expand Up @@ -35,6 +37,39 @@ function Contributors() {
const [otherContri, setOtherContri] = useState<Contributor[]>([]);
const [topContri, setTopContri] = useState<Contributor[]>([]);
const [allContributors, setAllContributors] = useState<Contributor[]>([]);
const [isMobile, setIsMobile] = useState(false);

useEffect(() => {
if (typeof window !== "undefined") {
setIsMobile(window.innerWidth < 845);
const handleResize = () => {
setIsMobile(window.innerWidth < 845);
};
window.addEventListener("resize", handleResize);

return () => {
window.removeEventListener("resize", handleResize);
};
}
}, []);

useEffect(() => {
if (topContri.length >= 3 && isMobile) {
const splide = new Splide("#teams-card-splide", {
type: "loop",
perPage: 1,
perMove: 1,
arrows: false,
pagination: true,
});

splide.mount();

return () => {
splide.destroy();
};
}
}, [topContri, isMobile]);

useEffect(() => {
async function fetchAllContributors() {
Expand Down Expand Up @@ -141,6 +176,79 @@ function Contributors() {

function renderTopContributors(contributors: Contributor[]) {
if (contributors.length < 3) return null;
if (isMobile) {
return (
<div id="teams-card-splide" className="splide">
<div className="splide__track overflow-visible">
<div className="splide__list">
<div className="splide__slide" id="c2">
<div>
<div className="contributor relative text-center flex flex-col justify-center items-center gap-0" key={contributors[0].login}>
<a href={contributors[0].html_url} target="__blank">
<img
className="circle w-[200px] h-[200px] bg-secondary rounded-full flex justify-center items-center relative transition-all duration-300 ease-in-out hover:shadow-[0_0px_20px_rgba(48,48,48,0.8)] hover:scale-[1.09] z-10"
src={contributors[0].avatar_url}
alt={`${contributors[0].login}'s Picture`}
/>
</a>
<div className="rank w-[50px] h-[50px] bg-[#e7e7e7] rounded-full flex justify-center items-center relative bottom-[44px] left-[50px] z-20">
<h1 className="text-[#2f7191] font-[Poppins] text-[48px] font-extrabold leading-[72px]">1</h1>
</div>
<div className="crown absolute top-[-132px] left-1/2 transform -translate-x-1/2 z-0" id="rank1">
<img src="src\assets\crown.png" className="relative left-[80px] transform rotate-[20deg] scale-[1.5] w-[200px] h-[200px] max-w-none" alt="crown" />
</div>
<p id="name1" className={`text-black relative bottom-[25px] font-poppins text-[30px] font-bold`}>{contributors[0].name || contributors[0].login}</p>
<p id="co1" className={`text-[#00000094] relative bottom-[25px] font-poppins text-[30px] font-medium max-[845px]:font-[25px] max-[845px]:font-[500] max-[845px]:mb-[10px]`}>contributions {contributors[0].contributions}</p>
</div>
</div>
</div>
<div className="splide__slide top-contributor" id="c1">
<div>
<div className="contributor relative text-center flex justify-center items-center flex-col gap-0" key={contributors[1].login}>
<a href={contributors[1].html_url} target="__blank">
<img
className="circle w-[200px] h-[200px] bg-[#ff9800] rounded-[50%] flex justify-center items-center relative [transition:all_0.3s_ease-in-out] [box-shadow:1px_5px_6.8px_4px_rgba(0,_0,_0,_0.25)] hover:[box-shadow:0_0px_20px_rgba(48,_48,_48,_0.8)] hover:scale-[1.09] z-10"
src={contributors[1].avatar_url}
alt={`${contributors[1].login}'s Picture`}
/>
</a>
<div className="rank w-[50px] h-[50px] bg-[#e7e7e7] rounded-[50%] flex justify-center items-center relative bottom-[44px] left-[50px] z-20">
<h1 className="text-[#2f7191] font-[Poppins] text-[48px] font-extrabold leading-[72px]">2</h1>
</div>
<div className="crown absolute -top-[100px] left-2/4 -translate-x-1/2 z-0" id="rank">
<img className="max-w-none relative left-[50px] top-0 h-[160px] w-[160px] rotate-[20deg] max-[845px]:w-[250px] max-[845px]:h-[250px] max-[845px]:top-[-60px]" src="src\assets\crown.png" />
</div>
<p id="name2" className={`text-black relative bottom-[35px] font-poppins text-[20px] font-bold max-[845px]:font-[30px] max-[845px]:font-[700]`}>{contributors[1].name || contributors[1].login}</p>
<p id="co2" className={`text-[#00000094] relative bottom-[25px] font-poppins text-[20px] font-medium max-[845px]:font-[25px] max-[845px]:font-[500] max-[845px]:mb-[10px]`}>contributions {contributors[1].contributions}</p>
</div>
</div>
</div>
<div className="splide__slide" id="c3">
<div>
<div className="contributor relative text-center flex justify-center items-center flex-col gap-0" key={contributors[2].login}>
<a href={contributors[2].html_url} target="__blank">
<img
className="circle w-[200px] h-[200px] bg-[#ff9800] rounded-[50%] flex justify-center items-center relative [transition:all_0.3s_ease-in-out] [box-shadow:1px_5px_6.8px_4px_rgba(0,_0,_0,_0.25)] hover:[box-shadow:0_0px_20px_rgba(48,_48,_48,_0.8)] hover:scale-[1.09] z-10"
src={contributors[2].avatar_url}
alt={`${contributors[2].login}'s Picture`}
/>
</a>
<div className="rank w-[50px] h-[50px] bg-[#e7e7e7] rounded-[50%] flex justify-center items-center relative bottom-[44px] left-[50px] z-20">
<h1 className="text-[#2f7191] font-[Poppins] text-[48px] font-extrabold leading-[72px]">3</h1>
</div>
<div className="crown absolute -top-[100px] left-2/4 -translate-x-1/2 z-0" id="rank">
<img className="max-w-none relative left-[50px] top-0 h-[160px] w-[160px] rotate-[20deg] max-[845px]:w-[250px] max-[845px]:h-[250px] max-[845px]:top-[-60px]" src="src\assets\crown.png" />
</div>
<p id="name3" className={`text-black relative bottom-[35px] font-poppins text-[20px] font-bold text-black max-[845px]:font-[30px] max-[845px]:font-[700]`}>{contributors[2].name || contributors[2].login}</p>
<p id="co3" className={`text-[#00000094] relative bottom-[25px] font-poppins text-[20px] font-medium max-[845px]:font-[25px] max-[845px]:font-[500] max-[845px]:mb-[10px]`}>contributions {contributors[2].contributions}</p>
</div>
</div>
</div>
</div>
</div>
</div>
);
} else {
return (
<div className="top-contributor flex justify-center items-end gap-[40px]">
<div className="contributor relative text-center flex justify-center items-center flex-col gap-0" key={contributors[1].login}>
Expand Down Expand Up @@ -198,75 +306,77 @@ function Contributors() {
</div>
</div>
);
}
}

function loadMore() {
setCurrentPage(currentPage + 1);
}

return (
<div className="m-0 font-arial min-h-screen w-full block">
<div id="ourteam" className="flex justify-center items-center font-bold text-[38px] pt-[160px] text-center">Maintainers</div><br />
<div id="team-grid" className="flex justify-center mt-0">
{/* Team Member */}
<div className={`bg-[#4285f430] team-member flex items-center border border-[#4285f430] rounded-[20px] p-[20px] bg-center bg-cover bg-no-repeat transition-all duration-500 pr-0 hover:scale-[1.03]`}>
<div className={`bg-[#2b6cb060] border-[#3498db] card1 pt-8 rounded-[2rem] flex flex-col items-center relative w-[85%] h-full`}>
<div className="margin h-[90%] flex flex-col justify-center items-center">
<div className="image-div flex-none flex justify-center items-center">
<img className="rounded-[50%] w-[28%]" src={`https://github.com/harmeetsingh11.png`} alt="Harmeet Singh" />
</div>
<div className="info-div text-center mt-[5px]">
<h2 className="mt-[10px] text-[1.5em] font-bold mb-2 font-arial">Harmeet Singh</h2>
<p className="mt-[5px] block text-[16px] text-[#000000] font-arial">Full Stack Developer</p>
</div>
<span className="badge absolute top-[10px] right-[10px] inline-block px-[10px] py-[2px] rounded-[20px] text-[1em] maintainer bg-[rgba(217,_217,_217,_1)] font-bold text-[#6e6e6e]">
Maintainer
</span>
</div>
</div>
{/* Social Links for Team Member */}
<div className="social-links w-[16%] p-[12px] pl-[12px] pr-[12px]">
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c]">
<a
href="https://github.com/sponsors/harmeetsingh11"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faHeart} className={`social-icon scale-[2.5] max-[525px]:scale-125 `} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer`}>Sponsor</p>
</div>
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c]">
<a
href="https://github.com/harmeetsingh11"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faGithub} className={`social-icon scale-[2.5] max-[525px]:scale-125 `} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer`}>Github</p>
</div>
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c]">
<a
href="https://www.linkedin.com/in/harmeetsingh113/"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faLinkedin} className={` social-icon scale-[2.5] max-[525px]:scale-125 `} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer`}>LinkedIn</p>
</div>
</div>
<div className="m-0 font-arial min-h-screen w-full">
<div id="ourteam" className="flex justify-center items-center font-bold text-[38px] pt-[160px] pb-[20px] text-center max-md:text-[32px] max-sm:text-[28px] max-sm:pt-[120px] max-sm:pb-[40px] max-sm:ml-[40px]">Maintainers</div>

<div id="team-grid" className="flex justify-center mt-0">
{/* Team Member */}
<div className={`bg-[#4285f430] team-member flex items-center border border-[#4285f430] rounded-[20px] p-[20px] bg-center bg-cover bg-no-repeat transition-all duration-500 pr-0 hover:scale-[1.03] max-md:flex-col max-md:p-[15px] max-md:ml-[50px] max-sm:ml-[20px]`}>
<div className={`bg-[#2b6cb060] border-[#3498db] card1 pt-8 rounded-[2rem] flex flex-col items-center relative w-[85%] h-full max-md:w-full max-md:pt-6 max-sm:pt-4`}>
<div className="margin h-[90%] flex flex-col justify-center items-center">
<div className="image-div flex-none flex justify-center items-center">
<img className="rounded-[50%] w-[28%] max-md:w-[35%] max-sm:w-[45%]" src={`https://github.com/harmeetsingh11.png`} alt="Harmeet Singh" />
</div>
<div className="info-div text-center mt-[5px]">
<h2 className="mt-[10px] text-[1.5em] font-bold mb-2 font-arial max-md:text-[1.3em] max-sm:text-[1.1em]">Harmeet Singh</h2>
<p className="mt-[5px] block text-[16px] text-[#000000] font-arial max-md:text-[14px] max-sm:text-[12px]">Full Stack Developer</p>
</div>
<span className="badge absolute top-[10px] right-[10px] inline-block px-[10px] py-[2px] rounded-[20px] text-[1em] maintainer bg-[rgba(217,_217,_217,_1)] font-bold text-[#6e6e6e] max-md:text-[0.9em] max-sm:text-[0.8em]">
Maintainer
</span>
</div>
</div>
{/* Social Links for Team Member */}
<div className="social-links w-[16%] p-[12px] pl-[12px] pr-[12px] max-md:w-full max-md:flex max-md:justify-center max-md:mt-2 max-sm:mt-0 max-sm:gap-6">
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c] max-md:mx-[1rem] max-md:w-auto max-sm:mx-[0.5rem]">
<a
href="https://github.com/sponsors/harmeetsingh11"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faHeart} className={`social-icon scale-[2.5] max-md:scale-[2] max-sm:scale-[1.5]`} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer max-md:text-[12px] max-sm:text-[10px]`}>Sponsor</p>
</div>
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c] max-md:mx-[1rem] max-md:w-auto max-sm:mx-[0.5rem]">
<a
href="https://github.com/harmeetsingh11"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faGithub} className={`social-icon scale-[2.5] max-md:scale-[2] max-sm:scale-[1.5]`} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer max-md:text-[12px] max-sm:text-[10px]`}>Github</p>
</div>
<div className="social-links-items [transition:0.3s_ease-in-out] flex justify-center flex-col items-center pt-[25px] rounded-[10px] w-full mx-[0rem] my-[0.6rem] hover:bg-[#2b6cb05c] max-md:mx-[1rem] max-md:w-auto max-sm:mx-[0.5rem]">
<a
href="https://www.linkedin.com/in/harmeetsingh113/"
target="_blank"
rel="noopener noreferrer"
>
<FontAwesomeIcon icon={faLinkedin} className={`social-icon scale-[2.5] max-md:scale-[2] max-sm:scale-[1.5]`} />
</a>
<p className={`text-[#000000] text-[14px] mt-[10px] font-arial cursor-pointer max-md:text-[12px] max-sm:text-[10px]`}>LinkedIn</p>
</div>
</div>
</div>
</div>

<div className="teams-container text-center h-[95vh] flex flex-col justify-center items-center">
<h1 className="contri text-[38px] font-bold">Top 3 Contributors</h1>
<div id="contributors" className="mt-[110px] flex justify-center items-end gap-[40px]">{renderTopContributors(topContri)}</div>
<div className="teams-container text-center h-[95vh] flex flex-col justify-center items-center max-[845px]:h-auto max-[845px]:m-[50px 0px]">
<h1 className="contri text-[38px] mt-[50px] font-bold max-md:text-[32px] max-sm:text-[28px] max-md:mt-[60px] max-md:mb-[40px] max-sm:ml-[40px]">Top 3 Contributors</h1>
<div id="contributors" className="mt-[110px] flex justify-center items-end gap-[40px] max-[845px]:mt-0 max-[845px]:overflow-x-hidden max-[845px]:w-[100%] max-[845px]:h-[450px]">{renderTopContributors(topContri)}</div>
</div>

<h1 className="text-[38px] text-center font-bold">Other Contributors</h1>
<div id="team-grid1" className="grid grid-cols-[repeat(auto-fit,_minmax(300px,_1fr))] gap-[10px] ml-8 mr-8 p-[30px]">
<h1 className="text-[38px] text-center font-bold max-md:text-[32px] max-sm:text-[28px] max-sm:pt-[120px] max-sm:pb-[40px] max-md:ml-[40px] max-sm:ml-[30px]">Other Contributors</h1>
<div id="team-grid1" className="grid grid-cols-[repeat(auto-fit,_minmax(300px,_1fr))] gap-[10px] ml-8 mr-8 p-[30px] max-md:ml-[50px] max-sm:ml-10 max-[375px]:ml-0">
{renderContributors(otherContri.slice(0, currentPage * itemsPerPage))}
</div>

Expand Down
2 changes: 1 addition & 1 deletion src/components/ScrollToTopButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const ScrollToTopButton = () => {
<button
type="button"
onClick={scrollToTop}
className={`fixed bottom-4 right-4 bg-blue-500 text-white p-4 rounded-full shadow-lg transition-opacity duration-300 hover:bg-blue-600 hover:shadow-xl ${isVisible ? 'opacity-100' : 'opacity-0'}`}
className={`fixed bottom-16 right-4 bg-blue-500 text-white p-4 rounded-full shadow-lg transition-opacity duration-300 hover:bg-blue-600 hover:shadow-xl ${isVisible ? 'opacity-100' : 'opacity-0'}`}
style={{ fontWeight: 'bolder', fontSize: '2rem', lineHeight: '1rem' }}
>
Expand Down
7 changes: 6 additions & 1 deletion tailwind.config.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
/** @type {import('tailwindcss').Config} */
export default {
content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
important: true,
theme: {
extend: {},
extend: {
screens: {
'xs': '480px',
}
}
},
plugins: [],
};