Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
7f45041b52
commit
e434c52e78
@ -335,6 +335,7 @@
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Adjust arc duration" : {
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
@ -2178,6 +2179,7 @@
|
||||
}
|
||||
},
|
||||
"Ritual length" : {
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
@ -2204,6 +2206,7 @@
|
||||
"isCommentAutoGenerated" : true
|
||||
},
|
||||
"Ritual pacing" : {
|
||||
"extractionState" : "stale",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
|
||||
@ -1,129 +0,0 @@
|
||||
import SwiftUI
|
||||
import Bedrock
|
||||
|
||||
struct ProUpgradeView: View {
|
||||
var body: some View {
|
||||
ScrollView(.vertical, showsIndicators: false) {
|
||||
VStack(spacing: Design.Spacing.xxLarge) {
|
||||
headerSection
|
||||
|
||||
featuresSection
|
||||
|
||||
comingSoonSection
|
||||
}
|
||||
.padding(Design.Spacing.large)
|
||||
}
|
||||
.background(AppSurface.primary)
|
||||
.navigationTitle(String(localized: "Rituals Pro"))
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
}
|
||||
|
||||
private var headerSection: some View {
|
||||
VStack(spacing: Design.Spacing.medium) {
|
||||
Image(systemName: "crown.fill")
|
||||
.font(.system(size: Design.BaseFontSize.title))
|
||||
.foregroundStyle(AppAccent.primary)
|
||||
.accessibilityHidden(true)
|
||||
|
||||
Text(String(localized: "Unlock Your Full Potential"))
|
||||
.font(.title2)
|
||||
.bold()
|
||||
.foregroundStyle(AppTextColors.primary)
|
||||
.multilineTextAlignment(.center)
|
||||
|
||||
Text(String(localized: "Rituals Pro gives you everything you need to build lasting habits."))
|
||||
.font(.body)
|
||||
.foregroundStyle(AppTextColors.secondary)
|
||||
.multilineTextAlignment(.center)
|
||||
}
|
||||
.padding(.top, Design.Spacing.large)
|
||||
}
|
||||
|
||||
private var featuresSection: some View {
|
||||
VStack(alignment: .leading, spacing: Design.Spacing.medium) {
|
||||
ProFeatureRowView(
|
||||
icon: "infinity",
|
||||
title: String(localized: "Unlimited Rituals"),
|
||||
subtitle: String(localized: "Create as many arcs as you need")
|
||||
)
|
||||
|
||||
ProFeatureRowView(
|
||||
icon: "chart.line.uptrend.xyaxis",
|
||||
title: String(localized: "Advanced Insights"),
|
||||
subtitle: String(localized: "Deeper analytics on your progress")
|
||||
)
|
||||
|
||||
ProFeatureRowView(
|
||||
icon: "icloud.fill",
|
||||
title: String(localized: "Priority Sync"),
|
||||
subtitle: String(localized: "Faster iCloud synchronization")
|
||||
)
|
||||
|
||||
ProFeatureRowView(
|
||||
icon: "heart.fill",
|
||||
title: String(localized: "Support Development"),
|
||||
subtitle: String(localized: "Help us build more features")
|
||||
)
|
||||
}
|
||||
.padding(Design.Spacing.large)
|
||||
.background(AppSurface.card)
|
||||
.clipShape(.rect(cornerRadius: Design.CornerRadius.large))
|
||||
}
|
||||
|
||||
private var comingSoonSection: some View {
|
||||
VStack(spacing: Design.Spacing.medium) {
|
||||
Button {
|
||||
// No action - coming soon
|
||||
} label: {
|
||||
Text(String(localized: "Coming Soon"))
|
||||
.font(.headline)
|
||||
.foregroundStyle(AppTextColors.disabled)
|
||||
.frame(maxWidth: .infinity)
|
||||
.frame(height: AppMetrics.Size.buttonHeight)
|
||||
.background(AppSurface.tertiary)
|
||||
.clipShape(.rect(cornerRadius: Design.CornerRadius.medium))
|
||||
}
|
||||
.disabled(true)
|
||||
|
||||
Text(String(localized: "Pro features are in development"))
|
||||
.font(.caption)
|
||||
.foregroundStyle(AppTextColors.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private struct ProFeatureRowView: View {
|
||||
let icon: String
|
||||
let title: String
|
||||
let subtitle: String
|
||||
|
||||
var body: some View {
|
||||
HStack(spacing: Design.Spacing.medium) {
|
||||
Image(systemName: icon)
|
||||
.font(.title3)
|
||||
.foregroundStyle(AppAccent.primary)
|
||||
.frame(width: AppMetrics.Size.iconLarge)
|
||||
.accessibilityHidden(true)
|
||||
|
||||
VStack(alignment: .leading, spacing: Design.Spacing.xxxSmall) {
|
||||
Text(title)
|
||||
.font(.subheadline)
|
||||
.bold()
|
||||
.foregroundStyle(AppTextColors.primary)
|
||||
|
||||
Text(subtitle)
|
||||
.font(.caption)
|
||||
.foregroundStyle(AppTextColors.secondary)
|
||||
}
|
||||
|
||||
Spacer(minLength: Design.Spacing.small)
|
||||
}
|
||||
.accessibilityElement(children: .combine)
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
NavigationStack {
|
||||
ProUpgradeView()
|
||||
}
|
||||
}
|
||||
@ -54,22 +54,6 @@ struct SettingsView: View {
|
||||
)
|
||||
}
|
||||
|
||||
SettingsSectionHeader(
|
||||
title: String(localized: "Rituals Pro"),
|
||||
systemImage: "crown.fill",
|
||||
accentColor: AppAccent.secondary
|
||||
)
|
||||
|
||||
SettingsCard(backgroundColor: AppSurface.card, borderColor: AppBorder.subtle) {
|
||||
SettingsNavigationRow(
|
||||
title: String(localized: "Upgrade to Pro"),
|
||||
subtitle: String(localized: "Unlock unlimited rituals and more"),
|
||||
backgroundColor: AppSurface.primary
|
||||
) {
|
||||
ProUpgradeView()
|
||||
}
|
||||
}
|
||||
|
||||
SettingsSectionHeader(
|
||||
title: String(localized: "iCloud Sync"),
|
||||
systemImage: "icloud",
|
||||
|
||||
@ -68,7 +68,6 @@ Rituals is a paid, offline-first habit tracker built around customizable "ritual
|
||||
- Daily reminder notifications with time picker
|
||||
- Haptics and sound toggles (wired to habit check-ins)
|
||||
- iCloud settings sync
|
||||
- Pro upgrade placeholder
|
||||
- Debug tools: reset onboarding, app icon generation, branding preview
|
||||
|
||||
### Onboarding
|
||||
|
||||
Loading…
Reference in New Issue
Block a user