import SwiftUI

struct MeasuringView<Content: View>: View {
  let content: () -> Content
  let onChange: (CGSize) -> Void

  @State private var size: CGSize = .zero

  var body: some View {
    content()
      .background(
        GeometryReader { geometry in
          if #available(iOS 14.0, *) {
            Color.clear
              .onAppear {
                let newSize = geometry.size
                size = newSize
                onChange(newSize)
              }
              .onChange(of: geometry.size) { newSize in
                if size != newSize {
                  size = newSize
                  onChange(newSize)
                }
              }
          }
        }
      )
  }
}
