feat: update Sparkline and Widget components for improved layout and visuals
This commit is contained in:
+22
-6
@@ -46,6 +46,9 @@ struct Sparkline: View {
|
||||
var areaOpacity: Double = 0.25
|
||||
/// Отступ справа в диаметрах точки: линия обрывается, не доходя до края.
|
||||
var trailingRoom: CGFloat = 1.4
|
||||
/// В карточке-герое график уходит под края виджета и левая кромка заливки
|
||||
/// не видна. Отдельно стоящий график гасит её, иначе получается срез.
|
||||
var isFullBleed: Bool = true
|
||||
|
||||
/// Больше точек глазом уже не различить, а форма тяжелеет.
|
||||
private static let maxPoints = 96
|
||||
@@ -66,12 +69,7 @@ struct Sparkline: View {
|
||||
startPoint: .top, endPoint: .bottom
|
||||
)
|
||||
)
|
||||
.mask(
|
||||
LinearGradient(
|
||||
colors: [.white, .white.opacity(0.25)],
|
||||
startPoint: .leading, endPoint: .trailing
|
||||
)
|
||||
)
|
||||
.mask(areaMask)
|
||||
|
||||
// Гало точки лежит под линией, ядро — над ней.
|
||||
if showPulse, let last = points.last {
|
||||
@@ -104,6 +102,24 @@ struct Sparkline: View {
|
||||
}
|
||||
}
|
||||
|
||||
/// Горизонтальная маска заливки: свечение сосредоточено слева, как в макете.
|
||||
private var areaMask: LinearGradient {
|
||||
LinearGradient(
|
||||
gradient: Gradient(stops: isFullBleed
|
||||
? [
|
||||
.init(color: .white, location: 0),
|
||||
.init(color: .white.opacity(0.25), location: 1),
|
||||
]
|
||||
: [
|
||||
.init(color: .white.opacity(0), location: 0),
|
||||
.init(color: .white, location: 0.3),
|
||||
.init(color: .white.opacity(0.3), location: 1),
|
||||
]),
|
||||
startPoint: .leading,
|
||||
endPoint: .trailing
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Геометрия
|
||||
|
||||
private func points(in size: CGSize) -> [CGPoint] {
|
||||
|
||||
Reference in New Issue
Block a user