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; } export default function LoadingScreen({ message = "Loading...", variant = 'full', size = 'md', showProgress = false, duration = 3000 }: 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 systems...", "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++; }, 800); 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 */}
Ae
{/* Animated Loading Bars */}
{[...Array(5)].map((_, i) => (
))}
{/* Progress Bar */} {showProgress && (
{Math.round(progress)}%
)} {/* Loading Message */}

{currentMessage}

Please wait while we prepare your experience
{/* Matrix-style Effect */}
{[...Array(20)].map((_, i) => (
{Math.random().toString(2).substr(2, 1)}
))}
); }