Files
Reflect/Shared/Onboarding/views/OnboardingWelcome.swift
Trey t 0442eab1f8 Rebrand entire project from Feels to Reflect
Complete rename across all bundle IDs, App Groups, CloudKit containers,
StoreKit product IDs, data store filenames, URL schemes, logger subsystems,
Swift identifiers, user-facing strings (7 languages), file names, directory
names, Xcode project, schemes, assets, and documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 11:47:16 -06:00

122 lines
3.9 KiB
Swift

//
// OnboardingWelcome.swift
// Reflect
//
// Created by Claude Code on 12/10/24.
//
import SwiftUI
struct OnboardingWelcome: View {
var body: some View {
ZStack {
// Gradient background
LinearGradient(
colors: [Color(hex: "667eea"), Color(hex: "764ba2")],
startPoint: .topLeading,
endPoint: .bottomTrailing
)
.ignoresSafeArea()
VStack(spacing: 0) {
Spacer()
// App icon/logo area
ZStack {
Circle()
.fill(.white.opacity(0.15))
.frame(width: 160, height: 160)
Circle()
.fill(.white.opacity(0.2))
.frame(width: 120, height: 120)
Image(systemName: "heart.fill")
.font(.largeTitle)
.foregroundColor(.white)
}
.padding(.bottom, 40)
// Title
Text("Welcome to Reflect")
.font(.largeTitle.weight(.bold))
.foregroundColor(.white)
.padding(.bottom, 12)
// Subtitle
Text("Track your mood, discover patterns,\nand understand yourself better.")
.font(.headline.weight(.medium))
.foregroundColor(.white.opacity(0.9))
.multilineTextAlignment(.center)
.padding(.horizontal, 40)
Spacer()
// Feature highlights
VStack(spacing: 20) {
FeatureRow(icon: "bell.badge.fill", title: "Daily Reminders", description: "Never forget to log your mood")
FeatureRow(icon: "chart.bar.fill", title: "Beautiful Insights", description: "See your mood patterns over time")
FeatureRow(icon: "paintpalette.fill", title: "Fully Customizable", description: "Make it yours with themes & colors")
}
.padding(.horizontal, 30)
.padding(.bottom, 40)
// Swipe hint
HStack(spacing: 8) {
Text("Swipe to get started")
.font(.subheadline.weight(.medium))
.foregroundColor(.white.opacity(0.7))
Image(systemName: "chevron.right")
.font(.subheadline.weight(.semibold))
.foregroundColor(.white.opacity(0.7))
}
.padding(.bottom, 60)
.accessibilityLabel(String(localized: "Swipe right to continue"))
.accessibilityHint(String(localized: "Swipe to the next onboarding step"))
}
}
.accessibilityIdentifier(AccessibilityID.Onboarding.welcomeScreen)
}
}
struct FeatureRow: View {
let icon: String
let title: String
let description: String
var body: some View {
HStack(spacing: 16) {
ZStack {
Circle()
.fill(.white.opacity(0.2))
.frame(width: 50, height: 50)
Image(systemName: icon)
.font(.title3)
.foregroundColor(.white)
}
.accessibilityHidden(true)
VStack(alignment: .leading, spacing: 2) {
Text(title)
.font(.body.weight(.semibold))
.foregroundColor(.white)
Text(description)
.font(.subheadline)
.foregroundColor(.white.opacity(0.8))
}
Spacer()
}
.accessibilityElement(children: .combine)
.accessibilityLabel("\(title): \(description)")
}
}
struct OnboardingWelcome_Previews: PreviewProvider {
static var previews: some View {
OnboardingWelcome()
}
}