CHResume/ResumeBuilder/CV.swift
2023-09-19 14:50:20 +02:00

80 lines
3.0 KiB
Swift

import SwiftUI
struct CV: View {
@Environment(\.colorScheme)
var colorScheme: ColorScheme
let info: CVInfo
let style: CVStyle
private var twoColumnSpacing: CGFloat {
style.columnSpacing
}
var body: some View {
VStack {
TopView(
info: info.top,
style: style.header,
accent: style.accentColor)
.frame(height: style.header.height)
Rectangle()
.fill(style.accentColor)
.frame(height: style.header.lineWidth)
GeometryReader { geo in
let columnWidth = max(0, (geo.size.width - twoColumnSpacing)) / 2
HStack(alignment: .top, spacing: twoColumnSpacing) {
VStack(alignment: .leading) {
TitledCareerSection(
style: style.section,
accent: style.accentColor,
content: info.work)
TitledCareerSection(
style: style.section,
accent: style.accentColor,
content: info.education)
}.frame(width: columnWidth)
VStack(alignment: .leading) {
TitledSection(
title: info.publications.title,
spacing: style.section.titleSpacing) {
ForEach(info.publications.items) { item in
PublicationView(
info: item,
borderSpacing: style.section.borderSpacing,
borderWidth: style.section.borderWidth,
accent: style.accentColor)
.padding(.bottom, style.section.bottomSpacing)
}
}
TitledIconSection(
content: info.skills,
titleSpacing: style.section.titleSpacing,
width: columnWidth,
style: style.skillStyle)
TitledTextSection(
content: info.about,
titleSpacing: style.section.titleSpacing,
paragraphSpacing: style.section.paragraphSpacing)
}.frame(width: columnWidth)
}
}
Spacer(minLength: 0)
Text(info.footer)
.font(.footnote)
.foregroundColor(colorScheme.secondaryColor)
}
.padding()
.aspectRatio(1 / sqrt(2), contentMode: .fit)
}
}
struct CV_Previews: PreviewProvider {
static var previews: some View {
CV(info: cvInfoEnglish, style: cvStyle)
.previewLayout(.fixed(width: 600, height: 600 * sqrt(2)))
}
}