"use client"; import React, { useCallback } from "react"; interface TimelineBarProps { totalSteps: number; currentStep: number; currentTime: number; // unix ms of current event (for date display) isPlaying: boolean; speed: number; onStepChange: (step: number) => void; onPlayPause: () => void; onSpeedChange: (speed: number) => void; } function formatTimelineDate(ms: number): string { const d = new Date(ms); return d.toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric", }); } export default function TimelineBar({ totalSteps, currentStep, currentTime, isPlaying, speed, onStepChange, onPlayPause, onSpeedChange, }: TimelineBarProps) { const handleSliderChange = useCallback( (e: React.ChangeEvent) => { onStepChange(Number(e.target.value)); }, [onStepChange] ); const handleSpeedCycle = useCallback(() => { const next = speed === 1 ? 2 : speed === 2 ? 4 : 1; onSpeedChange(next); }, [speed, onSpeedChange]); const hasRange = totalSteps > 1; return (
{/* Play/Pause button */} {/* Scrubber slider */} {/* Step counter + date */} {currentStep + 1}/{totalSteps} {" "} {formatTimelineDate(currentTime)} {/* Speed toggle */}
); }