"use client"; import React, { useEffect, useCallback } from "react"; import { useStopwatch } from "../hooks/useStopwatch"; import { formatTime, copyToClipboard } from "../lib/utils"; export default function Stopwatch({ onCopyFeedback, }: { onCopyFeedback: () => void; }) { const { elapsed, isRunning, laps, toggle, reset, lap } = useStopwatch(); const time = formatTime(elapsed); // Keyboard shortcuts const handleKeyDown = useCallback( (e: KeyboardEvent) => { if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) return; switch (e.code) { case "Space": e.preventDefault(); toggle(); break; case "KeyR": if (!e.ctrlKey && !e.metaKey) { e.preventDefault(); reset(); } break; case "KeyL": e.preventDefault(); lap(); break; case "KeyC": if (!e.ctrlKey && !e.metaKey) { e.preventDefault(); copyToClipboard(time.full).then((ok) => { if (ok) onCopyFeedback(); }); } break; } }, [toggle, reset, lap, time.full, onCopyFeedback] ); useEffect(() => { window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [handleKeyDown]); const lapDiffs = laps.map((lapTime, i) => { const prev = i === 0 ? 0 : laps[i - 1]; return lapTime - prev; }); return (
| # | Temps total | Delta |
|---|---|---|
| {index + 1} {isBest && ( BEST )} {isWorst && ( SLOW )} | {formatTime(l).full} | +{formatTime(diff).full} |