import SwiftUI #if os(macOS) import AppKit typealias PlatformImage = NSImage typealias PlatformColor = NSColor typealias PlatformFont = NSFont typealias PlatformView = NSView let touchOnly = false let deviceKind = "Mac" extension Image { init(platformImage: PlatformImage) { self.init(nsImage: platformImage) } } extension PlatformColor { static func dynamic(light: NSColor, dark: NSColor) -> NSColor { NSColor(name: nil) { appearance in appearance.bestMatch(from: [.aqua, .darkAqua]) == .darkAqua ? dark : light } } } @MainActor func copyToClipboard(_ text: String) { NSPasteboard.general.clearContents() NSPasteboard.general.setString(text, forType: .string) } @MainActor func copyToClipboard(_ image: PlatformImage) { NSPasteboard.general.clearContents() NSPasteboard.general.writeObjects([image]) } func platformImage(_ cg: CGImage) -> PlatformImage { NSImage(cgImage: cg, size: NSSize(width: cg.width / 2, height: cg.height / 2)) } @MainActor func openExternal(_ url: URL) { NSWorkspace.shared.open(url) } let appBecameActive = NSApplication.didBecomeActiveNotification @MainActor func appIsActive() -> Bool { NSApp.isActive } #else import UIKit typealias PlatformImage = UIImage typealias PlatformColor = UIColor typealias PlatformFont = UIFont typealias PlatformView = UIView let touchOnly = true let deviceKind = "iPhone" struct CheckToggleStyle: ToggleStyle { func makeBody(configuration: Configuration) -> some View { Button { configuration.isOn.toggle() } label: { HStack(spacing: 8) { Image(systemName: configuration.isOn ? "checkmark.square.fill" : "square") .foregroundStyle(configuration.isOn ? Palette.accent : Palette.muted) configuration.label .foregroundStyle(Palette.text) } .contentShape(Rectangle()) } .buttonStyle(.plain) } } extension ToggleStyle where Self == CheckToggleStyle { static var checkbox: CheckToggleStyle { CheckToggleStyle() } } extension Image { init(platformImage: PlatformImage) { self.init(uiImage: platformImage) } } extension PlatformColor { static func dynamic(light: UIColor, dark: UIColor) -> UIColor { UIColor { traits in traits.userInterfaceStyle == .dark ? dark : light } } } @MainActor func copyToClipboard(_ text: String) { UIPasteboard.general.string = text } @MainActor func copyToClipboard(_ image: PlatformImage) { UIPasteboard.general.image = image } func platformImage(_ cg: CGImage) -> PlatformImage { UIImage(cgImage: cg, scale: 2, orientation: .up) } @MainActor func openExternal(_ url: URL) { UIApplication.shared.open(url) } let appBecameActive = UIApplication.didBecomeActiveNotification @MainActor func appIsActive() -> Bool { UIApplication.shared.applicationState == .active } #endif