import React from 'react'; import { SimulationInfo, SimulationUpdate } from '../App'; import { Play, Pause, Square, Trash2 } from 'lucide-react'; import TimelineSlider from './TimelineSlider'; interface Props { simulations: SimulationInfo[]; selectedSimulation: string | null; currentData: SimulationUpdate | null; isAutoPlaying: boolean; onSelectSimulation: (id: string) => void; onDeleteSimulation: (id: string) => void; onControlSimulation: (id: string, action: string) => void; onSeek: (step: number) => void; onToggleAutoPlay: () => void; onRestart: () => void; } const SimulationList: React.FC = ({ simulations, selectedSimulation, currentData, isAutoPlaying, onSelectSimulation, onDeleteSimulation, onControlSimulation, onSeek, onToggleAutoPlay, onRestart, }) => { const formatTime = (seconds: number) => { const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = Math.floor(seconds % 60); return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; }; return (

Active Simulations

{simulations.length === 0 ? (
No simulations running
) : (
{simulations.map((sim) => (
onSelectSimulation(sim.id)} style={{ cursor: 'pointer', border: selectedSimulation === sim.id ? '2px solid #00aaff' : '1px solid #444', }} >
{sim.is_running ? 'Running' : 'Paused'}
Bodies
{sim.bodies_count}
Step
{sim.current_step.toLocaleString()}
Runtime
{formatTime(sim.elapsed_time)}
ID
{sim.id.substring(0, 8)}...
{/* Timeline slider slides out from selected simulation */} {selectedSimulation === sim.id && currentData && (
)}
))}
)}
); }; export default SimulationList;