pageta-native/Sources/Core/Theme/ThemeVariant.swift
Till JS dde1b491c0 Theme-Galerie auf geteiltes ManaThemeUI umgestellt
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>
2026-05-31 23:43:26 +02:00

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
}
}