Refine inbox and watch approval presentation
CI / test (push) Has been cancelled

Tighten the inbox, detail, and watch layouts so approval actions feel denser and more direct across compact surfaces.
This commit is contained in:
2026-04-19 21:50:03 +02:00
parent 61a0cc1f7d
commit 271d9657bf
13 changed files with 1122 additions and 516 deletions
+21 -15
View File
@@ -230,34 +230,40 @@ private struct InboxToolbar: ToolbarContent {
var body: some ToolbarContent {
ToolbarItem(placement: .idpTrailingToolbar) {
HStack(spacing: 8) {
HStack(spacing: 6) {
Button {
isSearchPresented = true
isSearchPresented.toggle()
} label: {
Image(systemName: "magnifyingglass")
.font(.headline)
.font(.footnote.weight(.medium))
.foregroundStyle(.primary)
.frame(width: 32, height: 32)
}
.accessibilityLabel("Search inbox")
Button {
model.selectedSection = .identity
} label: {
MonogramAvatar(title: model.profile?.name ?? "idp.global", size: 28)
ZStack {
RoundedRectangle(cornerRadius: 6, style: .continuous)
.fill(Color.idpAccentSoft)
Text(initials(from: model.profile?.name))
.font(.caption.weight(.semibold))
.foregroundStyle(IdP.tint)
}
.frame(width: 28, height: 28)
}
.accessibilityLabel("Open identity")
}
.padding(.horizontal, 10)
.padding(.vertical, 8)
.background(
RoundedRectangle(cornerRadius: 18, style: .continuous)
.fill(.clear)
.idpGlassChrome()
)
.overlay(
RoundedRectangle(cornerRadius: 18, style: .continuous)
.stroke(Color.white.opacity(0.16), lineWidth: 1)
)
}
}
private func initials(from name: String?) -> String {
guard let name else { return "YOU" }
let letters = name
.split(separator: " ")
.prefix(2)
.compactMap { $0.first }
return String(letters.map(Character.init)).uppercased()
}
}