import { t } from "@lingui/macro"; import { Avatar, AvatarFallback, AvatarImage, Tooltip } from "@reactive-resume/ui"; import { cn } from "@reactive-resume/utils"; import { motion } from "framer-motion"; import { useMemo } from "react"; import { useContributors } from "@/client/services/resume/contributors"; export const ContributorsSection = () => { const { github, crowdin, loading } = useContributors(); const contributors = useMemo(() => { if (github && crowdin) return [...github, ...crowdin]; return []; }, [github, crowdin]); return (

{t`By the community, for the community.`}

{t`Reactive Resume thrives thanks to its vibrant community. This project owes its progress to numerous individuals who've dedicated their time and skills. Below, we celebrate the coders who've enhanced its features on GitHub and the linguists whose translations on Crowdin have made it accessible to a broader audience.`}

{loading && (
{Array.from({ length: 30 }) .fill(0) .map((_, index) => ( ))}
)}
{contributors.map((contributor, index) => ( = 30 && "hidden lg:block")} whileInView={{ opacity: 1, scale: 1, transition: { delay: index * 0.025 } }} > {contributor.name} ))}
); };