缺少代码差异信息,无法生成具体的commit message。请提供code differences内容以便分析并生成符合Angular规范的提交信息。
当您提供代码差异后,我将按照以下格式生成: ``` <type>(<scope>): <subject> <body> ``` 其中type会根据更改类型选择(feat、fix、docs、style、refactor等),scope表示影响范围,subject简要描述变更内容,body详细说明修改内容。
This commit is contained in:
@@ -66,7 +66,7 @@ struct CalendarMonthGrid: View {
|
||||
HStack(spacing: 4) {
|
||||
ForEach(weekdayLabels, id: \.self) { w in
|
||||
Text(w)
|
||||
.font(.system(size: 11, weight: .medium))
|
||||
.font(.tjScaled( 11, weight: .medium))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
@@ -123,7 +123,7 @@ private struct DayCellView: View {
|
||||
|
||||
VStack(spacing: 2) {
|
||||
Text("\(dayNumber)")
|
||||
.font(.system(size: 13,
|
||||
.font(.tjScaled( 13,
|
||||
weight: (isToday || isSelected) ? .bold : .regular,
|
||||
design: .default))
|
||||
.foregroundStyle(textColor)
|
||||
@@ -137,7 +137,7 @@ private struct DayCellView: View {
|
||||
}
|
||||
if ranges.count > 2 {
|
||||
Text("+\(ranges.count - 2)")
|
||||
.font(.system(size: 7, design: .monospaced))
|
||||
.font(.tjScaled( 7, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ private struct MiniMonth: View {
|
||||
var body: some View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
Text(monthLabel)
|
||||
.font(.system(size: 12, weight: .semibold))
|
||||
.font(.tjScaled( 12, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
|
||||
LazyVGrid(columns: microColumns, spacing: 2) {
|
||||
|
||||
@@ -104,7 +104,7 @@ struct DayDetailContent: View {
|
||||
HStack(alignment: .firstTextBaseline) {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(dateLine)
|
||||
.font(.system(size: 12, weight: .semibold))
|
||||
.font(.tjScaled( 12, weight: .semibold))
|
||||
.tracking(0.5)
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Text(dayLabel)
|
||||
@@ -114,7 +114,7 @@ struct DayDetailContent: View {
|
||||
Spacer()
|
||||
if totalCount > 0 {
|
||||
Text("\(totalCount) 条")
|
||||
.font(.system(size: 12, design: .monospaced))
|
||||
.font(.tjScaled( 12, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
}
|
||||
@@ -140,11 +140,11 @@ struct DayDetailContent: View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
HStack {
|
||||
Text(title)
|
||||
.font(.system(size: 13, weight: .semibold))
|
||||
.font(.tjScaled( 13, weight: .semibold))
|
||||
.tracking(0.3)
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
Text("\(count)")
|
||||
.font(.system(size: 11, design: .monospaced))
|
||||
.font(.tjScaled( 11, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
}
|
||||
@@ -162,17 +162,17 @@ struct DayDetailContent: View {
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
HStack(spacing: 6) {
|
||||
Text(s.name)
|
||||
.font(.system(size: 15, weight: .semibold))
|
||||
.font(.tjScaled( 15, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
Text(state.badge)
|
||||
.font(.system(size: 10, weight: .semibold))
|
||||
.font(.tjScaled( 10, weight: .semibold))
|
||||
.foregroundStyle(state.badgeFg)
|
||||
.padding(.horizontal, 6)
|
||||
.padding(.vertical, 2)
|
||||
.background(Capsule().fill(state.badgeBg))
|
||||
}
|
||||
Text("\(state.subtitle) · 持续 \(formatDuration(s.duration))")
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
Spacer(minLength: 6)
|
||||
@@ -181,7 +181,7 @@ struct DayDetailContent: View {
|
||||
endingSymptom = s
|
||||
} label: {
|
||||
Text("结束")
|
||||
.font(.system(size: 12, weight: .semibold))
|
||||
.font(.tjScaled( 12, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
.padding(.horizontal, 12)
|
||||
.padding(.vertical, 6)
|
||||
@@ -200,24 +200,24 @@ struct DayDetailContent: View {
|
||||
RoundedRectangle(cornerRadius: 8, style: .continuous)
|
||||
.fill(indicatorAccent(i).opacity(0.12))
|
||||
Image(systemName: "drop.fill")
|
||||
.font(.system(size: 13, weight: .semibold))
|
||||
.font(.tjScaled( 13, weight: .semibold))
|
||||
.foregroundStyle(indicatorAccent(i))
|
||||
}
|
||||
.frame(width: 32, height: 32)
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(i.name)
|
||||
.font(.system(size: 14, weight: .medium))
|
||||
.font(.tjScaled( 14, weight: .medium))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
.lineLimit(1)
|
||||
if !i.range.isEmpty {
|
||||
Text("参考 \(i.range)")
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
}
|
||||
Spacer(minLength: 6)
|
||||
Text("\(i.value) \(i.unit)\(arrow(i))")
|
||||
.font(.system(size: 13, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 13, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(i.status == .normal ? Tj.Palette.text2 : Tj.Palette.brick)
|
||||
.lineLimit(1)
|
||||
.fixedSize()
|
||||
@@ -235,23 +235,23 @@ struct DayDetailContent: View {
|
||||
RoundedRectangle(cornerRadius: 8, style: .continuous)
|
||||
.fill(Tj.Palette.ink2.opacity(0.12))
|
||||
Image(systemName: "doc.fill")
|
||||
.font(.system(size: 13, weight: .semibold))
|
||||
.font(.tjScaled( 13, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.ink2)
|
||||
}
|
||||
.frame(width: 32, height: 32)
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text(r.title)
|
||||
.font(.system(size: 14, weight: .medium))
|
||||
.font(.tjScaled( 14, weight: .medium))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
.lineLimit(1)
|
||||
Text("\(r.type.label) · 共 \(r.pageCount) 页")
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
Spacer(minLength: 6)
|
||||
if let summary {
|
||||
Text(summary)
|
||||
.font(.system(size: 11, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 11, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.brick)
|
||||
}
|
||||
}
|
||||
@@ -263,7 +263,7 @@ struct DayDetailContent: View {
|
||||
VStack(alignment: .leading, spacing: 6) {
|
||||
HStack {
|
||||
Text(d.createdAt.formatted(date: .omitted, time: .shortened))
|
||||
.font(.system(size: 11, design: .monospaced))
|
||||
.font(.tjScaled( 11, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
}
|
||||
@@ -284,7 +284,7 @@ struct DayDetailContent: View {
|
||||
.frame(height: 90)
|
||||
.frame(maxWidth: 240)
|
||||
Text("点底部 + 号可以补一条")
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
.padding(.vertical, 12)
|
||||
|
||||
@@ -66,10 +66,10 @@ struct SeriesChartCard: View {
|
||||
private var header: some View {
|
||||
HStack(alignment: .lastTextBaseline, spacing: 10) {
|
||||
Text(bucket.title)
|
||||
.font(.system(size: 15, weight: .semibold))
|
||||
.font(.tjScaled( 15, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
Text("\(allPoints.count) 条 · 近 \(daysSpanLabel)")
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
latestValueBadge
|
||||
@@ -87,10 +87,10 @@ struct SeriesChartCard: View {
|
||||
}
|
||||
return HStack(spacing: 4) {
|
||||
Text(joined)
|
||||
.font(.system(size: 14, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 14, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(anyAbnormal ? Tj.Palette.brick : Tj.Palette.text)
|
||||
Text(bucket.unit)
|
||||
.font(.system(size: 10, design: .monospaced))
|
||||
.font(.tjScaled( 10, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
}
|
||||
@@ -142,7 +142,7 @@ struct SeriesChartCard: View {
|
||||
AxisGridLine().foregroundStyle(Tj.Palette.lineSoft)
|
||||
AxisValueLabel()
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
.font(.system(size: 10, design: .monospaced))
|
||||
.font(.tjScaled( 10, design: .monospaced))
|
||||
}
|
||||
}
|
||||
.chartYScale(domain: valueDomain ?? 0...1)
|
||||
@@ -156,7 +156,7 @@ struct SeriesChartCard: View {
|
||||
.fill(line.color)
|
||||
.frame(width: 8, height: 8)
|
||||
Text(line.label ?? line.seriesKey)
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ struct TrendDetailView: View {
|
||||
withAnimation(.snappy(duration: 0.2)) { range = r }
|
||||
} label: {
|
||||
Text(r.label)
|
||||
.font(.system(size: 12, weight: range == r ? .semibold : .regular))
|
||||
.font(.tjScaled( 12, weight: range == r ? .semibold : .regular))
|
||||
.foregroundStyle(range == r ? Tj.Palette.paper : Tj.Palette.text)
|
||||
.frame(maxWidth: .infinity)
|
||||
.padding(.vertical, 7)
|
||||
@@ -210,7 +210,7 @@ struct TrendDetailView: View {
|
||||
AxisGridLine().foregroundStyle(Tj.Palette.lineSoft)
|
||||
AxisValueLabel()
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
.font(.system(size: 10, design: .monospaced))
|
||||
.font(.tjScaled( 10, design: .monospaced))
|
||||
}
|
||||
}
|
||||
.chartYScale(domain: valueDomain ?? 0...1)
|
||||
@@ -222,7 +222,7 @@ struct TrendDetailView: View {
|
||||
HStack(spacing: 5) {
|
||||
Circle().fill(line.color).frame(width: 8, height: 8)
|
||||
Text(line.label ?? line.seriesKey)
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
}
|
||||
}
|
||||
@@ -265,20 +265,20 @@ struct TrendDetailView: View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
if filteredLines.count > 1, let label = line.label {
|
||||
Text(label)
|
||||
.font(.system(size: 12, weight: .semibold))
|
||||
.font(.tjScaled( 12, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
}
|
||||
HStack(alignment: .firstTextBaseline, spacing: 6) {
|
||||
Text(latest.map { fmt($0.value) } ?? "—")
|
||||
.font(.system(size: 28, weight: .bold, design: .monospaced))
|
||||
.font(.tjScaled( 28, weight: .bold, design: .monospaced))
|
||||
.foregroundStyle((latest?.status ?? .normal) == .normal ? Tj.Palette.text : Tj.Palette.brick)
|
||||
Text(bucket.unit)
|
||||
.font(.system(size: 12))
|
||||
.font(.tjScaled( 12))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
if let delta = deltaText(latest: latest, prev: prev) {
|
||||
Text(delta.text)
|
||||
.font(.system(size: 13, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 13, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(delta.color)
|
||||
}
|
||||
}
|
||||
@@ -294,10 +294,10 @@ struct TrendDetailView: View {
|
||||
private func statCell(_ label: String, _ value: String) -> some View {
|
||||
VStack(spacing: 3) {
|
||||
Text(value)
|
||||
.font(.system(size: 14, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 14, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
Text(label)
|
||||
.font(.system(size: 10))
|
||||
.font(.tjScaled( 10))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
@@ -323,10 +323,10 @@ struct TrendDetailView: View {
|
||||
private var aiPlaceholder: some View {
|
||||
HStack(spacing: 8) {
|
||||
Image(systemName: "sparkles")
|
||||
.font(.system(size: 12))
|
||||
.font(.tjScaled( 12))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Text("AI 趋势解读即将上线")
|
||||
.font(.system(size: 12))
|
||||
.font(.tjScaled( 12))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
}
|
||||
@@ -364,7 +364,7 @@ struct TrendDetailView: View {
|
||||
private var pointsList: some View {
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
Text("全部记录")
|
||||
.font(.system(size: 13, weight: .semibold))
|
||||
.font(.tjScaled( 13, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
VStack(spacing: 8) {
|
||||
ForEach(pointRows) { row in
|
||||
@@ -382,7 +382,7 @@ struct TrendDetailView: View {
|
||||
private func pointRowView(_ row: PointRow) -> some View {
|
||||
HStack(spacing: 12) {
|
||||
Text(row.day.formatted(.dateTime.year().month(.abbreviated).day()))
|
||||
.font(.system(size: 13))
|
||||
.font(.tjScaled( 13))
|
||||
.foregroundStyle(Tj.Palette.text2)
|
||||
Spacer(minLength: 8)
|
||||
HStack(spacing: 10) {
|
||||
@@ -393,14 +393,14 @@ struct TrendDetailView: View {
|
||||
Circle().fill(line.color).frame(width: 6, height: 6)
|
||||
}
|
||||
Text(fmt(p.value) + arrow(p.status))
|
||||
.font(.system(size: 13, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 13, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(p.status == .normal ? Tj.Palette.text : Tj.Palette.brick)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Image(systemName: "chevron.right")
|
||||
.font(.system(size: 11, weight: .medium))
|
||||
.font(.tjScaled( 11, weight: .medium))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
.padding(12)
|
||||
|
||||
@@ -19,11 +19,11 @@ struct TrendRow: View {
|
||||
HStack(spacing: 12) {
|
||||
VStack(alignment: .leading, spacing: 3) {
|
||||
Text(bucket.title)
|
||||
.font(.system(size: 15, weight: .semibold))
|
||||
.font(.tjScaled( 15, weight: .semibold))
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
.lineLimit(1)
|
||||
Text(subtitle)
|
||||
.font(.system(size: 11))
|
||||
.font(.tjScaled( 11))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
|
||||
@@ -34,17 +34,17 @@ struct TrendRow: View {
|
||||
|
||||
VStack(alignment: .trailing, spacing: 2) {
|
||||
Text(latestValue)
|
||||
.font(.system(size: 14, weight: .semibold, design: .monospaced))
|
||||
.font(.tjScaled( 14, weight: .semibold, design: .monospaced))
|
||||
.foregroundStyle(anyLatestAbnormal ? Tj.Palette.brick : Tj.Palette.text)
|
||||
.lineLimit(1)
|
||||
Text(bucket.unit)
|
||||
.font(.system(size: 9, design: .monospaced))
|
||||
.font(.tjScaled( 9, design: .monospaced))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
.fixedSize()
|
||||
|
||||
Image(systemName: "chevron.right")
|
||||
.font(.system(size: 12, weight: .medium))
|
||||
.font(.tjScaled( 12, weight: .medium))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
}
|
||||
.padding(14)
|
||||
|
||||
@@ -63,7 +63,7 @@ struct TrendsView: View {
|
||||
.font(.tjH2())
|
||||
.foregroundStyle(Tj.Palette.text)
|
||||
Text("\(buckets.count) 项")
|
||||
.font(.system(size: 12))
|
||||
.font(.tjScaled( 12))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
Spacer()
|
||||
}
|
||||
@@ -87,7 +87,7 @@ struct TrendsView: View {
|
||||
.frame(height: 120)
|
||||
.frame(maxWidth: 260)
|
||||
Text("同一指标记录满 2 次后,会在这里出现时间序列")
|
||||
.font(.system(size: 12))
|
||||
.font(.tjScaled( 12))
|
||||
.foregroundStyle(Tj.Palette.text3)
|
||||
.multilineTextAlignment(.center)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user