diff --git a/NucleicRemote/NucleicRemote/Views/SessionsView.swift b/NucleicRemote/NucleicRemote/Views/SessionsView.swift index c5e679d..71d0d9e 100644 --- a/NucleicRemote/NucleicRemote/Views/SessionsView.swift +++ b/NucleicRemote/NucleicRemote/Views/SessionsView.swift @@ -107,18 +107,33 @@ struct SessionsView: View { .onChange(of: path) { _, newPath in store.compactDetailPresented = !newPath.isEmpty } - .toolbar { - ToolbarItem(placement: .topBarTrailing) { - Button { - showArchived.toggle() - } label: { - Image(systemName: showArchived ? "archivebox.fill" : "archivebox") - } - } - } } } + /// The page's large title as content, so the archive toggle can share its row (vertically + /// centered with the title) instead of floating in the compact bar above it. Mirrors the Home + /// dashboard's greeting header — same large-title font and top band — for a consistent look. + private var sessionsHeader: some View { + HStack { + Text("Sessions").font(.largeTitle.bold()) + Spacer() + Button { + showArchived.toggle() + } label: { + Image(systemName: showArchived ? "archivebox.fill" : "archivebox") + .font(.title3) + } + .foregroundStyle(Palette.accent) + .accessibilityLabel(showArchived ? "Hide archived sessions" : "Show archived sessions") + } + .padding(.horizontal) + .padding(.top, 52) + .padding(.bottom, 8) + .frame(maxWidth: .infinity) + // Cover the list rows that scroll up behind the pinned header. + .background(Color(.systemGroupedBackground)) + } + /// Push the session a notification tap asked for, then clear the request. private func consumeRoute() { guard let route = store.pendingRoute else { return }