import SwiftUI import AVFoundation import AppKit import KeyboardShortcuts struct OnboardingPermission: Identifiable { let id = UUID() let title: String let description: String let icon: String let type: PermissionType enum PermissionType { case microphone case accessibility case screenRecording case keyboardShortcut var systemName: String { switch self { case .microphone: return "mic" case .accessibility: return "accessibility" case .screenRecording: return "rectangle.inset.filled.and.person.filled" case .keyboardShortcut: return "keyboard" } } } } struct OnboardingPermissionsView: View { @Binding var hasCompletedOnboarding: Bool @EnvironmentObject private var hotkeyManager: HotkeyManager @State private var currentPermissionIndex = 0 @State private var permissionStates: [Bool] = [false, false, false, false] @State private var showAnimation = false @State private var scale: CGFloat = 0.8 @State private var opacity: CGFloat = 0 @State private var showModelDownload = false private let permissions: [OnboardingPermission] = [ OnboardingPermission( title: "Microphone Access", description: "Enable your microphone to start speaking and converting your voice to text instantly.", icon: "waveform", type: .microphone ), OnboardingPermission( title: "Accessibility Access", description: "Allow VoiceInk to help you type anywhere in your Mac.", icon: "accessibility", type: .accessibility ), OnboardingPermission( title: "Screen Recording", description: "This helps to improve the accuracy of transcription.", icon: "rectangle.inset.filled.and.person.filled", type: .screenRecording ), OnboardingPermission( title: "Keyboard Shortcut", description: "Set up a keyboard shortcut to quickly access VoiceInk from anywhere.", icon: "keyboard", type: .keyboardShortcut ) ] var body: some View { ZStack { GeometryReader { geometry in ZStack { // Reusable background OnboardingBackgroundView() VStack(spacing: 40) { // Progress indicator HStack(spacing: 8) { ForEach(0.. String { if permissions[currentPermissionIndex].type == .keyboardShortcut { return permissionStates[currentPermissionIndex] ? "Continue" : "Set Shortcut" } return permissionStates[currentPermissionIndex] ? "Continue" : "Enable Access" } }