mana-swift-ui/Sources/ManaThemeUI/ManaAppearanceMode.swift
Till JS 30e9b30d42 ManaThemeUI: geteilte Theme-Galerie + Appearance-Picker
Neues Library-Product ManaThemeUI (hängt nur an ManaTokens):
- ManaAppearanceMode (system/light/dark, colorScheme/label/icon)
- ManaAppearancePicker (segmentiert, Binding-basiert)
- ManaThemeGallery (LazyVGrid aus Live-Vorschau-Karten je ManaTheme-Variant,
  Binding-basiert, Reduce-Motion + Haptik)

Pure Views über Binding — die App behält Storage-Key + Farb-Resolution,
die UI lebt einmal hier statt pro App kopiert. Erstextraktion aus der
pageta-Galerie; Verein-Doktrin THEMING.md (jede App bietet alle Variants).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-31 23:43:17 +02:00

44 lines
1.1 KiB
Swift

import SwiftUI
/// Hell/Dunkel/System-Wahl für die App-Appearance — orthogonal zur
/// Theme-Variant (``ManaTokens/ManaTheme``). `.system` überlässt die
/// Entscheidung dem OS; sonst forciert die App via
/// `.preferredColorScheme(_:)`.
///
/// Die App persistiert den `rawValue` selbst (typisch `@AppStorage`
/// unter einem app-eigenen Key) und reicht eine `Binding` an
/// ``ManaAppearancePicker`` — das Paket schreibt keine UserDefaults.
public enum ManaAppearanceMode: String, CaseIterable, Identifiable, Sendable {
case system
case light
case dark
public var id: String { rawValue }
/// SwiftUI-Mapping: `.system` → `nil` (OS entscheidet), sonst explizit.
public var colorScheme: ColorScheme? {
switch self {
case .system: nil
case .light: .light
case .dark: .dark
}
}
/// Deutsches Label für den Picker.
public var label: String {
switch self {
case .system: "Automatisch"
case .light: "Hell"
case .dark: "Dunkel"
}
}
/// SF-Symbol für den Picker.
public var icon: String {
switch self {
case .system: "circle.lefthalf.filled"
case .light: "sun.max"
case .dark: "moon"
}
}
}