|
|
@@ -6,23 +6,23 @@ struct EmailWriterView: View {
|
|
|
var body: some View {
|
|
|
GeometryReader { proxy in
|
|
|
let dynamicHorizontalPadding = min(max(proxy.size.width * 0.045, AppTheme.contentPadding), 52)
|
|
|
- let dynamicTopPadding = min(max(proxy.size.height * 0.05, 24), 44)
|
|
|
- let dynamicBottomPadding = min(max(proxy.size.height * 0.06, 28), 56)
|
|
|
+ let dynamicTopPadding = min(max(proxy.size.height * 0.03, 16), 28)
|
|
|
+ let dynamicBottomPadding = min(max(proxy.size.height * 0.04, 20), 40)
|
|
|
|
|
|
VStack(alignment: .leading, spacing: 0) {
|
|
|
header
|
|
|
- .padding(.bottom, 28)
|
|
|
+ .padding(.bottom, 16)
|
|
|
|
|
|
contentCard
|
|
|
.frame(maxWidth: 1200, maxHeight: .infinity, alignment: .topLeading)
|
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
|
|
|
|
|
- GradientButton(title: "Generate Email") {
|
|
|
+ GradientButton(title: "Generate Email", size: .large) {
|
|
|
viewModel.generateEmail()
|
|
|
}
|
|
|
.disabled(!viewModel.canGenerate)
|
|
|
.opacity(viewModel.canGenerate ? 1 : 0.55)
|
|
|
- .padding(.top, 24)
|
|
|
+ .padding(.top, 16)
|
|
|
}
|
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
|
|
.padding(.horizontal, dynamicHorizontalPadding)
|
|
|
@@ -38,9 +38,9 @@ struct EmailWriterView: View {
|
|
|
|
|
|
private var header: some View {
|
|
|
HStack(alignment: .top) {
|
|
|
- VStack(alignment: .leading, spacing: 8) {
|
|
|
+ VStack(alignment: .leading, spacing: 6) {
|
|
|
Text("AI Email Writer")
|
|
|
- .font(.system(size: 30, weight: .bold))
|
|
|
+ .font(.system(size: 26, weight: .bold))
|
|
|
.foregroundStyle(AppTheme.textPrimary)
|
|
|
|
|
|
HStack(spacing: 0) {
|
|
|
@@ -57,7 +57,7 @@ struct EmailWriterView: View {
|
|
|
Text(".")
|
|
|
.foregroundStyle(AppTheme.textSecondary)
|
|
|
}
|
|
|
- .font(.system(size: 15))
|
|
|
+ .font(.system(size: 14))
|
|
|
}
|
|
|
|
|
|
Spacer()
|
|
|
@@ -70,7 +70,7 @@ struct EmailWriterView: View {
|
|
|
}
|
|
|
|
|
|
private var contentCard: some View {
|
|
|
- VStack(alignment: .leading, spacing: 16) {
|
|
|
+ VStack(alignment: .leading, spacing: 12) {
|
|
|
optionsRow
|
|
|
|
|
|
subjectField
|
|
|
@@ -82,7 +82,7 @@ struct EmailWriterView: View {
|
|
|
.frame(maxHeight: .infinity)
|
|
|
}
|
|
|
.frame(maxHeight: .infinity, alignment: .top)
|
|
|
- .padding(22)
|
|
|
+ .padding(18)
|
|
|
.background(AppTheme.cardBackground)
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.cardCornerRadius))
|
|
|
.overlay(
|
|
|
@@ -113,7 +113,7 @@ struct EmailWriterView: View {
|
|
|
}
|
|
|
|
|
|
private var subjectField: some View {
|
|
|
- VStack(alignment: .leading, spacing: 8) {
|
|
|
+ VStack(alignment: .leading, spacing: 6) {
|
|
|
Text("Subject (optional)")
|
|
|
.font(.system(size: 12, weight: .medium))
|
|
|
.foregroundStyle(AppTheme.textMuted)
|
|
|
@@ -123,7 +123,7 @@ struct EmailWriterView: View {
|
|
|
.font(.system(size: 14))
|
|
|
.foregroundStyle(AppTheme.textPrimary)
|
|
|
.padding(.horizontal, 14)
|
|
|
- .padding(.vertical, 10)
|
|
|
+ .padding(.vertical, 8)
|
|
|
.background(Color.white)
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
|
|
|
.overlay(
|
|
|
@@ -134,7 +134,7 @@ struct EmailWriterView: View {
|
|
|
}
|
|
|
|
|
|
private var inputPanel: some View {
|
|
|
- VStack(alignment: .leading, spacing: 12) {
|
|
|
+ VStack(alignment: .leading, spacing: 10) {
|
|
|
HStack(spacing: 8) {
|
|
|
Text("What should the email say?")
|
|
|
.font(.system(size: 13, weight: .semibold))
|
|
|
@@ -156,7 +156,7 @@ struct EmailWriterView: View {
|
|
|
.font(.system(size: 14))
|
|
|
.foregroundStyle(AppTheme.textPrimary)
|
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
|
- .frame(minHeight: 96)
|
|
|
+ .frame(minHeight: 72)
|
|
|
.background(Color.white)
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
|
|
|
.overlay(
|
|
|
@@ -183,7 +183,7 @@ struct EmailWriterView: View {
|
|
|
.frame(maxHeight: .infinity)
|
|
|
}
|
|
|
.frame(maxHeight: .infinity)
|
|
|
- .padding(16)
|
|
|
+ .padding(12)
|
|
|
.background(AppTheme.background)
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
|
|
|
.overlay(
|
|
|
@@ -193,7 +193,7 @@ struct EmailWriterView: View {
|
|
|
}
|
|
|
|
|
|
private var outputPanel: some View {
|
|
|
- VStack(alignment: .leading, spacing: 12) {
|
|
|
+ VStack(alignment: .leading, spacing: 10) {
|
|
|
HStack(spacing: 8) {
|
|
|
Text("Generated Email")
|
|
|
.font(.system(size: 13, weight: .semibold))
|
|
|
@@ -216,7 +216,7 @@ struct EmailWriterView: View {
|
|
|
.font(.system(size: 14))
|
|
|
.foregroundStyle(AppTheme.textPrimary)
|
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
|
- .frame(minHeight: 96)
|
|
|
+ .frame(minHeight: 72)
|
|
|
.background(Color.white)
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
|
|
|
.overlay(
|
|
|
@@ -236,7 +236,7 @@ struct EmailWriterView: View {
|
|
|
.frame(maxHeight: .infinity)
|
|
|
}
|
|
|
.frame(maxHeight: .infinity)
|
|
|
- .padding(16)
|
|
|
+ .padding(12)
|
|
|
.background(AppTheme.tealLight.opacity(0.35))
|
|
|
.clipShape(RoundedRectangle(cornerRadius: AppTheme.inputCornerRadius))
|
|
|
.overlay(
|