import Foundation import Observation /// Wo die Navigation sitzt. /// /// Eine Einstellung, kein fester Aufbau: auf einem großen Bildschirm ist eine /// Leiste an der Seite richtig, auf einem kleinen nimmt sie Platz weg, den man /// lieber dem Bild gäbe. Wer welche Form will, entscheidet nicht die App. @MainActor @Observable final class NavigationSettings { enum Placement: String, CaseIterable, Identifiable, Sendable { /// Seitlich — auf dem iPhone ausfahrbar, auf dem iPad dauerhaft. case side /// Oben als Reihe über dem Inhalt. case top var id: String { rawValue } } private enum Key { static let placement = "flixy.navigation.placement" } private let defaults: UserDefaults var placement: Placement { didSet { defaults.set(placement.rawValue, forKey: Key.placement) } } init(defaults: UserDefaults = .standard) { self.defaults = defaults self.placement = defaults.string(forKey: Key.placement) .flatMap(Placement.init(rawValue:)) ?? .side } }