import { useEffect, useState } from "react"; import { cn } from "@/lib/utils"; interface LoadingScreenProps { message?: string; variant?: "full" | "overlay" | "inline"; size?: "sm" | "md" | "lg"; showProgress?: boolean; duration?: number; accentColor?: string; } export default function LoadingScreen({ message = "Loading...", variant = "full", size = "md", showProgress = false, duration = 3000, accentColor = "from-aethex-500 to-neon-blue", }: LoadingScreenProps) { const [progress, setProgress] = useState(0); const [currentMessage, setCurrentMessage] = useState(message); useEffect(() => { if (showProgress) { const interval = setInterval(() => { setProgress((prev) => { const newProgress = prev + 100 / (duration / 100); return newProgress > 100 ? 100 : newProgress; }); }, 100); return () => clearInterval(interval); } }, [showProgress, duration]); useEffect(() => { const messages = [ "Initializing AeThex OS...", "Loading quantum processors...", "Calibrating neural networks...", "Synchronizing data streams...", "Preparing your experience...", ]; if (variant === "full") { let index = 0; const interval = setInterval(() => { setCurrentMessage(messages[index % messages.length]); index++; }, 1200); return () => clearInterval(interval); } }, [variant]); const sizeClasses = { sm: "h-4 w-4", md: "h-8 w-8", lg: "h-12 w-12", }; if (variant === "inline") { return (
{message}
); } const containerClasses = variant === "full" ? "fixed inset-0 bg-background/95 backdrop-blur-sm z-50" : "absolute inset-0 bg-background/80 backdrop-blur-sm z-40"; return (
{/* Logo Animation */}
AeThex Logo
{/* Animated Loading Bars */}
{[...Array(5)].map((_, i) => { const colorMap: Record = { "from-yellow-500 to-yellow-400": "bg-yellow-400", "from-green-500 to-green-400": "bg-green-400", "from-blue-500 to-blue-400": "bg-blue-400", "from-red-500 to-red-400": "bg-red-400", "from-cyan-500 to-cyan-400": "bg-cyan-400", "from-aethex-500 to-neon-blue": "bg-aethex-400", }; const barColor = colorMap[accentColor] || "bg-aethex-400"; return (
); })}
{/* Progress Bar */} {showProgress && (
{Math.round(progress)}%
)} {/* Loading Message */}

{currentMessage}

Please wait while we prepare your experience
); }