"use client"; import { useMotionValueEvent, useScroll, useTransform, motion } from "framer-motion"; import React, { useEffect, useRef, useState } from "react"; import { Rocket, Database, Sparkles, Palette, Calendar, Layout, Users, Smartphone, FileText, Brain, Tags, Target, HelpCircle, Zap, Eye } from "lucide-react"; // Icon mapping const iconMap = { Rocket, Database, Sparkles, Palette, Calendar, Layout, Users, Smartphone, FileText, Brain, Tags, Target, HelpCircle, Zap, Eye, }; interface Feature { title: string; description: string; time?: string; traditional?: string; icon: keyof typeof iconMap; } interface WeekData { weekNumber: number; title: string; status: "completed" | "in_progress" | "planned"; description: string; features: Feature[]; metrics: { hours: string; cost: string; linesOfCode: string; }; achievements: string[]; } interface TimelineData { heading: string; description: string; weeks: WeekData[]; } interface BuildTimelineProps { data: TimelineData; } const StatusBadge = ({ status }: { status: WeekData["status"] }) => { const styles = { completed: "bg-teal-100 text-teal-700 border-teal-200", in_progress: "bg-amber-100 text-amber-700 border-amber-200", planned: "bg-slate-100 text-slate-600 border-slate-200", }; const labels = { completed: "Voltooid", in_progress: "Bezig", planned: "Gepland", }; return ( {labels[status]} ); }; const FeatureCard = ({ feature }: { feature: Feature }) => { const Icon = iconMap[feature.icon]; return (
{feature.description}
{feature.time && feature.traditional && ({data.description}
{week.description}
{/* Features */} {week.features.length > 0 && (