mirror of
https://github.com/yattee/yattee.git
synced 2024-11-10 08:18:19 +00:00
97 lines
2.6 KiB
Swift
97 lines
2.6 KiB
Swift
|
import SwiftUI
|
||
|
|
||
|
struct DetailBadge: View {
|
||
|
enum Style {
|
||
|
case `default`, prominent, outstanding, informational
|
||
|
}
|
||
|
|
||
|
struct StyleModifier: ViewModifier {
|
||
|
let style: Style
|
||
|
|
||
|
func body(content: Content) -> some View {
|
||
|
Group {
|
||
|
switch style {
|
||
|
case .prominent:
|
||
|
content.modifier(ProminentStyleModifier())
|
||
|
case .outstanding:
|
||
|
content.modifier(OutstandingStyleModifier())
|
||
|
case .informational:
|
||
|
content.modifier(InformationalStyleModifier())
|
||
|
default:
|
||
|
content.modifier(DefaultStyleModifier())
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct DefaultStyleModifier: ViewModifier {
|
||
|
func body(content: Content) -> some View {
|
||
|
content
|
||
|
.background(.thinMaterial)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct ProminentStyleModifier: ViewModifier {
|
||
|
var font: Font {
|
||
|
Font.system(.body).weight(.semibold)
|
||
|
}
|
||
|
|
||
|
func body(content: Content) -> some View {
|
||
|
content
|
||
|
.font(font)
|
||
|
.modifier(DefaultStyleModifier())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct OutstandingStyleModifier: ViewModifier {
|
||
|
var backgroundColor: Color {
|
||
|
Color("DetailBadgeOutstandingStyleBackgroundColor")
|
||
|
}
|
||
|
|
||
|
func body(content: Content) -> some View {
|
||
|
content
|
||
|
.textCase(.uppercase)
|
||
|
.background(backgroundColor)
|
||
|
.foregroundColor(.white)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct InformationalStyleModifier: ViewModifier {
|
||
|
var backgroundColor: Color {
|
||
|
Color("DetailBadgeInformationalStyleBackgroundColor")
|
||
|
}
|
||
|
|
||
|
func body(content: Content) -> some View {
|
||
|
content
|
||
|
.background(backgroundColor)
|
||
|
.foregroundColor(.white)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var text: String
|
||
|
var style: Style = .default
|
||
|
|
||
|
var body: some View {
|
||
|
Text(text)
|
||
|
.lineLimit(1)
|
||
|
.truncationMode(.middle)
|
||
|
.padding(10)
|
||
|
.modifier(StyleModifier(style: style))
|
||
|
.mask(RoundedRectangle(cornerRadius: 12))
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct DetailBadge_Previews: PreviewProvider {
|
||
|
static var previews: some View {
|
||
|
VStack {
|
||
|
DetailBadge(text: "Live", style: .outstanding)
|
||
|
DetailBadge(text: "Premieres", style: .informational)
|
||
|
DetailBadge(text: "Booyah", style: .prominent)
|
||
|
DetailBadge(
|
||
|
text: "Donec in neque mi. Phasellus quis sapien metus. Ut felis ante, posuere."
|
||
|
)
|
||
|
}
|
||
|
.frame(maxWidth: 500)
|
||
|
}
|
||
|
}
|