Files
clawdbot/apps/macos/Sources/Clawdbot/ViewMetrics.swift
2026-01-04 14:38:51 +00:00

30 lines
844 B
Swift

import SwiftUI
private struct ViewWidthPreferenceKey: PreferenceKey {
static let defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = max(value, nextValue())
}
}
extension View {
func onWidthChange(_ onChange: @escaping (CGFloat) -> Void) -> some View {
self.background(
GeometryReader { proxy in
Color.clear.preference(key: ViewWidthPreferenceKey.self, value: proxy.size.width)
})
.onPreferenceChange(ViewWidthPreferenceKey.self, perform: onChange)
}
}
#if DEBUG
enum ViewMetricsTesting {
static func reduceWidth(current: CGFloat, next: CGFloat) -> CGFloat {
var value = current
ViewWidthPreferenceKey.reduce(value: &value, nextValue: { next })
return value
}
}
#endif