waterui 0.3.0

A modern UI framework for Rust
import CWaterUI

#if canImport(UIKit)
  import UIKit
#elseif canImport(AppKit)
  import AppKit
#endif

/// Component for `IgnorableMetadata<NavigationLinkHint>`.
///
/// A navigation link renders and behaves as its content — a plain button.
/// This wrapper only carries the link's identity, so a list row can draw the
/// platform's destination-following affordance around it: iOS shows the
/// disclosure chevron, a Mac shows nothing. See `WuiList`.
@MainActor
final class WuiNavigationLinkHint: PlatformView, WuiComponent {
  static var rawId: CWaterUI.WuiTypeId { waterui_ignorable_metadata_navigation_link_hint_id() }

  private let contentView: any WuiComponent

  var stretchAxis: WuiStretchAxis {
    contentView.stretchAxis
  }

  required init(anyview: OpaquePointer, env: WuiEnvironment) {
    let metadata = waterui_force_as_ignorable_metadata_navigation_link_hint(anyview)
    self.contentView = WuiAnyView.resolve(anyview: metadata.content, env: env)

    super.init(frame: .zero)

    contentView.translatesAutoresizingMaskIntoConstraints = true
    addSubview(contentView)
  }

  @available(*, unavailable)
  required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

  func layoutPriority() -> Int32 {
    contentView.layoutPriority()
  }

  func sizeThatFits(_ proposal: WuiProposalSize) -> CGSize {
    contentView.sizeThatFits(proposal)
  }

  func measure(_ proposal: WuiProposalSize) -> WuiViewDimensions {
    contentView.measure(proposal)
  }

  #if canImport(UIKit)
    override func layoutSubviews() {
      super.layoutSubviews()
      contentView.frame = bounds
    }
  #elseif canImport(AppKit)
    nonisolated override var isFlipped: Bool { true }

    override func layout() {
      super.layout()
      contentView.frame = bounds
    }
  #endif
}

extension WuiNavigationLinkHint: WuiPrimaryContentProviding {
  var wuiPrimaryContent: PlatformView? { contentView }
}