fix: add contentShape to all tappable rows so entire row area registers taps
Adds .contentShape(Rectangle()) or .contentShape(Capsule()) to 11 buttons, NavigationLinks, and onTapGesture handlers across 8 files where only the visible content (text/icons) was receiving taps instead of the full row. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -147,6 +147,7 @@ struct HomeContent_Classic: View {
|
||||
selectedSuggestedTrip = suggestedTrip
|
||||
} label: {
|
||||
SuggestedTripCard(suggestedTrip: suggestedTrip)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
@@ -233,6 +234,7 @@ struct HomeContent_Classic: View {
|
||||
TripDetailView(trip: trip)
|
||||
} label: {
|
||||
classicTripCard(savedTrip: savedTrip, trip: trip)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.staggeredAnimation(index: index, delay: 0.05)
|
||||
|
||||
@@ -318,6 +318,7 @@ struct PollDetailView: View {
|
||||
selectedTrip = trip
|
||||
} label: {
|
||||
TripPreviewCard(trip: trip, index: index + 1)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
@@ -87,6 +87,7 @@ struct PollsListView: View {
|
||||
ForEach(polls) { poll in
|
||||
NavigationLink(value: poll) {
|
||||
PollRowView(poll: poll)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -209,6 +209,7 @@ struct AchievementsListView: View {
|
||||
) {
|
||||
ForEach(filtered) { achievement in
|
||||
AchievementCard(achievement: achievement)
|
||||
.contentShape(Rectangle())
|
||||
.onTapGesture {
|
||||
selectedAchievement = achievement
|
||||
}
|
||||
@@ -283,6 +284,7 @@ struct SportFilterButton: View {
|
||||
.background(isSelected ? color : Theme.cardBackground(colorScheme))
|
||||
.foregroundStyle(isSelected ? .white : Theme.textPrimary(colorScheme))
|
||||
.clipShape(Capsule())
|
||||
.contentShape(Capsule())
|
||||
.overlay {
|
||||
Capsule()
|
||||
.stroke(isSelected ? Color.clear : color.opacity(0.3), lineWidth: 1)
|
||||
|
||||
@@ -135,6 +135,7 @@ private struct SportChip: View {
|
||||
Capsule()
|
||||
.fill(isSelected ? sport.themeColor : Theme.cardBackgroundElevated(colorScheme))
|
||||
)
|
||||
.contentShape(Capsule())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityValue(isSelected ? "Selected" : "Not selected")
|
||||
@@ -173,6 +174,7 @@ private struct GamesListByYear: View {
|
||||
visit: visit,
|
||||
stadium: AppDataProvider.shared.stadium(for: visit.stadiumId)
|
||||
)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
|
||||
@@ -236,6 +236,7 @@ struct SportFilterChip: View {
|
||||
.background(isSelected ? Color.blue : Color(.secondarySystemBackground))
|
||||
.foregroundStyle(isSelected ? .white : .primary)
|
||||
.clipShape(Capsule())
|
||||
.contentShape(Capsule())
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.accessibilityIdentifier("schedule.sport.\(sport.rawValue.lowercased())")
|
||||
|
||||
@@ -609,6 +609,7 @@ struct TripOptionCard: View {
|
||||
.padding(Theme.Spacing.md)
|
||||
.background(Theme.cardBackground(colorScheme))
|
||||
.clipShape(RoundedRectangle(cornerRadius: Theme.CornerRadius.medium))
|
||||
.contentShape(RoundedRectangle(cornerRadius: Theme.CornerRadius.medium))
|
||||
.overlay {
|
||||
RoundedRectangle(cornerRadius: Theme.CornerRadius.medium)
|
||||
.stroke(Theme.surfaceGlow(colorScheme), lineWidth: 1)
|
||||
|
||||
@@ -97,6 +97,7 @@ struct TeamPickerStep: View {
|
||||
.padding(Theme.Spacing.md)
|
||||
.background(Theme.cardBackgroundElevated(colorScheme))
|
||||
.clipShape(RoundedRectangle(cornerRadius: Theme.CornerRadius.medium))
|
||||
.contentShape(RoundedRectangle(cornerRadius: Theme.CornerRadius.medium))
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: Theme.CornerRadius.medium)
|
||||
.stroke(Theme.textMuted(colorScheme).opacity(0.3), lineWidth: 1)
|
||||
|
||||
Reference in New Issue
Block a user