import ExpoModulesCoreimport UIKit public final class T3HeaderButtonView: ExpoView { private static let size: CGFloat = 44 private static let symbolSize: CGFloat = 18 private let button = UIButton(type: .system) private var systemImage = "circle" let onTriggered = EventDispatcher() public required init(appContext: AppContext? = nil) { super.init(appContext: appContext) isAccessibilityElement = false button.frame = bounds button.autoresizingMask = [.flexibleWidth, .flexibleHeight] button.addTarget(self, action: #selector(handlePress), for: .primaryActionTriggered) addSubview(button) applyConfiguration() } public override var intrinsicContentSize: CGSize { CGSize(width: Self.size, height: Self.size) } public func setLabel(_ label: String) { button.accessibilityLabel = label } public func setSystemImage(_ systemImage: String) { guard self.systemImage != systemImage else { return } self.systemImage = systemImage applyConfiguration() } private func applyConfiguration() { var configuration: UIButton.Configuration if #available(iOS 26.0, *) { configuration = .glass() configuration.cornerStyle = .capsule } else { configuration = .plain() } configuration.baseForegroundColor = .label configuration.contentInsets = .zero configuration.image = UIImage(systemName: systemImage) configuration.preferredSymbolConfigurationForImage = UIImage.SymbolConfiguration( pointSize: Self.symbolSize, weight: .regular ) button.configuration = configuration } @objc private func handlePress() { onTriggered() }}
import ExpoModulesCore
import UIKit
public final class T3HeaderButtonView: ExpoView {
private static let size: CGFloat = 44
private static let symbolSize: CGFloat = 18
private let button = UIButton(type: .system)
private var systemImage = "circle"
let onTriggered = EventDispatcher()
public required init(appContext: AppContext? = nil) {
super.init(appContext: appContext)
isAccessibilityElement = false
button.frame = bounds
button.autoresizingMask = [.flexibleWidth, .flexibleHeight]
button.addTarget(self, action: #selector(handlePress), for: .primaryActionTriggered)
addSubview(button)
applyConfiguration()
}
public override var intrinsicContentSize: CGSize {
CGSize(width: Self.size, height: Self.size)
}
public func setLabel(_ label: String) {
button.accessibilityLabel = label
}
public func setSystemImage(_ systemImage: String) {
guard self.systemImage != systemImage else {
return
}
self.systemImage = systemImage
applyConfiguration()
}
private func applyConfiguration() {
var configuration: UIButton.Configuration
if #available(iOS 26.0, *) {
configuration = .glass()
configuration.cornerStyle = .capsule
} else {
configuration = .plain()
}
configuration.baseForegroundColor = .label
configuration.contentInsets = .zero
configuration.image = UIImage(systemName: systemImage)
configuration.preferredSymbolConfigurationForImage = UIImage.SymbolConfiguration(
pointSize: Self.symbolSize,
weight: .regular
)
button.configuration = configuration
}
@objc private func handlePress() {
onTriggered()
}
}