From 1354f2464180ece6d13296a543a964ddf6d2d393 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 12 Apr 2026 19:47:57 -0500 Subject: feat: add theme and high-density display modes Refs: https://todo.sr.ht/~ccleberg/hutch/24 Implements: https://todo.sr.ht/~ccleberg/hutch/25 --- Hutch/Views/Settings/SettingsView.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'Hutch/Views/Settings/SettingsView.swift') diff --git a/Hutch/Views/Settings/SettingsView.swift b/Hutch/Views/Settings/SettingsView.swift index 4fb3f9c..5abac90 100644 --- a/Hutch/Views/Settings/SettingsView.swift +++ b/Hutch/Views/Settings/SettingsView.swift @@ -2,16 +2,20 @@ import SwiftUI struct SettingsView: View { @Environment(AppState.self) private var appState + @AppStorage(AppStorageKeys.appTheme) private var appTheme: AppTheme = .system + @AppStorage(AppStorageKeys.displayDensity) private var displayDensity: DisplayDensity = .standard @AppStorage(AppStorageKeys.swipeActionsEnabled) private var swipeActionsEnabled = true @AppStorage(AppStorageKeys.contributionGraphsEnabled) private var contributionGraphsEnabled = true @State private var pendingDestructiveAction: SettingsDestructiveAction? var body: some View { Form { + appearanceSection() behaviorSection() authenticationSection() aboutSection() } + .themedList() .navigationTitle("Settings") .alert( pendingDestructiveAction?.title ?? "", @@ -44,6 +48,26 @@ struct SettingsView: View { } } + @ViewBuilder + private func appearanceSection() -> some View { + Section { + Picker("Theme", selection: $appTheme) { + ForEach(AppTheme.allCases) { theme in + Text(theme.label).tag(theme) + } + } + Picker("Density", selection: $displayDensity) { + ForEach(DisplayDensity.allCases) { density in + Text(density.label).tag(density) + } + } + } header: { + Text("Appearance") + } footer: { + Text("Compact density reduces spacing throughout the app.") + } + } + @ViewBuilder private func behaviorSection() -> some View { Section { @@ -192,6 +216,7 @@ private struct AboutView: View { .foregroundStyle(.secondary) } } + .themedList() .navigationTitle("About") .navigationBarTitleDisplayMode(.inline) } -- cgit v1.2.3