105 lines
3.6 KiB
Swift
105 lines
3.6 KiB
Swift
//
|
|
// FontSettingsView.swift
|
|
// readeck
|
|
//
|
|
// Created by Ilyas Hallak on 29.06.25.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct FontSettingsView: View {
|
|
@State private var viewModel = FontSettingsViewModel()
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading, spacing: 0) {
|
|
// Header
|
|
HStack(spacing: 8) {
|
|
Image(systemName: "textformat")
|
|
.font(.title2)
|
|
.foregroundColor(.accentColor)
|
|
|
|
Text("Schrift")
|
|
.font(.title2)
|
|
.fontWeight(.bold)
|
|
}
|
|
|
|
Spacer()
|
|
|
|
// Font Family Picker
|
|
HStack(alignment: .firstTextBaseline, spacing: 16) {
|
|
Text("Schriftart")
|
|
.font(.headline)
|
|
Picker("Schriftart", selection: $viewModel.selectedFontFamily) {
|
|
ForEach(FontFamily.allCases, id: \.self) { family in
|
|
Text(family.displayName).tag(family)
|
|
}
|
|
}
|
|
.pickerStyle(MenuPickerStyle())
|
|
.onChange(of: viewModel.selectedFontFamily) {
|
|
Task {
|
|
await viewModel.saveFontSettings()
|
|
}
|
|
}
|
|
}
|
|
|
|
Spacer()
|
|
|
|
VStack(spacing: 16) {
|
|
|
|
// Font Size Picker
|
|
VStack(alignment: .leading, spacing: 8) {
|
|
Text("Schriftgröße")
|
|
.font(.headline)
|
|
Picker("Schriftgröße", selection: $viewModel.selectedFontSize) {
|
|
ForEach(FontSize.allCases, id: \.self) { size in
|
|
Text(size.displayName).tag(size)
|
|
}
|
|
}
|
|
.pickerStyle(SegmentedPickerStyle())
|
|
.onChange(of: viewModel.selectedFontSize) {
|
|
Task {
|
|
await viewModel.saveFontSettings()
|
|
}
|
|
}
|
|
}
|
|
|
|
// Font Preview
|
|
VStack(alignment: .leading, spacing: 8) {
|
|
Text("Vorschau")
|
|
.font(.caption)
|
|
.foregroundColor(.secondary)
|
|
|
|
VStack(alignment: .leading, spacing: 6) {
|
|
Text("readeck Bookmark Title")
|
|
.font(viewModel.previewTitleFont)
|
|
.fontWeight(.semibold)
|
|
.lineLimit(1)
|
|
|
|
Text("This is how your bookmark descriptions and article text will appear in the app. The quick brown fox jumps over the lazy dog.")
|
|
.font(viewModel.previewBodyFont)
|
|
.lineLimit(3)
|
|
|
|
Text("12 min • Today • example.com")
|
|
.font(viewModel.previewCaptionFont)
|
|
.foregroundColor(.secondary)
|
|
}
|
|
.padding(4)
|
|
.background(Color(.systemGray6))
|
|
.clipShape(RoundedRectangle(cornerRadius: 8))
|
|
}
|
|
}
|
|
}
|
|
.padding()
|
|
.background(Color(.systemBackground))
|
|
.clipShape(RoundedRectangle(cornerRadius: 12))
|
|
.shadow(color: .black.opacity(0.05), radius: 2, x: 0, y: 1)
|
|
.task {
|
|
await viewModel.loadFontSettings()
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
FontSettingsView()
|
|
}
|