Spaces:
Running
Running
| "use client" | |
| import { useState, useEffect } from "react" | |
| import { cn } from "@/lib/utils" | |
| const bootLines = [ | |
| "INITIALIZING BIOS...", | |
| "CHECKING MEMORY: 1024MB OK", | |
| "DETECTING PRIMARY BUS...", | |
| "LEROBOT.JS CORE v1.0.2", | |
| "LOADING OPERATOR CONSOLE...", | |
| "CONNECTION PROTOCOL: WEBSERIAL", | |
| "ENCRYPTION: AES-256", | |
| "SYSTEM STATUS: NOMINAL", | |
| "BOOT SEQUENCE COMPLETE.", | |
| ] | |
| export function BootSequence({ onComplete }: { onComplete: () => void }) { | |
| const [visibleLines, setVisibleLines] = useState<string[]>([]) | |
| const [show, setShow] = useState(true) | |
| useEffect(() => { | |
| const timeouts: NodeJS.Timeout[] = [] | |
| bootLines.forEach((line, index) => { | |
| timeouts.push( | |
| setTimeout(() => { | |
| setVisibleLines((prev) => [...prev, line]) | |
| }, index * 150), | |
| ) | |
| }) | |
| timeouts.push( | |
| setTimeout( | |
| () => { | |
| setShow(false) | |
| setTimeout(onComplete, 500) // Wait for fade out | |
| }, | |
| bootLines.length * 150 + 500, | |
| ), | |
| ) | |
| return () => timeouts.forEach(clearTimeout) | |
| }, [onComplete]) | |
| return ( | |
| <div | |
| className={cn( | |
| "fixed inset-0 z-50 flex items-center justify-center bg-black transition-opacity duration-500", | |
| show ? "opacity-100" : "opacity-0 pointer-events-none", | |
| )} | |
| > | |
| <div className="font-mono text-primary text-sm md:text-base p-4"> | |
| {visibleLines.map((line, index) => ( | |
| <p key={index} className="text-glitch" data-text={line}> | |
| > {line} | |
| </p> | |
| ))} | |
| </div> | |
| </div> | |
| ) | |
| } | |