e.stopPropagation()}
+ // Never fade the bar out from under a cursor that is using it.
+ onMouseEnter={() => {
+ if (hideTimerRef.current) clearTimeout(hideTimerRef.current);
+ setControlsVisible(true);
+ }}
+ onMouseLeave={() => isPlaying && scheduleHide()}
>
{/* Scrub bar */}
{ setIsDragging(true); seekTo(e.clientX); }}
+ onMouseMove={(e) => setHoverTime(timeAtClientX(e.clientX))}
+ onMouseLeave={() => setHoverTime(null)}
>
+
+ {/* Hovered timestamp */}
+ {hoverTime !== null && (
+
+ {formatTime(hoverTime)}
+
+ )}
{/* Buttons row */}
@@ -361,12 +499,56 @@ const MediaPlayer = ({ noun, getMediaUrl, fetchDetails }: MediaPlayerProps) => {