import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Toaster } from 'react-hot-toast'; import VideoInput from './components/VideoInput'; import AnalysisDashboard from './components/AnalysisDashboard'; import ClipCustomizer from './components/ClipCustomizer'; import GenerationTracker from './components/GenerationTracker'; import DownloadGrid from './components/DownloadGrid'; const STEPS = ['input', 'analysis', 'customize', 'generate', 'download']; function App() { const [currentStep, setCurrentStep] = useState('input'); const [sessionId, setSessionId] = useState(null); const [metadata, setMetadata] = useState(null); const [analysis, setAnalysis] = useState(null); const [clipConfigs, setClipConfigs] = useState([]); const [generationStatus, setGenerationStatus] = useState(null); const goToStep = (step) => setCurrentStep(step); const handleVideoLoaded = (sessionData) => { setSessionId(sessionData.session_id); setMetadata(sessionData.metadata); goToStep('analysis'); }; const handleAnalysisComplete = (analysisData) => { setAnalysis(analysisData); // Initialize clip configs from candidates const configs = analysisData.clip_candidates.map((candidate) => ({ clip_id: candidate.id, title: candidate.title || '', caption_style: 'heatwave', voice_preset: 'energetic_male', music_genre: 'energetic_electronic', color_grade: 'teal_orange', include_original_audio: false, include_stock_images: true, })); setClipConfigs(configs); goToStep('customize'); }; const handleCustomizeDone = (configs) => { setClipConfigs(configs); goToStep('generate'); }; const handleGenerationComplete = (status) => { setGenerationStatus(status); goToStep('download'); }; return (
{/* Header */}
🎬

ViralClipFactory

{/* Progress Steps */}
{STEPS.map((step, i) => (
i ? 'bg-green-500/20 text-green-400 border border-green-500/30' : 'bg-dark-800 text-white/30 border border-white/10'}`}> {STEPS.indexOf(currentStep) > i ? '✓' : i + 1}
{i < STEPS.length - 1 && (
i ? 'bg-green-500/50' : 'bg-white/10'}`} /> )}
))}
{sessionId && (
Session: {sessionId}
)}
{/* Main Content */}
{currentStep === 'input' && ( )} {currentStep === 'analysis' && ( )} {currentStep === 'customize' && ( )} {currentStep === 'generate' && ( )} {currentStep === 'download' && ( )}
{/* Footer */}
); } export default App;