import SwiftUI /// Success state shown after the contact has been saved. struct ClipSuccessView: View { @State private var showCheckmark = false var body: some View { VStack(spacing: ClipDesign.Spacing.xLarge) { // Animated checkmark Image(systemName: "checkmark.circle.fill") .resizable() .scaledToFit() .frame(width: ClipDesign.Size.avatarLarge, height: ClipDesign.Size.avatarLarge) .foregroundStyle(Color.Clip.success) .scaleEffect(showCheckmark ? 1 : 0.5) .opacity(showCheckmark ? 1 : 0) .animation(.spring(response: 0.5, dampingFraction: 0.6), value: showCheckmark) VStack(spacing: ClipDesign.Spacing.small) { Text("Contact Saved!") .font(.title2) .bold() .foregroundStyle(Color.Clip.text) Text("You can find this contact in your Contacts app.") .font(.subheadline) .foregroundStyle(Color.Clip.secondaryText) .multilineTextAlignment(.center) } // Open Contacts button Button { openContacts() } label: { Text("Open Contacts") .font(.headline) .foregroundStyle(Color.Clip.background) .frame(maxWidth: .infinity) .frame(height: ClipDesign.Size.buttonHeight) .background(Color.Clip.success) .clipShape(.capsule) } .padding(.horizontal, ClipDesign.Spacing.xLarge) .padding(.top, ClipDesign.Spacing.large) } .padding(ClipDesign.Spacing.xLarge) .onAppear { showCheckmark = true } .accessibilityElement(children: .combine) .accessibilityLabel(Text("Contact saved successfully")) } private func openContacts() { if let url = URL(string: "contacts://") { UIApplication.shared.open(url) } } } #Preview { ZStack { Color.Clip.background .ignoresSafeArea() ClipSuccessView() } }