From a1831d003495ee0a1de0f753c67abebd646e7a0b Mon Sep 17 00:00:00 2001 From: Trey T Date: Wed, 27 May 2026 08:51:11 -0500 Subject: [PATCH] =?UTF-8?q?Detail=20sheet:=20reorder=20to=20title=20?= =?UTF-8?q?=E2=86=92=20route=20=E2=86=92=20photo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User asked for this order. Photo now slots between routeSection and LIVE STATE rather than living as a hero above the title. Used a -16 horizontal padding so the photo still goes full-bleed inside the otherwise-16pt-padded content stack. Co-Authored-By: Claude Opus 4.7 --- Flights/Views/LiveFlightDetailSheet.swift | 66 ++++++++++++----------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/Flights/Views/LiveFlightDetailSheet.swift b/Flights/Views/LiveFlightDetailSheet.swift index 85a9f86..63baa7a 100644 --- a/Flights/Views/LiveFlightDetailSheet.swift +++ b/Flights/Views/LiveFlightDetailSheet.swift @@ -38,52 +38,54 @@ struct LiveFlightDetailSheet: View { var body: some View { NavigationStack { ScrollView { - VStack(alignment: .leading, spacing: 0) { + VStack(alignment: .leading, spacing: 16) { + header + + // Depart → Arrival sits directly under the callsign + // header — it's the single most important thing the + // user opened the sheet to see. + routeSection + + // Aircraft photo follows the route. Negative + // horizontal padding lets the photo break out of the + // 16pt content padding to be full-bleed edge-to-edge. photoBanner + .padding(.horizontal, -16) - VStack(alignment: .leading, spacing: 16) { - header + if let photo = aircraftPhoto, let credit = photo.photographer { + photoCredit(name: credit, link: photo.detailLink) + } - // Depart → Arrival lives directly under the callsign - // header — it's the single most important thing the - // user opened the sheet to see. - routeSection + Divider() - Divider() + Text("LIVE STATE") + .font(FlightTheme.label()) + .foregroundStyle(FlightTheme.textTertiary) + .tracking(1) - Text("LIVE STATE") - .font(FlightTheme.label()) - .foregroundStyle(FlightTheme.textTertiary) - .tracking(1) + liveStateGrid - liveStateGrid - - if recentFlights.count > 1 { - Text("RECENT FLIGHTS") - .font(FlightTheme.label()) - .foregroundStyle(FlightTheme.textTertiary) - .tracking(1) - .padding(.top, 4) - - ForEach(recentFlights.prefix(8), id: \.self) { flight in - recentFlightRow(flight) - } - } - - Text("AIRCRAFT") + if recentFlights.count > 1 { + Text("RECENT FLIGHTS") .font(FlightTheme.label()) .foregroundStyle(FlightTheme.textTertiary) .tracking(1) .padding(.top, 4) - aircraftCard - - if let photo = aircraftPhoto, let credit = photo.photographer { - photoCredit(name: credit, link: photo.detailLink) + ForEach(recentFlights.prefix(8), id: \.self) { flight in + recentFlightRow(flight) } } - .padding(16) + + Text("AIRCRAFT") + .font(FlightTheme.label()) + .foregroundStyle(FlightTheme.textTertiary) + .tracking(1) + .padding(.top, 4) + + aircraftCard } + .padding(16) } .background(FlightTheme.background.ignoresSafeArea()) .toolbar {