'use client'; import { motion, useReducedMotion } from 'framer-motion'; import { useState, useEffect } from 'react'; import { Box } from '@/ui/Box'; import { Text } from '@/ui/Text'; export function ProtestWorkflowMockup() { const shouldReduceMotion = useReducedMotion(); const [activeStep, setActiveStep] = useState(1); const [isMobile, setIsMobile] = useState(false); useEffect(() => { const checkMobile = () => setIsMobile(window.innerWidth < 768); checkMobile(); window.addEventListener('resize', checkMobile); return () => window.removeEventListener('resize', checkMobile); }, []); const steps = [ { name: 'Submit', status: 'pending', icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z' }, { name: 'Review', status: 'active', icon: 'M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4' }, { name: 'Resolve', status: 'resolved', icon: 'M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z' }, ]; const getStatusStyles = (status: string) => { switch (status) { case 'pending': return 'bg-panel-gray border-gray-700 text-gray-600'; case 'active': return 'bg-warning-amber/10 border-warning-amber text-warning-amber'; case 'resolved': return 'bg-success-green/10 border-success-green text-success-green'; default: return 'bg-panel-gray border-gray-700 text-gray-600'; } }; if (isMobile) { return ( {steps.map((step, i) => ( {step.name} {i < steps.length - 1 && ( )} ))} ); } const stepVariants = { hidden: { opacity: 0, y: shouldReduceMotion ? 0 : 10 }, visible: (i: number) => ({ opacity: 1, y: 0, transition: { delay: shouldReduceMotion ? 0 : i * 0.2, duration: 0.4 } }) }; return ( {steps.map((step, i) => ( !shouldReduceMotion && setActiveStep(i)} > {step.status === 'active' && ( )} {step.name} {i < steps.length - 1 && ( )} ))} ); }