1.0.6: Priority dishes, day rules, auto-assign CTA, tap-to-replace, export incomplete weeks, Sunday notification

- Dish.isPriority: mark dishes as priority; auto-assign gives them 2.5x weight
- Tag.dayRestriction: restrict tags to weekdays or weekend only
- Auto-assign CTA banner shown when there are empty slots (was hidden in context menu)
- Tap on filled slot opens picker to replace dish directly (no need to remove first)
- Export callout visible as soon as ≥1 slot is filled (not only when week is complete)
- WeekPlanShareView shows localized "TBD" / "Eating out" for empty/eating-out slots
- Second Sunday 17:00 push notification to plan next week
- DishDrawer sorts: priority first, then by historical usage, then alphabetically
- Search in SlotDishPickerSheet already shipped in 1.0.5 (verified ✓)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
alexandrev-tibco
2026-04-30 00:00:53 +02:00
parent 92f97f855d
commit a4dfb38feb
22 changed files with 344 additions and 26 deletions
+24
View File
@@ -130,6 +130,30 @@ struct DishFormView: View {
}
}
// Priority toggle
Toggle(isOn: Binding(
get: { viewModel.isPriority },
set: { viewModel.isPriority = $0 }
)) {
VStack(alignment: .leading, spacing: 2) {
HStack(spacing: 6) {
Image(systemName: "star.fill")
.foregroundColor(.mealMoodCoral)
.font(.system(size: 13))
Text("dish_priority")
.font(.mealMoodBodyBold)
.foregroundColor(.mealMoodTextPrimary)
}
Text("dish_priority_desc")
.font(.mealMoodCaption)
.foregroundColor(.mealMoodTextSecondary)
}
}
.tint(.mealMoodCoral)
.padding(16)
.background(Color.mealMoodSurface)
.cornerRadius(14)
if showDishLimitUpsell && reachedFreeDishLimit {
PremiumUpsellBanner(
messageKey: "premium_limit_dishes",