202 lines
4.4 KiB
Swift
202 lines
4.4 KiB
Swift
import Foundation
|
|
#if canImport(AppKit)
|
|
import AppKit
|
|
#endif
|
|
#if canImport(UIKit)
|
|
import UIKit
|
|
#endif
|
|
#if canImport(SwiftUI)
|
|
import SwiftUI
|
|
#endif
|
|
#if canImport(DeveloperToolsSupport)
|
|
import DeveloperToolsSupport
|
|
#endif
|
|
|
|
#if SWIFT_PACKAGE
|
|
private let resourceBundle = Foundation.Bundle.module
|
|
#else
|
|
private class ResourceBundleClass {}
|
|
private let resourceBundle = Foundation.Bundle(for: ResourceBundleClass.self)
|
|
#endif
|
|
|
|
// MARK: - Color Symbols -
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension DeveloperToolsSupport.ColorResource {
|
|
|
|
}
|
|
|
|
// MARK: - Image Symbols -
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension DeveloperToolsSupport.ImageResource {
|
|
|
|
}
|
|
|
|
// MARK: - Color Symbol Extensions -
|
|
|
|
#if canImport(AppKit)
|
|
@available(macOS 14.0, *)
|
|
@available(macCatalyst, unavailable)
|
|
extension AppKit.NSColor {
|
|
|
|
}
|
|
#endif
|
|
|
|
#if canImport(UIKit)
|
|
@available(iOS 17.0, tvOS 17.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension UIKit.UIColor {
|
|
|
|
}
|
|
#endif
|
|
|
|
#if canImport(SwiftUI)
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension SwiftUI.Color {
|
|
|
|
}
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension SwiftUI.ShapeStyle where Self == SwiftUI.Color {
|
|
|
|
}
|
|
#endif
|
|
|
|
// MARK: - Image Symbol Extensions -
|
|
|
|
#if canImport(AppKit)
|
|
@available(macOS 14.0, *)
|
|
@available(macCatalyst, unavailable)
|
|
extension AppKit.NSImage {
|
|
|
|
}
|
|
#endif
|
|
|
|
#if canImport(UIKit)
|
|
@available(iOS 17.0, tvOS 17.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension UIKit.UIImage {
|
|
|
|
}
|
|
#endif
|
|
|
|
// MARK: - Thinnable Asset Support -
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension DeveloperToolsSupport.ColorResource {
|
|
|
|
private init?(thinnableName: Swift.String, bundle: Foundation.Bundle) {
|
|
#if canImport(AppKit) && os(macOS)
|
|
if AppKit.NSColor(named: NSColor.Name(thinnableName), bundle: bundle) != nil {
|
|
self.init(name: thinnableName, bundle: bundle)
|
|
} else {
|
|
return nil
|
|
}
|
|
#elseif canImport(UIKit) && !os(watchOS)
|
|
if UIKit.UIColor(named: thinnableName, in: bundle, compatibleWith: nil) != nil {
|
|
self.init(name: thinnableName, bundle: bundle)
|
|
} else {
|
|
return nil
|
|
}
|
|
#else
|
|
return nil
|
|
#endif
|
|
}
|
|
|
|
}
|
|
|
|
#if canImport(UIKit)
|
|
@available(iOS 17.0, tvOS 17.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension UIKit.UIColor {
|
|
|
|
private convenience init?(thinnableResource: DeveloperToolsSupport.ColorResource?) {
|
|
#if !os(watchOS)
|
|
if let resource = thinnableResource {
|
|
self.init(resource: resource)
|
|
} else {
|
|
return nil
|
|
}
|
|
#else
|
|
return nil
|
|
#endif
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
#if canImport(SwiftUI)
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension SwiftUI.Color {
|
|
|
|
private init?(thinnableResource: DeveloperToolsSupport.ColorResource?) {
|
|
if let resource = thinnableResource {
|
|
self.init(resource)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
extension SwiftUI.ShapeStyle where Self == SwiftUI.Color {
|
|
|
|
private init?(thinnableResource: DeveloperToolsSupport.ColorResource?) {
|
|
if let resource = thinnableResource {
|
|
self.init(resource)
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|
|
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension DeveloperToolsSupport.ImageResource {
|
|
|
|
private init?(thinnableName: Swift.String, bundle: Foundation.Bundle) {
|
|
#if canImport(AppKit) && os(macOS)
|
|
if bundle.image(forResource: NSImage.Name(thinnableName)) != nil {
|
|
self.init(name: thinnableName, bundle: bundle)
|
|
} else {
|
|
return nil
|
|
}
|
|
#elseif canImport(UIKit) && !os(watchOS)
|
|
if UIKit.UIImage(named: thinnableName, in: bundle, compatibleWith: nil) != nil {
|
|
self.init(name: thinnableName, bundle: bundle)
|
|
} else {
|
|
return nil
|
|
}
|
|
#else
|
|
return nil
|
|
#endif
|
|
}
|
|
|
|
}
|
|
|
|
#if canImport(UIKit)
|
|
@available(iOS 17.0, tvOS 17.0, *)
|
|
@available(watchOS, unavailable)
|
|
extension UIKit.UIImage {
|
|
|
|
private convenience init?(thinnableResource: DeveloperToolsSupport.ImageResource?) {
|
|
#if !os(watchOS)
|
|
if let resource = thinnableResource {
|
|
self.init(resource: resource)
|
|
} else {
|
|
return nil
|
|
}
|
|
#else
|
|
return nil
|
|
#endif
|
|
}
|
|
|
|
}
|
|
#endif
|
|
|