// Generated from tokens/ui-foundation.v1.json. DO NOT EDIT.
// Contract reits.ui-foundation/v1@1.0.1; source-sha256 f5d5b7e37ea61f9fd6b35b0e287e29db5d7771c4a9f8cf54bd1aa62835788b82
import SwiftUI

enum REITSUIFoundation {
    static let contractVersion = "1.0.1"
    static let sourceSHA256 = "f5d5b7e37ea61f9fd6b35b0e287e29db5d7771c4a9f8cf54bd1aa62835788b82"

    enum RuntimeState: String, CaseIterable, Sendable {
        case ready = "READY"
        case loading = "LOADING"
        case empty = "EMPTY"
        case partial_error = "PARTIAL_ERROR"
        case error = "ERROR"
        case offline = "OFFLINE"
        case forbidden = "FORBIDDEN"
        case confirm = "CONFIRM"
        case success = "SUCCESS"
    }

    enum Space {
        static let hairline: CGFloat = 1
        static let xxs: CGFloat = 2
        static let xs: CGFloat = 4
        static let sm: CGFloat = 8
        static let md: CGFloat = 12
        static let lg: CGFloat = 16
        static let xl: CGFloat = 20
        static let xxl: CGFloat = 24
        static let xxxl: CGFloat = 32
        static let section: CGFloat = 48
        static let page: CGFloat = 60
    }

    enum Radius {
        static let xs: CGFloat = 4
        static let sm: CGFloat = 8
        static let md: CGFloat = 12
        static let lg: CGFloat = 16
        static let panel: CGFloat = 20
        static let full: CGFloat = 9999
    }

    enum Size {
        static let minimumTouchTarget: CGFloat = 44
        static let actionButton: CGFloat = 48
        static let field: CGFloat = 44
        static let compactRow: CGFloat = 52
        static let regularRow: CGFloat = 72
    }

    enum TypeRole {
        case display, heading1, heading2, heading3, body, bodySmall, caption, mono

        var font: Font {
            switch self {
            case .display: .largeTitle.bold()
            case .heading1: .title.bold()
            case .heading2: .title2.bold()
            case .heading3: .headline
            case .body: .body
            case .bodySmall: .subheadline
            case .caption, .mono: .caption
            }
        }
    }
}

private struct REITSReducedMotionModifier: ViewModifier {
    @Environment(\.accessibilityReduceMotion) private var reduceMotion

    func body(content: Content) -> some View {
        content.transaction { transaction in
            if reduceMotion { transaction.animation = nil }
        }
    }
}

extension View {
    func reitsReducedMotionAware() -> some View {
        modifier(REITSReducedMotionModifier())
    }
}
