import SwiftUI /// Top-level router: which screen the user sees is entirely a function of /// `AppState.phase`. Nothing else in the app should make navigation /// decisions based on auth state — route through here instead. struct RootView: View { @EnvironmentObject private var appState: AppState var body: some View { Group { switch appState.phase { case .checking: LaunchView() case .signedOut: // Provided by Features/Auth/AuthFlowView.swift AuthFlowView() case .signedIn: // Provided by Features/Root/MainTabView.swift MainTabView() } } .animation(.default, value: appState.phase) } } private struct LaunchView: View { var body: some View { VStack(spacing: ZenithSpacing.xs) { Image(systemName: "doc.text.viewfinder") .font(.system(size: 44)) .foregroundStyle(.zenithBlack) ProgressView() .tint(.zenithBlack) } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.zenithBg) } }