Add an iPhone client sharing the macOS app's SwiftUI code
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
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 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 openExternal(_ url: URL) {
|
||||
UIApplication.shared.open(url)
|
||||
}
|
||||
|
||||
let appBecameActive = UIApplication.didBecomeActiveNotification
|
||||
|
||||
@MainActor
|
||||
func appIsActive() -> Bool {
|
||||
UIApplication.shared.applicationState == .active
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user