'use client'; import * as React from 'react'; import { Volume2, VolumeX, Headphones, Mic, X, ChevronDown, ChevronRight } from 'lucide-react'; import { Button } from '@/components/ui/Button'; import { Slider } from '@/components/ui/Slider'; import type { Track } from '@/types/track'; import { cn } from '@/lib/utils/cn'; export interface TrackHeaderProps { track: Track; onToggleMute: () => void; onToggleSolo: () => void; onToggleCollapse: () => void; onVolumeChange: (volume: number) => void; onPanChange: (pan: number) => void; onRemove: () => void; onNameChange: (name: string) => void; } export function TrackHeader({ track, onToggleMute, onToggleSolo, onToggleCollapse, onVolumeChange, onPanChange, onRemove, onNameChange, }: TrackHeaderProps) { const [isEditingName, setIsEditingName] = React.useState(false); const [nameInput, setNameInput] = React.useState(String(track.name || 'Untitled Track')); const inputRef = React.useRef(null); const handleNameClick = () => { setIsEditingName(true); setNameInput(String(track.name || 'Untitled Track')); }; const handleNameBlur = () => { setIsEditingName(false); if (nameInput.trim()) { onNameChange(nameInput.trim()); } else { setNameInput(String(track.name || 'Untitled Track')); } }; const handleNameKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { inputRef.current?.blur(); } else if (e.key === 'Escape') { setNameInput(String(track.name || 'Untitled Track')); setIsEditingName(false); } }; React.useEffect(() => { if (isEditingName && inputRef.current) { inputRef.current.focus(); inputRef.current.select(); } }, [isEditingName]); return (
{/* Collapse Toggle */} {/* Track Color Indicator */}
{/* Track Name */}
{isEditingName ? ( setNameInput(e.target.value)} onBlur={handleNameBlur} onKeyDown={handleNameKeyDown} className="w-full px-2 py-1 text-sm font-medium bg-background border border-border rounded" /> ) : (
{String(track.name || 'Untitled Track')}
)}
{/* Solo Button */} {/* Mute Button */} {/* Volume Slider */}
onVolumeChange(value)} min={0} max={1} step={0.01} className="flex-1" title={`Volume: ${Math.round(track.volume * 100)}%`} /> {Math.round(track.volume * 100)}
{/* Pan Knob (simplified as slider) */}
onPanChange(value)} min={-1} max={1} step={0.01} className="flex-1" title={`Pan: ${track.pan === 0 ? 'C' : track.pan < 0 ? `L${Math.abs(Math.round(track.pan * 100))}` : `R${Math.round(track.pan * 100)}`}`} /> {track.pan === 0 ? 'C' : track.pan < 0 ? `L` : 'R'}
{/* Remove Button */}
); }