Pageta konsumiert jetzt ManaAppearancePicker + ManaThemeGallery aus mana-swift-ui statt eigener Kopien. Dünne Pageta-Wrapper halten die @AppStorage-Keys (pageta.theme.variant / pageta.appearance) und reichen Bindings durch. AppearanceMode → ManaAppearanceMode. Eigene ThemeGalleryView.swift + AppearanceMode.swift entfernt (jetzt geteilt). Verhalten unverändert, Build grün. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
34 lines
1.2 KiB
Swift
34 lines
1.2 KiB
Swift
import ManaThemeUI
|
|
import ManaTokens
|
|
import SwiftUI
|
|
|
|
/// Persistenz + Default für die vom User gewählte Theme-Variant.
|
|
///
|
|
/// Verein-Doktrin (`mana/docs/THEMING.md`, 2026-05-31): jede App
|
|
/// unterstützt **alle** `ManaTheme`-Variants. Pageta startet auf
|
|
/// `.paper` (Reader-Identität), lässt den User aber frei wählen.
|
|
/// Orthogonal dazu steuert ``ManaAppearanceMode`` Light/Dark/System — die
|
|
/// Variant-Farben sind selbst schon light/dark-adaptiv.
|
|
extension ManaAppearanceMode {
|
|
/// `@AppStorage`-Key für die App-Appearance (Hell/Dunkel/System).
|
|
static let storageKey = "pageta.appearance"
|
|
}
|
|
|
|
extension ManaTheme {
|
|
/// `@AppStorage`-Key für die gewählte Variant.
|
|
static let storageKey = "pageta.theme.variant"
|
|
|
|
/// Start-Variant für anonyme/neue Installationen.
|
|
static let pagetaDefault: ManaTheme = .paper
|
|
|
|
/// Aktuell gewählte Variant aus den UserDefaults (Default `.paper`).
|
|
///
|
|
/// Für **imperative** Consumer gedacht (z.B. der Reader, der
|
|
/// NSAttributedString-Farben außerhalb des SwiftUI-Environments
|
|
/// baut). SwiftUI-Views lesen besser reaktiv via
|
|
/// `@AppStorage(ManaTheme.storageKey)`.
|
|
static var current: ManaTheme {
|
|
UserDefaults.standard.string(forKey: storageKey)
|
|
.flatMap(ManaTheme.init(rawValue:)) ?? pagetaDefault
|
|
}
|
|
}
|