first commit

This commit is contained in:
2026-03-10 16:18:05 +00:00
commit 11f9c069b5
31635 changed files with 3187747 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
// Copyright 2022-present 650 Industries. All rights reserved.
import ExpoModulesCore
public final class GlassContainer: ExpoView {
private var containerEffect: Any?
private var containerEffectView = UIVisualEffectView()
private var containerSpacing: CGFloat?
public required init(appContext: AppContext? = nil) {
super.init(appContext: appContext)
containerEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(containerEffectView)
}
// UIGlassEffect initialiser is failing for iOS 26 beta versions for some reason, so we need to check if it's available at runtime
// https://github.com/expo/expo/issues/40911
private func isGlassContainerEffectAvailable() -> Bool {
#if compiler(>=6.2)
if #available(iOS 26.0, tvOS 26.0, macOS 26.0, *) {
return NSClassFromString("UIGlassContainerEffect") != nil
}
#endif
return false
}
func setSpacing(_ spacing: CGFloat?) {
if containerSpacing != spacing {
containerSpacing = spacing
guard isGlassContainerEffectAvailable() else {
return
}
if #available(iOS 26.0, tvOS 26.0, macOS 26.0, *) {
#if compiler(>=6.2) // Xcode 26
let effect = UIGlassContainerEffect()
if let spacing = spacing {
effect.spacing = spacing
}
containerEffectView.effect = effect
containerEffect = effect
#endif
}
}
}
public override func mountChildComponentView(_ childComponentView: UIView, index: Int) {
containerEffectView.contentView.insertSubview(childComponentView, at: index)
}
public override func unmountChildComponentView(_ childComponentView: UIView, index: Int) {
childComponentView.removeFromSuperview()
}
}