Files
ghostty/macos/Sources/Ghostty/Surface View/ChildExitedMessageBar.swift

50 lines
1.3 KiB
Swift

import SwiftUI
struct ChildExitedMessageBar: View {
let msg: Ghostty.ChildExitedMessage
@State private var isHovered: Bool = false
var body: some View {
HStack(spacing: 6) {
Text(message)
.lineLimit(1)
.truncationMode(.tail)
}
.padding(.horizontal, 8)
.padding(.vertical, 4)
.frame(maxWidth: .infinity, alignment: .center)
.background(msg.level.backgroundStyle)
.foregroundColor(msg.level.foregroundColor)
.contentShape(.rect)
.accessibilityLabel(msg.text)
.transition(.move(edge: .bottom))
.opacity(isHovered ? 0 : 1)
.allowsHitTesting(false)
.overlay {
Color.clear
.onHover {
isHovered = $0
}
}
}
private var message: AttributedString {
(try? AttributedString(markdown: msg.text)) ?? AttributedString(msg.text)
}
}
private extension Ghostty.ChildExitedMessage.Level {
var foregroundColor: Color {
.primary
}
var backgroundStyle: AnyShapeStyle {
switch self {
case .success:
AnyShapeStyle(.background)
case .error:
AnyShapeStyle(.red.opacity(0.5))
}
}
}