import SwiftUI import AppKit class WindowManager { static let shared = WindowManager() private init() {} func configureWindow(_ window: NSWindow) { let requiredStyleMask: NSWindow.StyleMask = [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView] window.styleMask.formUnion(requiredStyleMask) window.titlebarAppearsTransparent = true window.titleVisibility = .hidden window.backgroundColor = .windowBackgroundColor window.isReleasedWhenClosed = false window.title = "VoiceInk" window.collectionBehavior = [.fullScreenPrimary] window.level = .normal window.isOpaque = true window.isMovableByWindowBackground = false window.minSize = NSSize(width: 0, height: 0) window.orderFrontRegardless() } func configureOnboardingPanel(_ window: NSWindow) { let requiredStyleMask: NSWindow.StyleMask = [.titled, .fullSizeContentView, .resizable] window.styleMask.formUnion(requiredStyleMask) window.titlebarAppearsTransparent = true window.titleVisibility = .hidden window.isMovableByWindowBackground = true window.level = .normal window.backgroundColor = .clear window.isReleasedWhenClosed = false window.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary] window.title = "VoiceInk Onboarding" window.isOpaque = false window.minSize = NSSize(width: 900, height: 780) window.makeKeyAndOrderFront(nil) } func createMainWindow(contentView: NSView) -> NSWindow { let defaultSize = NSSize(width: 940, height: 780) let screenFrame = NSScreen.main?.visibleFrame ?? NSRect(x: 0, y: 0, width: 1200, height: 800) let xPosition = (screenFrame.width - defaultSize.width) / 2 + screenFrame.minX let yPosition = (screenFrame.height - defaultSize.height) / 2 + screenFrame.minY let window = NSWindow( contentRect: NSRect(x: xPosition, y: yPosition, width: defaultSize.width, height: defaultSize.height), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false ) configureWindow(window) window.contentView = contentView let delegate = WindowStateDelegate() window.delegate = delegate return window } } class WindowStateDelegate: NSObject, NSWindowDelegate { func windowWillClose(_ notification: Notification) { guard let window = notification.object as? NSWindow else { return } window.orderOut(nil) } func windowDidBecomeKey(_ notification: Notification) { guard let _ = notification.object as? NSWindow else { return } NSApp.activate(ignoringOtherApps: true) } }