/** * PlayerBarProgress — Seek bar with 60fps (transform-based) * KŌDŌ gradient: --chart-1 → --chart-2 */ import { useRef, useEffect } from 'react'; import { cn } from '@/lib/utils'; interface PlayerBarProgressProps { currentTime: number; duration: number; onSeek: (pct: number) => void; className?: string; } export function PlayerBarProgress({ currentTime, duration, onSeek, className, }: PlayerBarProgressProps) { const barRef = useRef(null); const pct = duration > 0 ? Math.max(0, Math.min(1, currentTime / duration)) : 0; const handleClick = (e: React.MouseEvent) => { if (!barRef.current) return; const rect = barRef.current.getBoundingClientRect(); const x = e.clientX - rect.left; onSeek(Math.max(0, Math.min(1, x / rect.width))); }; return (
); }