mana-swift-ui/Sources/ManaThemeUI/ManaAppearancePicker.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

30 lines
887 B
Swift

import SwiftUI
/// Segmentierter Hell/Dunkel/Automatik-Wähler. Pure View — bindet an
/// eine app-gehaltene ``ManaAppearanceMode``-Auswahl (typisch
/// `@AppStorage`), persistiert selbst nichts.
///
/// ```swift
/// @AppStorage("myapp.appearance") private var raw = ManaAppearanceMode.system.rawValue
/// ManaAppearancePicker(selection: Binding(
/// get: { ManaAppearanceMode(rawValue: raw) ?? .system },
/// set: { raw = $0.rawValue }
/// ))
/// ```
public struct ManaAppearancePicker: View {
@Binding private var selection: ManaAppearanceMode
public init(selection: Binding<ManaAppearanceMode>) {
_selection = selection
}
public var body: some View {
Picker("Erscheinung", selection: $selection) {
ForEach(ManaAppearanceMode.allCases) { mode in
Label(mode.label, systemImage: mode.icon).tag(mode)
}
}
.pickerStyle(.segmented)
.labelsHidden()
}
}