39 lines
1.1 KiB
Swift
39 lines
1.1 KiB
Swift
import SwiftUI
|
|
import TermindDomain
|
|
|
|
extension CommandRisk {
|
|
var tint: Color {
|
|
switch self {
|
|
case .safe: TermindColor.success
|
|
case .caution: TermindColor.warning
|
|
case .destructive: TermindColor.danger
|
|
}
|
|
}
|
|
}
|
|
/// The risk label shown on every proposed command.
|
|
///
|
|
/// The rating comes from `CommandRiskClassifier` running locally, never from the
|
|
/// model's own description of what it suggested.
|
|
struct RiskBadge: View {
|
|
let assessment: RiskAssessment
|
|
var compact = false
|
|
|
|
var body: some View {
|
|
Label {
|
|
if !compact { Text(assessment.risk.label) }
|
|
} icon: {
|
|
Image(systemName: assessment.risk.symbol)
|
|
}
|
|
.font(.caption2.weight(.medium))
|
|
.foregroundStyle(assessment.risk.tint)
|
|
.padding(.horizontal, compact ? 0 : Metrics.Space.s)
|
|
.padding(.vertical, 2)
|
|
.background {
|
|
if !compact {
|
|
Capsule().fill(assessment.risk.tint.opacity(0.12))
|
|
}
|
|
}
|
|
.help(Text(assessment.reasons.first ?? assessment.risk.label))
|
|
}
|
|
}
|