| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import SwiftUI
- struct BrowsePanel: View {
- @Binding var browsePanelTab: BrowsePanelTab
- @Binding var isBrowsePanelOpen: Bool
- @AppStorage("playbackMode") private var playbackMode: String = "queue"
- @EnvironmentObject private var theme: AppTheme
- private var showQueueTab: Bool {
- playbackMode == "queue"
- }
- var body: some View {
- VStack(spacing: 0) {
- // Panel header
- HStack {
- if showQueueTab {
- Picker("", selection: $browsePanelTab) {
- ForEach(BrowsePanelTab.allCases, id: \.self) { tab in
- Text(tab.rawValue).tag(tab)
- }
- }
- .pickerStyle(.segmented)
- .frame(maxWidth: 200)
- } else {
- Text("Cloud")
- .font(.system(size: 13, weight: .semibold))
- .foregroundStyle(theme.primaryText)
- }
- Spacer()
- Button {
- isBrowsePanelOpen = false
- } label: {
- Image(systemName: "xmark")
- .font(.system(size: 11, weight: .semibold))
- .foregroundStyle(theme.secondaryText)
- .frame(width: 24, height: 24)
- .contentShape(Rectangle())
- }
- .buttonStyle(.plain)
- .help("Close Panel (⌘B)")
- }
- .padding(.horizontal, 12)
- .padding(.vertical, 8)
- .background(theme.toolbarBackground.opacity(0.5))
- Divider()
- ZStack {
- CloudBrowserView()
- .onChange(of: playbackMode) { _, newMode in
- if newMode != "queue" && browsePanelTab == .queue {
- browsePanelTab = .cloud
- }
- }
- .opacity(browsePanelTab == .cloud ? 1 : 0)
- .allowsHitTesting(browsePanelTab == .cloud)
- if showQueueTab {
- QueueView()
- .opacity(browsePanelTab == .queue ? 1 : 0)
- .allowsHitTesting(browsePanelTab == .queue)
- }
- }
- }
- }
- }
|