import Recording import SwiftUI /// The root view of the Attendi sample app. /// /// The view hosts the `RecordingView` feature from the `Recording` target of the `Features` package, which drives the whole recording flow, /// and presents the transcribed text of every processed recording in a modal sheet. struct ContentView: View { // MARK: Properties /// The transcription currently presented in the modal sheet, or `nil` when none is shown. @State private var transcription: Transcription? // MARK: Body /// The content of the view: the recording feature's view, attached to the microphone-backed recording service and the on-device speech /// transcribing service, with the transcribed text of every processed recording presented in a modal sheet. var body: some View { RecordingView( recorder: AudioRecordingService(), transcriber: AudioTranscribingService() ) { text in transcription = .init(text: text) } .sheet(item: $transcription) { transcription in NavigationStack { ScrollView { Text(transcription.text) .frame( maxWidth: .infinity, alignment: .leading ) .padding() } .navigationTitle("Transcription") #if !os(macOS) .navigationBarTitleDisplayMode(.inline) #endif .toolbar { Button("Done") { self.transcription = nil } } } .presentationDetents([.medium, .large]) } } } // MARK: - Models /// A transcription of a processed recording to present in the modal sheet. private struct Transcription: Identifiable { /// The unique identifier of the transcription. let id = UUID() /// The transcribed text of the processed recording. let text: String } // MARK: - Previews #Preview( "Content view" ) { ContentView() }