101 lines
2.8 KiB
Swift
101 lines
2.8 KiB
Swift
// ── macOS Settings View ───────────────────────────────────────
|
|
|
|
import SwiftUI
|
|
|
|
struct MacSettingsView: View {
|
|
@EnvironmentObject var store: MacTimerStore
|
|
@AppStorage("cm_defaultUrgency") private var defaultUrgency = "standard"
|
|
@AppStorage("cm_defaultCascade") private var defaultCascade = "standard"
|
|
@AppStorage("cm_launchAtLogin") private var launchAtLogin = false
|
|
|
|
var body: some View {
|
|
TabView {
|
|
generalTab
|
|
.tabItem { Label("General", systemImage: "gearshape") }
|
|
|
|
dataTab
|
|
.tabItem { Label("Data", systemImage: "externaldrive") }
|
|
|
|
aboutTab
|
|
.tabItem { Label("About", systemImage: "info.circle") }
|
|
}
|
|
.frame(width: 400, height: 300)
|
|
}
|
|
|
|
// MARK: - General
|
|
|
|
private var generalTab: some View {
|
|
Form {
|
|
Toggle("Launch at Login", isOn: $launchAtLogin)
|
|
|
|
Picker("Default Urgency", selection: $defaultUrgency) {
|
|
ForEach(UrgencyLevel.allCases) { level in
|
|
Text(getUrgencyConfig(level).label).tag(level.rawValue)
|
|
}
|
|
}
|
|
|
|
Picker("Default Cascade", selection: $defaultCascade) {
|
|
ForEach(CascadePreset.allCases.filter { $0 != .custom }) { preset in
|
|
Text(preset.label).tag(preset.rawValue)
|
|
}
|
|
}
|
|
}
|
|
.padding()
|
|
}
|
|
|
|
// MARK: - Data
|
|
|
|
private var dataTab: some View {
|
|
Form {
|
|
HStack {
|
|
Text("Total Timers")
|
|
Spacer()
|
|
Text("\(store.timers.count)")
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
|
|
HStack {
|
|
Text("Active")
|
|
Spacer()
|
|
Text("\(store.activeTimers.count)")
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
|
|
Divider()
|
|
|
|
Button("Clear Completed") {
|
|
store.timers.removeAll { [.completed, .dismissed].contains($0.state) }
|
|
}
|
|
|
|
Button("Delete All Timers", role: .destructive) {
|
|
store.timers.removeAll()
|
|
}
|
|
}
|
|
.padding()
|
|
}
|
|
|
|
// MARK: - About
|
|
|
|
private var aboutTab: some View {
|
|
VStack(spacing: 12) {
|
|
Image(systemName: "clock.fill")
|
|
.font(.system(size: 48))
|
|
.foregroundStyle(CMColors.accent)
|
|
|
|
Text("ChronoMind")
|
|
.font(.title2.bold())
|
|
|
|
Text("Version 1.0.0")
|
|
.foregroundStyle(.secondary)
|
|
|
|
Text("Time management with cascade warnings")
|
|
.font(.caption)
|
|
.foregroundStyle(.tertiary)
|
|
|
|
Spacer()
|
|
}
|
|
.padding()
|
|
.frame(maxWidth: .infinity)
|
|
}
|
|
}
|