HuggingChat-Mac/Settings/SettingsView.swift (92 lines of code) (raw):

// // SettingsView.swift // HuggingChat-Mac // // Created by Cyril Zakka on 8/17/24. // import SwiftUI struct SettingsListViewIcon: View { var iconName: String var systemImage: String var tint: Color var body: some View { Label(title: { Text(iconName) }, icon: { Image(systemName: systemImage) .resizable() .scaledToFit() .frame(width: 12, height: 12) .foregroundStyle(.white) .frame(width: 20, height: 20) .background(RoundedRectangle(cornerRadius: 5).fill(tint.gradient)) }) } } struct SettingsView: View { @Environment(ModelManager.self) private var modelManager @Environment(AudioModelManager.self) private var audioModelManager @Environment(ConversationViewModel.self) private var conversationManager @AppStorage("hideDock") private var hideDock: Bool = false @State private var columnVisibility = NavigationSplitViewVisibility.detailOnly @State private var selectedSidebarItem: String? = "General" @State private var searchText = "" private let allSettings = ["General", "Appearance", "Components"] private var filteredSettings: [String] { if searchText.isEmpty { return allSettings } else { return allSettings.filter { $0.lowercased().contains(searchText.lowercased()) } } } var body: some View { if #available(macOS 15.0, *) { TabView { Tab("General", systemImage: "gearshape") { GeneralSettingsView() .environment(modelManager) .environment(conversationManager) } Tab("Dictation", systemImage: "waveform.badge.mic") { DictationSettings() .environment(audioModelManager) } Tab("Appearance", systemImage: "paintbrush") { AppearanceSettings() .environment(modelManager) } // Tab("Advanced", systemImage: "wrench.and.screwdriver") { // AdvancedSettings() // } Tab("Components", systemImage: "square.3.layers.3d") { ComponentsSettingsView() .environment(modelManager) .environment(audioModelManager) } } .frame(maxWidth: 500, maxHeight: .infinity) .onAppear { // Show dock icon when settings view is shown NSApp.setActivationPolicy(.regular) } .onDisappear { // For better UX experience, trigger hide dock after exiting Settings if hideDock { NSApp.setActivationPolicy(.accessory) } } } else { TabView { GeneralSettingsView() .environment(modelManager) .tabItem { Label("General", systemImage: "gearshape") } // DictationSettings() // .environment(audioModelManager) // .tabItem { // Label("Dictation", systemImage: "waveform.badge.mic") // } AppearanceSettings() .environment(modelManager) .tabItem { Label("Appearance", systemImage: "paintbrush") } ComponentsSettingsView() .environment(modelManager) .tabItem { Label("Components", systemImage: "square.3.layers.3d") } } } } } #Preview { SettingsView() .environment(ModelManager()) // .environment(AudioModelManager()) .environment(ConversationViewModel()) }