95 lines
3.4 KiB
Swift
95 lines
3.4 KiB
Swift
import SwiftUI
|
|
|
|
struct AnnouncementView: View {
|
|
let title: String
|
|
let description: String
|
|
let onClose: () -> Void
|
|
let onLearnMore: () -> Void
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading, spacing: 12) {
|
|
HStack(alignment: .top) {
|
|
Text(title)
|
|
.font(.system(size: 14, weight: .semibold))
|
|
.foregroundColor(.white)
|
|
.lineLimit(2)
|
|
.multilineTextAlignment(.leading)
|
|
|
|
Spacer()
|
|
|
|
Button(action: onClose) {
|
|
Image(systemName: "xmark")
|
|
.font(.system(size: 11, weight: .medium))
|
|
.foregroundColor(.white.opacity(0.7))
|
|
}
|
|
.buttonStyle(PlainButtonStyle())
|
|
}
|
|
|
|
if !description.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
|
|
ScrollView {
|
|
Text(description)
|
|
.font(.system(size: 12))
|
|
.foregroundColor(.white.opacity(0.9))
|
|
.multilineTextAlignment(.leading)
|
|
.frame(maxWidth: .infinity, alignment: .leading)
|
|
}
|
|
.frame(maxHeight: 120)
|
|
}
|
|
|
|
HStack(spacing: 8) {
|
|
Button(action: onLearnMore) {
|
|
Text("Learn more")
|
|
.font(.system(size: 12, weight: .medium))
|
|
.foregroundColor(.black)
|
|
.padding(.horizontal, 10)
|
|
.padding(.vertical, 6)
|
|
.background(Color.white)
|
|
.clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
|
|
}
|
|
.buttonStyle(PlainButtonStyle())
|
|
|
|
Button(action: onClose) {
|
|
Text("Dismiss")
|
|
.font(.system(size: 12, weight: .medium))
|
|
.foregroundColor(.white.opacity(0.9))
|
|
.padding(.horizontal, 8)
|
|
.padding(.vertical, 6)
|
|
}
|
|
.buttonStyle(PlainButtonStyle())
|
|
}
|
|
}
|
|
.padding(.horizontal, 16)
|
|
.padding(.vertical, 14)
|
|
.frame(minWidth: 360, idealWidth: 420)
|
|
.background(
|
|
RoundedRectangle(cornerRadius: 12, style: .continuous)
|
|
.fill(.clear)
|
|
.background(
|
|
ZStack {
|
|
// Match Mini Recorder background layers
|
|
Color.black.opacity(0.9)
|
|
LinearGradient(
|
|
colors: [
|
|
Color.black.opacity(0.95),
|
|
Color(red: 0.15, green: 0.15, blue: 0.15).opacity(0.9)
|
|
],
|
|
startPoint: .top,
|
|
endPoint: .bottom
|
|
)
|
|
VisualEffectView(material: .hudWindow, blendingMode: .withinWindow)
|
|
.opacity(0.05)
|
|
}
|
|
.clipShape(RoundedRectangle(cornerRadius: 12, style: .continuous))
|
|
)
|
|
)
|
|
.overlay(
|
|
RoundedRectangle(cornerRadius: 12, style: .continuous)
|
|
.strokeBorder(Color.white.opacity(0.3), lineWidth: 0.5)
|
|
)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|