"use client"; import React, { useState } from "react"; import { motion, useMotionValue, useTransform } from "framer-motion"; // Removed local fallback JSX declaration — use the official React type definitions instead: // install @types/react and @types/react-dom so JSX.IntrinsicElements is provided by those packages. // 1. Updated ColorWay interface interface ColorWay { card: string; text: string; titleColor: string; // Added title color } // 2. Updated COLOR_WAYS array const COLOR_WAYS: ColorWay[] = [ { card: "#FEEEDF", text: "#173C46", titleColor: "#173C46" }, { card: "#FEEEDF", text: "#EA627F", titleColor: "#173C46" }, // Example: Title is dark, text is pink { card: "#DEE5D4", text: "#173C46", titleColor: "#EA627F" }, { card: "#DEE5D4", text: "#EA627F", titleColor: "#173C46" }, { card: "#B8C0AD", text: "#173C46", titleColor: "#173C46" }, { card: "#B8C0AD", text: "#173C46", titleColor: "#EA627F" }, ]; interface CardData { id: number; title: string; summary: string; tracks: string[]; } const cardData: CardData[] = [ { id: 1, title: " WEBSITE", summary: "FFind out what makes GoonMAXXER unique.With this innovative website you will be able to explore various features and functionalities that set GoonMAXXER apart from the rest.", tracks: ["Gemini", "Auth0", "VibeCODING", "SmellyMaxxing", "shitposting"], }, { id: 2, title: "Intro to React", summary: "Learn the fundamentals of React, including components, state, and props.", tracks: ["React", "JS", "Frontend"], }, { id: 3, title: "State Management", summary: "Explore complex state solutions with Zustand, Redux, and Context API.", tracks: ["React", "Zustand", "State"], }, { id: 4, title: "Next.js 14", summary: "Master the app router, server actions, and data fetching.", tracks: ["Next.js", "React", "Fullstack"], }, { id: 5, title: "UI/UX Principles", summary: "A complete guide to user-centric design, prototyping, and testing.", tracks: ["Design", "UI", "UX"], }, { id: 6, title: "Node.js Essentials", summary: "Build scalable, high-performance backend applications with Node.js.", tracks: ["Node", "Backend", "JS"], }, { id: 7, title: "TypeScript", summary: "Add static typing to your JavaScript projects for robust, large-scale apps.", tracks: ["TypeScript", "JS", "DevOps"], }, { id: 8, title: "Framer Motion", summary: "Create production-ready animations for your React applications.", tracks: ["React", "Animation", "Framer"], }, ].reverse(); const SwipeCards: React.FC = () => { const [cards, setCards] = useState(cardData); const onSwipe = () => { setCards((prev) => prev.slice(0, prev.length - 1)); }; const handleReset = () => { setCards(cardData); }; return (
{cards.length > 0 ? ( cards.map((card, index) => { const colorWay = COLOR_WAYS[card.id % COLOR_WAYS.length]; return ( ); }) ) : ( // ... (empty state)

No more cards!

You've swiped through them all.

)}
); }; interface CardProps { cardData: CardData; colorWay: ColorWay; isFront: boolean; onSwipe: () => void; } const Card: React.FC = ({ cardData, colorWay, isFront, onSwipe }) => { const { title, summary, tracks } = cardData; const x = useMotionValue(0); const rotate = useTransform(x, [-250, 250], [-25, 25]); const opacity = useTransform( x, [-250, -100, 0, 100, 250], [0, 1, 1, 1, 0], ); const acceptOpacity = useTransform(x, [50, 150], [0, 1]); const rejectOpacity = useTransform(x, [-150, -50], [1, 0]); const badgeRotate = useTransform(x, [-150, 150], [-15, 15]); const handleDragEnd = (event: MouseEvent | TouchEvent | PointerEvent, info: { offset: { x: number } }) => { if (Math.abs(info.offset.x) > 100) { onSwipe(); } }; return ( {/* Accept/Reject Badges */}

Accept

Reject

{/* Card Content */}
{/* 3. Applied the specific titleColor here */}

{title}

{/* This summary

will inherit colorWay.text from the parent */}

{summary}

{/* This

will also inherit colorWay.text */}

Tracks

{tracks.map((track) => ( {track} ))}
); }; export default SwipeCards;