Chat View Refinement

Nucleic-Session: 4E56990A-96AE-4597-9140-753CB82E769D
Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
2026-07-05 01:12:57 -07:00
co-authored by Nucleic
parent 6f492de70f
commit 3c26b29505
@@ -21,39 +21,16 @@ struct SessionDetailView: View {
} }
var body: some View { var body: some View {
Group {
if tab == 0 {
TranscriptList(events: store.openEvents) TranscriptList(events: store.openEvents)
} else if store.capabilities.canFetchDiff || store.openDiff != nil { // The chat bar floats over the scrolling content on Liquid Glass instead of sitting
SessionDiffView(diff: store.openDiff, loading: store.diffLoading) // in a boxed strip below it, so the transcript runs the full height of the screen.
.onAppear { store.fetchDiff(sessionID) }
} else {
// Older host with no on-demand diff — the stat summary is all it projects.
DiffSummaryView(diffStat: summary?.diffStat)
}
}
// 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 } .safeAreaInset(edge: .bottom) { actionArea }
.navigationTitle(summary?.title ?? "Session") .navigationTitle(summary?.title ?? "Session")
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.toolbar { .toolbar {
// Transcript/Diff lives in the navigation bar (icon segments) rather than a ToolbarItem(placement: .topBarTrailing) { sessionMenu }
// 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) }
}
} }
.sheet(isPresented: $showDiff) { diffSheet }
.alert("Rename chat", isPresented: $showRename) { .alert("Rename chat", isPresented: $showRename) {
TextField("Title", text: $renameDraft) TextField("Title", text: $renameDraft)
Button("Cancel", role: .cancel) {} Button("Cancel", role: .cancel) {}