'use client'; import * as React from 'react'; import { Circle, Headphones, MoreHorizontal, ChevronRight, ChevronDown, ChevronUp } from 'lucide-react'; import { CircularKnob } from '@/components/ui/CircularKnob'; import { TrackFader } from './TrackFader'; import { cn } from '@/lib/utils/cn'; export interface TrackControlsProps { trackName: string; trackColor: string; collapsed: boolean; volume: number; pan: number; peakLevel: number; rmsLevel: number; isMuted?: boolean; isSolo?: boolean; isRecordEnabled?: boolean; showAutomation?: boolean; showEffects?: boolean; isRecording?: boolean; mobileCollapsed?: boolean; // For mobile view collapsible controls onNameChange: (name: string) => void; onToggleCollapse: () => void; onVolumeChange: (volume: number) => void; onPanChange: (pan: number) => void; onMuteToggle: () => void; onSoloToggle?: () => void; onRecordToggle?: () => void; onAutomationToggle?: () => void; onEffectsClick?: () => void; onVolumeTouchStart?: () => void; onVolumeTouchEnd?: () => void; onPanTouchStart?: () => void; onPanTouchEnd?: () => void; onToggleMobileCollapse?: () => void; className?: string; } export function TrackControls({ trackName, trackColor, collapsed, volume, pan, peakLevel, rmsLevel, isMuted = false, isSolo = false, isRecordEnabled = false, showAutomation = false, showEffects = false, isRecording = false, mobileCollapsed = false, onNameChange, onToggleCollapse, onVolumeChange, onPanChange, onMuteToggle, onSoloToggle, onRecordToggle, onAutomationToggle, onEffectsClick, onVolumeTouchStart, onVolumeTouchEnd, onPanTouchStart, onPanTouchEnd, onToggleMobileCollapse, className, }: TrackControlsProps) { const [isEditingName, setIsEditingName] = React.useState(false); const [editName, setEditName] = React.useState(trackName); const handleNameClick = () => { setIsEditingName(true); setEditName(trackName); }; const handleNameBlur = () => { setIsEditingName(false); if (editName.trim() && editName !== trackName) { onNameChange(editName.trim()); } else { setEditName(trackName); } }; const handleNameKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleNameBlur(); } else if (e.key === 'Escape') { setIsEditingName(false); setEditName(trackName); } }; // Mobile collapsed view - minimal controls (like master controls) if (mobileCollapsed) { return (
{trackName}
{onToggleMobileCollapse && ( )}
{onRecordToggle && ( )} {onSoloToggle && ( )}
0.95 ? 'bg-red-500' : peakLevel > 0.8 ? 'bg-yellow-500' : 'bg-green-500' )} style={{ width: `${peakLevel * 100}%` }} />
); } // Mobile expanded view - full controls (like master controls) const mobileExpandedView = (
{/* Header with collapse button */}
{trackName}
{onToggleMobileCollapse && ( )}
{/* Pan Control */} { if (Math.abs(value) < 0.01) return 'C'; if (value < 0) return `${Math.abs(value * 100).toFixed(0)}L`; return `${(value * 100).toFixed(0)}R`; }} /> {/* Volume Fader - Full height, not compressed */}
{/* Control buttons */}
{onRecordToggle && ( )} {onSoloToggle && ( )} {onEffectsClick && ( )}
); return ( <> {/* Mobile view - Show expanded or collapsed */} {!mobileCollapsed && mobileExpandedView} {/* Desktop/tablet view - hidden on mobile */}