BOLT / components /CodeApplicationProgress.tsx
legends810's picture
Upload folder using huggingface_hub
d83e271 verified
import React from 'react';
import { motion, AnimatePresence } from 'framer-motion';
export interface CodeApplicationState {
stage: 'analyzing' | 'installing' | 'applying' | 'complete' | null;
packages?: string[];
installedPackages?: string[];
filesGenerated?: string[];
message?: string;
}
interface CodeApplicationProgressProps {
state: CodeApplicationState;
}
export default function CodeApplicationProgress({ state }: CodeApplicationProgressProps) {
if (!state.stage || state.stage === 'complete') return null;
return (
<AnimatePresence mode="wait">
<motion.div
key="loading"
initial={{ opacity: 0, y: 10 }}
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -10 }}
transition={{ duration: 0.3 }}
className="inline-block bg-gray-100 rounded-[10px] p-3 mt-2"
>
<div className="flex items-center gap-3">
{/* Rotating loading indicator */}
<motion.div
animate={{ rotate: 360 }}
transition={{ duration: 1, repeat: Infinity, ease: "linear" }}
className="w-4 h-4"
>
<svg className="w-full h-full" viewBox="0 0 24 24" fill="none">
<circle
cx="12"
cy="12"
r="10"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeDasharray="31.416"
strokeDashoffset="10"
className="text-gray-700"
/>
</svg>
</motion.div>
{/* Simple loading text */}
<div className="text-sm font-medium text-gray-700">
Applying to sandbox...
</div>
</div>
</motion.div>
</AnimatePresence>
);
}