import SwiftUI struct LoadingView: View { var message: String = "Loading..." var body: some View { VStack(spacing: 16) { ProgressView() .controlSize(.large) .tint(Color.accentWarm) Text(message) .font(.subheadline) .foregroundStyle(Color.text3) } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.canvas) } } struct ErrorBanner: View { let message: String var onRetry: (() -> Void)? var body: some View { HStack(spacing: 12) { Image(systemName: "exclamationmark.triangle.fill") .foregroundStyle(Color.error) Text(message) .font(.subheadline) .foregroundStyle(Color.text2) Spacer() if let onRetry { Button("Retry") { onRetry() } .font(.subheadline.weight(.semibold)) .foregroundStyle(Color.accentWarm) } } .padding(12) .background(Color.error.opacity(0.06)) .clipShape(RoundedRectangle(cornerRadius: 12)) } } struct EmptyStateView: View { let icon: String let title: String let subtitle: String var body: some View { VStack(spacing: 12) { Image(systemName: icon) .font(.system(size: 40)) .foregroundStyle(Color.text4) Text(title) .font(.headline) .foregroundStyle(Color.text2) Text(subtitle) .font(.subheadline) .foregroundStyle(Color.text3) .multilineTextAlignment(.center) } .padding(40) .frame(maxWidth: .infinity) } }