import SwiftUI /// Title-and-body editor shared by issue/MR create and edit sheets. struct ComposeSheet: View { let heading: String let submitLabel: String let working: Bool let errorMessage: String? @Binding var title: String @Binding var bodyText: String let onSubmit: () -> Void @Environment(\.dismiss) private var dismiss var body: some View { NavigationStack { Form { Section("Title") { TextField("Title", text: $title, axis: .vertical) .lineLimit(1...3) // Titles name code: paths, commands, branch names. // Autocorrection rewrites them. .autocorrectionDisabled() .accessibilityIdentifier("compose-title") } Section("Body") { TextEditor(text: $bodyText) .frame(minHeight: 160) .font(.gbSans(.body)) .autocorrectionDisabled() .accessibilityIdentifier("compose-body") } if let errorMessage { Section { GBNotice(errorMessage) } } } .navigationTitle(heading) .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { Button("Cancel") { dismiss() } } ToolbarItem(placement: .confirmationAction) { if working { ProgressView() } else { Button(submitLabel, action: onSubmit) .disabled(title.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) .accessibilityIdentifier("compose-submit") } } } .interactiveDismissDisabled(working) } } }