Download frontend/app/components/LoadingScreen.tsx from nivakaran/modelx: direct link, hf CLI and curl.
- Browser
- Download file 4.03 kB
-
https://huggingface.co/spaces/nivakaran/modelx/resolve/main/frontend/app/components/LoadingScreen.tsx
- Command line
-
hf download hf://spaces/nivakaran/modelx/frontend/app/components/LoadingScreen.tsx
-
curl -L -o LoadingScreen.tsx https://huggingface.co/spaces/nivakaran/modelx/resolve/main/frontend/app/components/LoadingScreen.tsx
4.03 kB
| "use client"; | |
| import { useEffect, useState } from "react"; | |
| import { motion } from "framer-motion"; | |
| import { Card } from "./ui/card"; | |
| import { Loader2, Zap } from "lucide-react"; | |
| export default function LoadingScreen() { | |
| const [progress, setProgress] = useState(0); | |
| const [loadingText, setLoadingText] = useState("Initializing Roger Platform..."); | |
| useEffect(() => { | |
| const interval = setInterval(() => { | |
| setProgress((prev) => { | |
| if (prev >= 95) { | |
| return prev; | |
| } | |
| return prev + 5; | |
| }); | |
| }, 200); | |
| const textInterval = setInterval(() => { | |
| setLoadingText((prev) => { | |
| const texts = [ | |
| "Initializing Roger Platform...", | |
| "Connecting to Intelligence Agents...", | |
| "Loading Social Media Monitor...", | |
| "Loading Political Intelligence...", | |
| "Loading Economic Analysis...", | |
| "Loading Meteorological Data...", | |
| "Establishing WebSocket Connection...", | |
| "Syncing with Database...", | |
| "Preparing Real-Time Dashboard..." | |
| ]; | |
| const currentIndex = texts.indexOf(prev); | |
| return texts[(currentIndex + 1) % texts.length]; | |
| }); | |
| }, 1500); | |
| return () => { | |
| clearInterval(interval); | |
| clearInterval(textInterval); | |
| }; | |
| }, []); | |
| return ( | |
| <div className="min-h-screen w-full flex items-center justify-center bg-gradient-to-br from-background via-background/95 to-primary/5"> | |
| <Card className="p-12 bg-card/95 backdrop-blur border-border max-w-lg w-full mx-4"> | |
| <motion.div | |
| initial={{ opacity: 0, y: 20 }} | |
| animate={{ opacity: 1, y: 0 }} | |
| transition={{ duration: 0.5 }} | |
| className="space-y-8" | |
| > | |
| {/* Logo/Icon */} | |
| <div className="flex items-center justify-center gap-3"> | |
| <motion.div | |
| animate={{ rotate: 360 }} | |
| transition={{ duration: 2, repeat: Infinity, ease: "linear" }} | |
| > | |
| <Zap className="w-12 h-12 text-primary" /> | |
| </motion.div> | |
| <h1 className="text-3xl font-bold bg-gradient-to-r from-primary to-primary/60 bg-clip-text text-transparent"> | |
| ROGER | |
| </h1> | |
| </div> | |
| {/* Progress Bar */} | |
| <div className="space-y-3"> | |
| <div className="h-2 bg-muted rounded-full overflow-hidden"> | |
| <motion.div | |
| className="h-full bg-gradient-to-r from-primary via-primary/80 to-primary/60" | |
| initial={{ width: 0 }} | |
| animate={{ width: `${progress}%` }} | |
| transition={{ duration: 0.3 }} | |
| /> | |
| </div> | |
| <div className="flex items-center justify-between text-xs text-muted-foreground"> | |
| <span>{progress}%</span> | |
| <span>Loading Intelligence Platform</span> | |
| </div> | |
| </div> | |
| {/* Loading Text */} | |
| <motion.div | |
| key={loadingText} | |
| initial={{ opacity: 0 }} | |
| animate={{ opacity: 1 }} | |
| transition={{ duration: 0.5 }} | |
| className="text-center" | |
| > | |
| <div className="flex items-center justify-center gap-2 text-muted-foreground"> | |
| <Loader2 className="w-4 h-4 animate-spin" /> | |
| <p className="text-sm font-mono">{loadingText}</p> | |
| </div> | |
| </motion.div> | |
| {/* Info */} | |
| <div className="text-center space-y-2 pt-4 border-t border-border"> | |
| <p className="text-xs text-muted-foreground"> | |
| Real-Time Situational Awareness for Sri Lanka | |
| </p> | |
| <div className="flex items-center justify-center gap-2 text-xs text-muted-foreground"> | |
| <span>6 Domain Agents</span> | |
| <span>•</span> | |
| <span>47+ Data Sources</span> | |
| <span>•</span> | |
| <span>Live Updates</span> | |
| </div> | |
| </div> | |
| </motion.div> | |
| </Card> | |
| </div> | |
| ); | |
| } | |