import SwiftUI /// Compact track row for track lists. struct TrackRow: View { let track: Track var uploadingFileName: String? = nil var body: some View { HStack(spacing: 8) { // Album art placeholder / format badge ZStack { RoundedRectangle(cornerRadius: 4) .fill(trackColor.opacity(0.15)) .frame(width: 32, height: 32) Image(systemName: "music.note") .font(.caption) .foregroundStyle(trackColor) } VStack(alignment: .leading, spacing: 1) { HStack(spacing: 4) { Text(track.title) .lineLimit(1) .font(.body) if let uploadingFileName, track.fileURL.lastPathComponent == uploadingFileName { Image(systemName: "arrow.up.circle.fill") .font(.system(size: 11)) .foregroundStyle(.orange) } else if track.isCloud { if track.downloadState == .downloaded || track.localCachePath != nil { Image(systemName: "arrow.down.circle.fill") .font(.system(size: 11)) .foregroundStyle(.green) } else { Image(systemName: "cloud.fill") .font(.system(size: 11)) .foregroundStyle(Color.accentColor.opacity(0.85)) } } } if !track.artist.isEmpty { Text(track.artist) .lineLimit(1) .font(.caption) .foregroundStyle(.secondary) } } } } private var trackColor: Color { if let hex = track.color { return Color(hex: hex) ?? .accentColor } return .accentColor } }