"use client"; import { motion, type Variants } from "motion/react"; import { useReducedMotion } from "@/app/hooks/useReducedMotion"; import type { PortfolioProjectView } from "@/lib/portfolio-data"; import { DrawLine } from "./animations/DrawLine"; import MagneticButton from "./cinematic/MagneticButton"; import { Section } from "./Section"; export default function Projects({ projects, }: { projects: PortfolioProjectView[]; }) { const shouldReduceMotion = useReducedMotion(); const gridVariants: Variants = { hidden: {}, visible: { transition: { delayChildren: 0.08, staggerChildren: 0.08, }, }, }; const cardVariants: Variants = { hidden: shouldReduceMotion ? { opacity: 0 } : { opacity: 0, y: 24, clipPath: "inset(100% 0 0 0)" }, visible: { opacity: 1, y: 0, clipPath: "inset(0% 0 0 0)", transition: shouldReduceMotion ? { duration: 0.25 } : { duration: 0.8, ease: [0.16, 1, 0.3, 1] }, }, }; return (
{projects.map((project) => (
{project.category}

{project.title}

{project.subtitle && (

{project.subtitle}

)}
{project.status}

{project.description}

    {project.technologies.slice(0, 5).map((tech) => (
  • {tech}
  • ))}
{project.githubUrl && ( Ver codigo )} {project.demoUrl && (project.demoAvailability === "available" || project.demoAvailability === "unknown") && ( Abrir projeto {project.demoAvailability === "unknown" && ( {" "} Disponibilidade não verificada )} )} {project.demoAvailability === "unavailable" && ( Demo indisponível na última verificação )}
))}
Explorar todos os cases Ver servicos relacionados
); }