import SwiftUI struct ProviderErrorDisplay: Sendable { let preview: String let full: String} @MainActorstruct ProviderErrorView: View { let title: String let display: ProviderErrorDisplay @Binding var isExpanded: Bool let onCopy: () -> Void var body: some View { VStack(alignment: .leading, spacing: 6) { HStack(alignment: .firstTextBaseline, spacing: 8) { Text(self.title) .font(.footnote.weight(.semibold)) .foregroundStyle(.secondary) Spacer() Button { self.onCopy() } label: { Image(systemName: "doc.on.doc") } .buttonStyle(.plain) .foregroundStyle(.secondary) .help("Copy error") } Text(self.display.preview) .font(.footnote) .foregroundStyle(.secondary) .lineLimit(3) .fixedSize(horizontal: false, vertical: true) if self.display.preview != self.display.full { Button(self.isExpanded ? "Hide details" : "Show details") { self.isExpanded.toggle() } .buttonStyle(.link) .font(.footnote) } if self.isExpanded { Text(self.display.full) .font(.footnote) .textSelection(.enabled) .fixedSize(horizontal: false, vertical: true) } } .padding(.leading, 2) }}
import SwiftUI
struct ProviderErrorDisplay: Sendable {
let preview: String
let full: String
}
@MainActor
struct ProviderErrorView: View {
let title: String
let display: ProviderErrorDisplay
@Binding var isExpanded: Bool
let onCopy: () -> Void
var body: some View {
VStack(alignment: .leading, spacing: 6) {
HStack(alignment: .firstTextBaseline, spacing: 8) {
Text(self.title)
.font(.footnote.weight(.semibold))
.foregroundStyle(.secondary)
Spacer()
Button {
self.onCopy()
} label: {
Image(systemName: "doc.on.doc")
}
.buttonStyle(.plain)
.foregroundStyle(.secondary)
.help("Copy error")
}
Text(self.display.preview)
.font(.footnote)
.foregroundStyle(.secondary)
.lineLimit(3)
.fixedSize(horizontal: false, vertical: true)
if self.display.preview != self.display.full {
Button(self.isExpanded ? "Hide details" : "Show details") { self.isExpanded.toggle() }
.buttonStyle(.link)
.font(.footnote)
}
if self.isExpanded {
Text(self.display.full)
.font(.footnote)
.textSelection(.enabled)
.fixedSize(horizontal: false, vertical: true)
}
}
.padding(.leading, 2)
}
}