Fix small widget layout and settings light mode contrast
- Remove prompt text from small widget before voting - Show date instead of "Logged!" after voting on small widget - Fix light mode settings: section=gray, inner rows=white for contrast - Remove redundant backgrounds from Browse Themes and subscription banner 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -83,7 +83,7 @@ struct VotedStatsView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Small: Centered mood with checkmark
|
// MARK: - Small: Centered mood with checkmark and date
|
||||||
private var smallLayout: some View {
|
private var smallLayout: some View {
|
||||||
VStack(spacing: 8) {
|
VStack(spacing: 8) {
|
||||||
if let mood = entry.todaysMood {
|
if let mood = entry.todaysMood {
|
||||||
@@ -105,7 +105,7 @@ struct VotedStatsView: View {
|
|||||||
.accessibilityElement(children: .combine)
|
.accessibilityElement(children: .combine)
|
||||||
.accessibilityLabel(String(localized: "Mood logged: \(mood.strValue)"))
|
.accessibilityLabel(String(localized: "Mood logged: \(mood.strValue)"))
|
||||||
|
|
||||||
Text("Logged!")
|
Text(votingDateString)
|
||||||
.font(.caption.weight(.semibold))
|
.font(.caption.weight(.semibold))
|
||||||
.foregroundStyle(.secondary)
|
.foregroundStyle(.secondary)
|
||||||
|
|
||||||
|
|||||||
@@ -32,34 +32,25 @@ struct VotingView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Small Widget: 3 over 2 grid
|
// MARK: - Small Widget: 3 over 2 grid (no text - just mood buttons)
|
||||||
private var smallLayout: some View {
|
private var smallLayout: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 8) {
|
||||||
Text(hasSubscription ? promptText : "Tap to open app")
|
|
||||||
.font(.caption)
|
|
||||||
.foregroundStyle(.primary)
|
|
||||||
.multilineTextAlignment(.center)
|
|
||||||
.lineLimit(1)
|
|
||||||
.minimumScaleFactor(0.7)
|
|
||||||
.padding(.bottom, 10)
|
|
||||||
|
|
||||||
// Top row: Great, Good, Average
|
// Top row: Great, Good, Average
|
||||||
HStack(spacing: 12) {
|
HStack(spacing: 12) {
|
||||||
ForEach([Mood.great, .good, .average], id: \.rawValue) { mood in
|
ForEach([Mood.great, .good, .average], id: \.rawValue) { mood in
|
||||||
moodButton(for: mood, size: 36)
|
moodButton(for: mood, size: 40)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.bottom, 6)
|
|
||||||
|
|
||||||
// Bottom row: Bad, Horrible
|
// Bottom row: Bad, Horrible
|
||||||
HStack(spacing: 12) {
|
HStack(spacing: 12) {
|
||||||
ForEach([Mood.bad, .horrible], id: \.rawValue) { mood in
|
ForEach([Mood.bad, .horrible], id: \.rawValue) { mood in
|
||||||
moodButton(for: mood, size: 36)
|
moodButton(for: mood, size: 40)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.padding(.horizontal, 8)
|
.padding(.horizontal, 8)
|
||||||
.padding(.vertical, 4)
|
.padding(.vertical, 8)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Medium Widget: Single row
|
// MARK: - Medium Widget: Single row
|
||||||
|
|||||||
@@ -54,8 +54,6 @@ struct CustomizeContentView: View {
|
|||||||
.foregroundColor(.secondary)
|
.foregroundColor(.secondary)
|
||||||
}
|
}
|
||||||
.padding(12)
|
.padding(12)
|
||||||
.background(colorScheme == .dark ? Color(.systemGray6) : .white)
|
|
||||||
.clipShape(RoundedRectangle(cornerRadius: 16))
|
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
}
|
}
|
||||||
@@ -231,7 +229,7 @@ struct SettingsSection<Content: View>: View {
|
|||||||
.padding(16)
|
.padding(16)
|
||||||
.background(
|
.background(
|
||||||
RoundedRectangle(cornerRadius: 16)
|
RoundedRectangle(cornerRadius: 16)
|
||||||
.fill(colorScheme == .dark ? Color(.systemGray6) : .white)
|
.fill(Color(.systemGray6))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -339,7 +337,7 @@ struct ImagePackPickerCompact: View {
|
|||||||
RoundedRectangle(cornerRadius: 12)
|
RoundedRectangle(cornerRadius: 12)
|
||||||
.fill(imagePack == images
|
.fill(imagePack == images
|
||||||
? Color.accentColor.opacity(0.08)
|
? Color.accentColor.opacity(0.08)
|
||||||
: (colorScheme == .dark ? Color(.systemGray5) : Color(.systemGray6)))
|
: (colorScheme == .dark ? Color(.systemGray5) : .white))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
@@ -387,7 +385,7 @@ struct VotingLayoutPickerCompact: View {
|
|||||||
RoundedRectangle(cornerRadius: 12)
|
RoundedRectangle(cornerRadius: 12)
|
||||||
.fill(currentLayout == layout
|
.fill(currentLayout == layout
|
||||||
? Color.accentColor.opacity(0.1)
|
? Color.accentColor.opacity(0.1)
|
||||||
: (colorScheme == .dark ? Color(.systemGray5) : Color(.systemGray6)))
|
: (colorScheme == .dark ? Color(.systemGray5) : .white))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
@@ -607,7 +605,7 @@ struct PersonalityPackPickerCompact: View {
|
|||||||
RoundedRectangle(cornerRadius: 12)
|
RoundedRectangle(cornerRadius: 12)
|
||||||
.fill(personalityPack == aPack
|
.fill(personalityPack == aPack
|
||||||
? Color.accentColor.opacity(0.08)
|
? Color.accentColor.opacity(0.08)
|
||||||
: (colorScheme == .dark ? Color(.systemGray5) : Color(.systemGray6)))
|
: (colorScheme == .dark ? Color(.systemGray5) : .white))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
@@ -667,7 +665,7 @@ struct DayFilterPickerCompact: View {
|
|||||||
.frame(height: 40)
|
.frame(height: 40)
|
||||||
.background(
|
.background(
|
||||||
RoundedRectangle(cornerRadius: 10)
|
RoundedRectangle(cornerRadius: 10)
|
||||||
.fill(isActive ? Color.accentColor : (colorScheme == .dark ? Color(.systemGray5) : Color(.systemGray6)))
|
.fill(isActive ? Color.accentColor : (colorScheme == .dark ? Color(.systemGray5) : .white))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
@@ -725,10 +723,6 @@ struct SubscriptionBannerView: View {
|
|||||||
.background(Capsule().fill(Color.green.opacity(0.15)))
|
.background(Capsule().fill(Color.green.opacity(0.15)))
|
||||||
}
|
}
|
||||||
.padding(16)
|
.padding(16)
|
||||||
.background(
|
|
||||||
RoundedRectangle(cornerRadius: 16)
|
|
||||||
.fill(colorScheme == .dark ? Color(.systemGray6) : .white)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var notSubscribedView: some View {
|
private var notSubscribedView: some View {
|
||||||
@@ -821,7 +815,7 @@ struct DayViewStylePickerCompact: View {
|
|||||||
RoundedRectangle(cornerRadius: 12)
|
RoundedRectangle(cornerRadius: 12)
|
||||||
.fill(dayViewStyle == style
|
.fill(dayViewStyle == style
|
||||||
? Color.accentColor.opacity(0.1)
|
? Color.accentColor.opacity(0.1)
|
||||||
: (colorScheme == .dark ? Color(.systemGray5) : Color(.systemGray6)))
|
: (colorScheme == .dark ? Color(.systemGray5) : .white))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
.buttonStyle(.plain)
|
.buttonStyle(.plain)
|
||||||
|
|||||||
Reference in New Issue
Block a user