103 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
import SwiftUI
 | 
						||
 | 
						||
struct TermsAgreementCard: View {
 | 
						||
    @Binding var isAccepted: Bool
 | 
						||
    var openTerms: () -> Void
 | 
						||
 | 
						||
    var body: some View {
 | 
						||
        VStack(alignment: .leading, spacing: 12) {
 | 
						||
            HStack(alignment: .top, spacing: 12) {
 | 
						||
                Button {
 | 
						||
                    isAccepted.toggle()
 | 
						||
                } label: {
 | 
						||
                    Image(systemName: isAccepted ? "checkmark.square.fill" : "square")
 | 
						||
                        .font(.system(size: 24, weight: .semibold))
 | 
						||
                        .foregroundColor(isAccepted ? .blue : .secondary)
 | 
						||
                }
 | 
						||
                .buttonStyle(.plain)
 | 
						||
                .accessibilityLabel(NSLocalizedString("Согласиться с правилами", comment: ""))
 | 
						||
                .accessibilityValue(isAccepted ? NSLocalizedString("Включено", comment: "") : NSLocalizedString("Выключено", comment: ""))
 | 
						||
 | 
						||
                VStack(alignment: .leading, spacing: 6) {
 | 
						||
                    Text(NSLocalizedString("Я ознакомился и принимаю правила сервиса", comment: ""))
 | 
						||
                        .font(.subheadline)
 | 
						||
                        .foregroundColor(.primary)
 | 
						||
 | 
						||
                    Button(action: openTerms) {
 | 
						||
                        HStack(spacing: 4) {
 | 
						||
                            Text(NSLocalizedString("Открыть правила", comment: ""))
 | 
						||
                            Image(systemName: "arrow.up.right")
 | 
						||
                                .font(.caption)
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                    .buttonStyle(.plain)
 | 
						||
                    .font(.footnote)
 | 
						||
                    .foregroundColor(.blue)
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
        .frame(maxWidth: .infinity, alignment: .leading)
 | 
						||
        .padding(16)
 | 
						||
        .background(Color(.secondarySystemBackground))
 | 
						||
        .cornerRadius(14)
 | 
						||
    }
 | 
						||
}
 | 
						||
 | 
						||
struct TermsFullScreenView: View {
 | 
						||
    @Binding var isPresented: Bool
 | 
						||
    var title: String
 | 
						||
    var content: String
 | 
						||
    var isLoading: Bool
 | 
						||
    var errorMessage: String?
 | 
						||
    var onRetry: () -> Void
 | 
						||
 | 
						||
    var body: some View {
 | 
						||
        NavigationView {
 | 
						||
            Group {
 | 
						||
                if isLoading {
 | 
						||
                    ProgressView()
 | 
						||
                } else if let errorMessage {
 | 
						||
                    VStack(spacing: 16) {
 | 
						||
                        Text(errorMessage)
 | 
						||
                            .multilineTextAlignment(.center)
 | 
						||
                            .padding(.horizontal)
 | 
						||
                        Button(action: onRetry) {
 | 
						||
                            Text(NSLocalizedString("Повторить", comment: ""))
 | 
						||
                                .padding(.horizontal, 24)
 | 
						||
                                .padding(.vertical, 12)
 | 
						||
                                .background(Color.blue)
 | 
						||
                                .foregroundColor(.white)
 | 
						||
                                .cornerRadius(12)
 | 
						||
                        }
 | 
						||
                    }
 | 
						||
                } else {
 | 
						||
                    ScrollView {
 | 
						||
                        VStack(alignment: .leading, spacing: 16) {
 | 
						||
                            if let attributed = try? AttributedString(markdown: content) {
 | 
						||
                                Text(attributed)
 | 
						||
                            } else {
 | 
						||
                                Text(content)
 | 
						||
                            }
 | 
						||
                        }
 | 
						||
                        .frame(maxWidth: .infinity, alignment: .leading)
 | 
						||
                        .padding()
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
            .frame(maxWidth: .infinity, maxHeight: .infinity)
 | 
						||
            .background(Color(.systemBackground))
 | 
						||
            .navigationTitle(title)
 | 
						||
            .navigationBarTitleDisplayMode(.inline)
 | 
						||
            .toolbar {
 | 
						||
                ToolbarItem(placement: .cancellationAction) {
 | 
						||
                    Button(action: { isPresented = false }) {
 | 
						||
                        Text(NSLocalizedString("Закрыть", comment: ""))
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
        .navigationViewStyle(StackNavigationViewStyle())
 | 
						||
    }
 | 
						||
}
 | 
						||
 |