Files
Fluxup_PAP/node_modules/expo-glass-effect/ios/GlassEffectModule.swift
2026-03-10 16:18:05 +00:00

107 lines
3.2 KiB
Swift

// Copyright 2022-present 650 Industries. All rights reserved.
import ExpoModulesCore
public final class GlassEffectModule: Module {
public func definition() -> ModuleDefinition {
Name("ExpoGlassEffect")
Constant("isLiquidGlassAvailable") {
#if compiler(>=6.2) // Xcode 26
if #available(iOS 26.0, tvOS 26.0, macOS 26.0, *) { // iOS 26
if let infoPlist = Bundle.main.infoDictionary,
let requiresCompatibility = infoPlist["UIDesignRequiresCompatibility"] as? Bool {
// TODO(@uabx): Add a check for maximum SDK version when apple disables this flag
return !requiresCompatibility // If the app requires compatibility then it will not use liquid glass
}
return true
}
#endif
return false
}
Constant("isGlassEffectAPIAvailable") {
#if compiler(>=6.2)
if #available(iOS 26.0, tvOS 26.0, macOS 26.0, *) {
guard let glassEffectClass = NSClassFromString("UIGlassEffect") as? NSObject.Type else {
return false
}
let respondsToSelector = glassEffectClass.responds(to: Selector(("effectWithStyle:")))
return respondsToSelector
}
#endif
return false
}
View(GlassView.self) {
Prop("glassEffectStyle") { (view, config: Either<GlassStyle, GlassEffectStyleConfig>?) in
if let styleConfig: GlassEffectStyleConfig = config?.get() {
view.setGlassStyle(styleConfig)
} else if let style: GlassStyle = config?.get() {
view.setGlassStyle(style)
} else {
view.setGlassStyle(.regular)
}
}
Prop("tintColor") { (view, tintColor: UIColor?) in
view.setTintColor(tintColor)
}
Prop("isInteractive") { (view, interactive: Bool) in
view.setInteractive(interactive)
}
Prop("colorScheme", .auto) { (view, colorScheme: GlassColorScheme) in
view.setColorScheme(colorScheme)
}
Prop("borderRadius") { (view, border: CGFloat?) in
view.setBorderRadius(border)
}
Prop("borderBottomLeftRadius") { (view, radius: CGFloat?) in
view.setBorderBottomLeftRadius(radius)
}
Prop("borderBottomRightRadius") { (view, radius: CGFloat?) in
view.setBorderBottomRightRadius(radius)
}
Prop("borderTopLeftRadius") { (view, radius: CGFloat?) in
view.setBorderTopLeftRadius(radius)
}
Prop("borderTopRightRadius") { (view, radius: CGFloat?) in
view.setBorderTopRightRadius(radius)
}
Prop("borderTopStartRadius") { (view, radius: CGFloat?) in
view.setBorderTopStartRadius(radius)
}
Prop("borderTopEndRadius") { (view, radius: CGFloat?) in
view.setBorderTopEndRadius(radius)
}
Prop("borderBottomStartRadius") { (view, radius: CGFloat?) in
view.setBorderBottomStartRadius(radius)
}
Prop("borderBottomEndRadius") { (view, radius: CGFloat?) in
view.setBorderBottomEndRadius(radius)
}
Prop("borderCurve") { (view, curve: String?) in
view.setBorderCurve(curve)
}
}
View(GlassContainer.self) {
Prop("spacing") { (view, spacing: CGFloat?) in
view.setSpacing(spacing)
}
}
}
}