From fba19f83301db95a683470d19b3a032caf41c3f7 Mon Sep 17 00:00:00 2001 From: Andrew Blakeslee Moore Date: Sun, 5 Jul 2026 00:53:04 -0700 Subject: [PATCH] Chat View Refinement Nucleic-Session: 4E56990A-96AE-4597-9140-753CB82E769D Co-authored-by: Nucleic --- .../Views/SessionDetailView.swift | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/NucleicRemote/NucleicRemote/Views/SessionDetailView.swift b/NucleicRemote/NucleicRemote/Views/SessionDetailView.swift index 0fcbf47..c0aba44 100644 --- a/NucleicRemote/NucleicRemote/Views/SessionDetailView.swift +++ b/NucleicRemote/NucleicRemote/Views/SessionDetailView.swift @@ -20,19 +20,7 @@ struct SessionDetailView: View { } var body: some View { - VStack(spacing: 0) { - Picker("", selection: $tab) { - Text("Transcript").tag(0) - Text("Diff").tag(1) - } - .pickerStyle(.segmented) - .padding(.horizontal) - .padding(.bottom, 8) - - if store.canControl, let summary { controlBar(summary) } - - Divider() - + Group { if tab == 0 { TranscriptList(events: store.openEvents) } else if store.capabilities.canFetchDiff || store.openDiff != nil { @@ -42,12 +30,25 @@ struct SessionDetailView: View { // Older host with no on-demand diff — the stat summary is all it projects. DiffSummaryView(diffStat: summary?.diffStat) } - - actionArea } + // The chat bar floats over the scrolling content on Liquid Glass instead of sitting in + // a boxed strip below it, so the transcript runs the full height of the screen. + .safeAreaInset(edge: .bottom) { actionArea } .navigationTitle(summary?.title ?? "Session") .navigationBarTitleDisplayMode(.inline) .toolbar { + // Transcript/Diff lives in the navigation bar (icon segments) rather than a + // dedicated row — it's a mode flip, not content, and shouldn't cost chat height. + ToolbarItem(placement: .topBarTrailing) { + Picker("View", selection: $tab) { + Image(systemName: "text.bubble").tag(0) + .accessibilityLabel("Transcript") + Image(systemName: "plus.forwardslash.minus").tag(1) + .accessibilityLabel("Diff") + } + .pickerStyle(.segmented) + .fixedSize() + } if let summary, store.canControl { ToolbarItem(placement: .topBarTrailing) { sessionMenu(summary) } }