'use client'; import { AnimatePresence, motion, useReducedMotion } from 'framer-motion'; import { CheckCircle2, LucideIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Box } from '@/ui/Box'; import { Icon } from '@/ui/Icon'; import { Stack } from '@/ui/Stack'; import { Surface } from '@/ui/Surface'; import { Text } from '@/ui/Text'; export interface WorkflowStep { id: number; icon: LucideIcon; title: string; description: string; color: string; } interface WorkflowMockupProps { steps: WorkflowStep[]; } export function WorkflowMockup({ steps }: WorkflowMockupProps) { const shouldReduceMotion = useReducedMotion(); const [isMounted, setIsMounted] = useState(false); const [activeStep, setActiveStep] = useState(0); useEffect(() => { setIsMounted(true); }, []); useEffect(() => { if (!isMounted) return; const interval = setInterval(() => { setActiveStep((prev) => (prev + 1) % steps.length); }, 3000); return () => clearInterval(interval); }, [isMounted, steps.length]); if (!isMounted) { return ( {steps.map((step) => ( {step.title} ))} ); } return ( {/* Connection Lines */} {/* Steps */} {steps.map((step, index) => { const isActive = index === activeStep; const isCompleted = index < activeStep; const StepIcon = step.icon; return ( setActiveStep(index)} whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} > {isActive && ( )} {isCompleted ? ( ) : ( )} {step.title} ); })} {/* Active Step Preview - Mobile */} STEP {activeStep + 1}: {steps[activeStep]?.title || ''} {steps[activeStep]?.description.toUpperCase() || ''} ); }