feat: non-emoji group icons (SF Symbols) for consistent cross-platform look

Group icons are now semantic keys (people/home/heart/work/school/sports/party/
pet/travel/music/food/star) rendered as SF Symbols in the picker, group list,
switcher, banner and filter — instead of OS emoji that looked different on every
platform. Legacy emoji values still render as a fallback. GroupCombinedView uses
the server display_title.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-06-01 19:20:32 +02:00
parent 451d3d4d6b
commit 68349d36e5
3 changed files with 67 additions and 19 deletions

View File

@@ -229,8 +229,8 @@ struct CalendarHostView: View {
}
ForEach(groups) { g in
Button { switchGroup(g) } label: {
Label("\(g.icon ?? "👥") \(g.name)",
systemImage: store.activeGroup?.id == g.id ? "checkmark" : "person.2")
Label(g.name,
systemImage: store.activeGroup?.id == g.id ? "checkmark" : GroupIcons.symbol(g.icon))
}
}
} label: {
@@ -244,8 +244,9 @@ struct CalendarHostView: View {
@ViewBuilder private var groupBanner: some View {
if let g = store.activeGroup {
HStack(spacing: 8) {
Text("\(L10n.t("groups.view_label", appLang)): \(g.icon ?? "👥") \(g.name)")
HStack(spacing: 6) {
GroupIconView(icon: g.icon).font(.subheadline)
Text("\(L10n.t("groups.view_label", appLang)): \(g.name)")
.font(.subheadline).lineLimit(1)
Spacer()
Button(L10n.t("groups.exit", appLang)) { switchGroup(nil) }