Improve UI consistency and add heart save button

- Add themed background to all tab views (Schedule, Settings, My Trips)
- Remove navigation titles from all screens (tab bar provides context)
- Add empty state to My Trips view
- Remove max driving hours slider from trip planner (available in Settings)
- Replace save menu with heart button overlay on trip detail map
- Add ability to unsave trips by tapping heart again

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-08 11:05:28 -06:00
parent 415202e7f4
commit 8bf8bb49cb
5 changed files with 86 additions and 67 deletions

View File

@@ -48,7 +48,6 @@ struct HomeView: View {
.padding(Theme.Spacing.md)
}
.themedBackground()
.navigationTitle("SportsTime")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button {
@@ -470,35 +469,45 @@ struct SavedTripsListView: View {
@Environment(\.colorScheme) private var colorScheme
var body: some View {
Group {
ScrollView {
if trips.isEmpty {
EmptyStateView(
icon: "suitcase",
title: "No Saved Trips",
message: "Your planned adventures will appear here. Start planning your first sports road trip!"
)
.frame(maxWidth: .infinity, maxHeight: .infinity)
VStack(spacing: 16) {
Spacer()
.frame(height: 100)
Image(systemName: "suitcase")
.font(.system(size: 60))
.foregroundColor(.secondary)
Text("No Saved Trips")
.font(.title2)
.fontWeight(.semibold)
Text("Browse featured trips on the Home tab or create your own to get started.")
.font(.subheadline)
.foregroundColor(.secondary)
.multilineTextAlignment(.center)
.padding(.horizontal, 40)
}
.frame(maxWidth: .infinity)
} else {
ScrollView {
LazyVStack(spacing: Theme.Spacing.md) {
ForEach(Array(trips.enumerated()), id: \.element.id) { index, savedTrip in
if let trip = savedTrip.trip {
NavigationLink {
TripDetailView(trip: trip, games: savedTrip.games)
} label: {
SavedTripListRow(trip: trip)
}
.buttonStyle(.plain)
.staggeredAnimation(index: index)
LazyVStack(spacing: Theme.Spacing.md) {
ForEach(Array(trips.enumerated()), id: \.element.id) { index, savedTrip in
if let trip = savedTrip.trip {
NavigationLink {
TripDetailView(trip: trip, games: savedTrip.games)
} label: {
SavedTripListRow(trip: trip)
}
.buttonStyle(.plain)
.staggeredAnimation(index: index)
}
}
.padding(Theme.Spacing.md)
}
.padding(Theme.Spacing.md)
}
}
.themedBackground()
.navigationTitle("My Trips")
}
}