'use client'; import { useCanvasStore } from '@/store'; import { useState, useEffect } from 'react'; import { Maximize2, ZoomIn, MousePointer, Activity, HardDrive } from 'lucide-react'; interface StatusBarProps { cursorX?: number; cursorY?: number; } export function StatusBar({ cursorX, cursorY }: StatusBarProps) { const { width, height, zoom } = useCanvasStore(); const [fps, setFps] = useState(0); const [memory, setMemory] = useState(null); // FPS counter useEffect(() => { let frameCount = 0; let lastTime = performance.now(); let animationFrameId: number; const calculateFPS = () => { frameCount++; const currentTime = performance.now(); const elapsed = currentTime - lastTime; if (elapsed >= 1000) { setFps(Math.round((frameCount * 1000) / elapsed)); frameCount = 0; lastTime = currentTime; } animationFrameId = requestAnimationFrame(calculateFPS); }; animationFrameId = requestAnimationFrame(calculateFPS); return () => { cancelAnimationFrame(animationFrameId); }; }, []); // Memory usage (if available in browser) useEffect(() => { const updateMemory = () => { // @ts-ignore - performance.memory is not in all browsers if (performance.memory) { // @ts-ignore const usedMB = Math.round(performance.memory.usedJSHeapSize / 1024 / 1024); setMemory(usedMB); } }; updateMemory(); const interval = setInterval(updateMemory, 2000); // Update every 2 seconds return () => clearInterval(interval); }, []); return (
{/* Left side - Canvas info */}
{/* Canvas dimensions */}
{width} × {height}
{/* Zoom level */}
{Math.round(zoom * 100)}%
{/* Cursor position */} {cursorX !== undefined && cursorY !== undefined && (
X: {Math.round(cursorX)}, Y: {Math.round(cursorY)}
)}
{/* Right side - Performance info */}
{/* FPS */}
{fps} FPS
{/* Memory usage */} {memory !== null && (
{memory} MB
)}
); }