Andromida/Andromida/App/Views/Today/Components/RitualFocusCardView.swift

67 lines
2.4 KiB
Swift

import SwiftUI
import Bedrock
struct RitualFocusCardView: View {
private let title: String
private let theme: String
private let dayLabel: String
private let completionSummary: String
private let progress: Double
private let iconName: String
init(
title: String,
theme: String,
dayLabel: String,
completionSummary: String,
progress: Double,
iconName: String = "sparkles"
) {
self.title = title
self.theme = theme
self.dayLabel = dayLabel
self.completionSummary = completionSummary
self.progress = progress
self.iconName = iconName
}
var body: some View {
VStack(alignment: .leading, spacing: Design.Spacing.medium) {
HStack(spacing: Design.Spacing.small) {
// Icon
SymbolIcon(iconName, size: .row, color: AppAccent.primary)
.accessibilityHidden(true)
// Title
StyledLabel(title, .heading, emphasis: .primary)
Spacer(minLength: Design.Spacing.medium)
// Day label - needs additional modifiers (padding, background)
Text(dayLabel)
.typography(.caption)
.foregroundStyle(AppTextColors.secondary)
.padding(.horizontal, Design.Spacing.small)
.padding(.vertical, Design.Spacing.xxxSmall)
.background(AppAccent.light.opacity(Design.Opacity.light))
.clipShape(.rect(cornerRadius: Design.CornerRadius.medium))
.accessibilityLabel(Text(dayLabel))
}
StyledLabel(theme, .subheading, emphasis: .secondary)
VStack(alignment: .leading, spacing: Design.Spacing.xSmall) {
ProgressView(value: progress)
.tint(AppAccent.primary)
StyledLabel(completionSummary, .caption, emphasis: .secondary)
}
}
.padding(Design.Spacing.large)
.background(AppSurface.card)
.clipShape(.rect(cornerRadius: Design.CornerRadius.large))
.shadow(color: AppBorder.subtle.opacity(Design.Opacity.medium), radius: AppMetrics.Shadow.radiusSmall, x: AppMetrics.Shadow.xOffsetNone, y: AppMetrics.Shadow.yOffsetSmall)
.accessibilityElement(children: .combine)
.accessibilityLabel(Text(title))
}
}