56 lines
2.1 KiB
Swift
56 lines
2.1 KiB
Swift
// ── Watch Quick Timer View ────────────────────────────────────
|
|
// One-tap preset timers for Apple Watch
|
|
|
|
import SwiftUI
|
|
import WatchKit
|
|
|
|
struct WatchQuickTimerView: View {
|
|
@EnvironmentObject var store: WatchTimerStore
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
private let presets: [(minutes: Int, label: String, icon: String)] = [
|
|
(5, "5 min", "5.circle.fill"),
|
|
(10, "10 min", "10.circle.fill"),
|
|
(15, "15 min", "15.circle.fill"),
|
|
(25, "Pomodoro", "target"),
|
|
(30, "30 min", "30.circle.fill"),
|
|
(45, "45 min", "45.circle.fill"),
|
|
(60, "1 hour", "clock.fill"),
|
|
(90, "1.5 hours", "clock.badge.checkmark"),
|
|
]
|
|
|
|
var body: some View {
|
|
ScrollView {
|
|
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 8) {
|
|
ForEach(presets, id: \.minutes) { preset in
|
|
Button {
|
|
createTimer(preset)
|
|
} label: {
|
|
VStack(spacing: 4) {
|
|
Image(systemName: preset.icon)
|
|
.font(.system(size: 18))
|
|
.foregroundStyle(.blue)
|
|
Text(preset.label)
|
|
.font(.system(size: 12, weight: .medium))
|
|
.lineLimit(1)
|
|
}
|
|
.frame(maxWidth: .infinity)
|
|
.padding(.vertical, 10)
|
|
.background(.blue.opacity(0.1))
|
|
.clipShape(RoundedRectangle(cornerRadius: 10))
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
}
|
|
.padding(.horizontal, 4)
|
|
}
|
|
.navigationTitle("Quick Timer")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
}
|
|
|
|
private func createTimer(_ preset: (minutes: Int, label: String, icon: String)) {
|
|
store.createQuickTimer(minutes: preset.minutes, label: "\(preset.label) Timer")
|
|
dismiss()
|
|
}
|
|
}
|