Verein-Doktrin (THEMING.md 2026-05-31): jede App unterstützt alle Variants + Light/Dark/System. Visuelle Galerie aus Live-Vorschau-Karten (LazyVGrid) je Variant + segmentierter Appearance-Picker, im iOS-Konto-Tab und in den macOS-Settings. - PagetaTheme löst gegen ManaTheme.current (@AppStorage, Default paper) statt hartkodiert; alle ~40 Call-Sites unverändert. - PagetaBrand.config(for:) macht auch die Auth-Reise variant-bewusst. - Variant × Light/Dark orthogonal (Variant-Farben sind schon adaptiv, .preferredColorScheme steuert weiter Hell/Dunkel). - CLAUDE.md Invariante 6 von "fixe paper-Brand" auf "paper als Default, alle Themes wählbar" korrigiert. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
52 lines
1.7 KiB
Swift
52 lines
1.7 KiB
Swift
import ManaTokens
|
|
import SwiftUI
|
|
|
|
/// Setzt den `background`-Token der **aktiven Theme-Variant** als
|
|
/// durchgehende Surface — light/dark-adaptiv — und versteckt den
|
|
/// Default-System-Background von List/Form, damit die Theme-Surface
|
|
/// durchscheint.
|
|
///
|
|
/// Der `@AppStorage`-Bezug auf die Variant macht den Hintergrund
|
|
/// reaktiv: wechselt der User das Theme im Konto-Tab, re-rendert jeder
|
|
/// Tab-Root sofort mit der neuen Background-Farbe.
|
|
///
|
|
/// Anwenden auf jeden Tab-Root, dann fühlt sich die App vom Detail-
|
|
/// View bis zur Lese-Liste konsistent an, statt zwischen System-
|
|
/// Hintergrund und Theme-Surface hin- und herzuspringen.
|
|
struct PaperBackgroundModifier: ViewModifier {
|
|
@AppStorage(ManaTheme.storageKey) private var variantRaw = ManaTheme.pagetaDefault.rawValue
|
|
|
|
private var theme: ManaTheme {
|
|
ManaTheme(rawValue: variantRaw) ?? .paper
|
|
}
|
|
|
|
func body(content: Content) -> some View {
|
|
content
|
|
.scrollContentBackground(.hidden)
|
|
.background(theme.background.ignoresSafeArea())
|
|
}
|
|
}
|
|
|
|
extension View {
|
|
/// `.paperBackground()` macht jede Surface zu einer Paper-Surface
|
|
/// mit dem aktuellen Theme-Background. Siehe `PaperBackgroundModifier`.
|
|
func paperBackground() -> some View {
|
|
modifier(PaperBackgroundModifier())
|
|
}
|
|
|
|
/// Beschränkt Content auf Reading-Width (~720pt) **nur auf macOS**.
|
|
/// Auf iOS no-op — Phone-Bildschirme sind sowieso schmaler. Auf
|
|
/// iPad könnte man's später aktivieren, Default bleibt vorerst aus.
|
|
///
|
|
/// Anwenden auf Listen/Cards in den drei Tab-Surfaces, damit das
|
|
/// Layout auf breiten Mac-Fenstern nicht edge-to-edge stretcht.
|
|
@ViewBuilder
|
|
func macReadingWidth() -> some View {
|
|
#if os(macOS)
|
|
frame(maxWidth: 760, alignment: .center)
|
|
.frame(maxWidth: .infinity)
|
|
#else
|
|
self
|
|
#endif
|
|
}
|
|
}
|