WeatherKit als Datenquelle (statt OpenMeteo-Proxy via banyaro-Backend): - BanYaroGo.entitlements: com.apple.developer.weatherkit - WetterView komplett neu mit WeatherService.shared.weather(for:) - DayWeather.symbolName als SF-Symbol direkt, kein WMO-Mapping nötig GassiWetter-Logik (1:1-Port aus banyaro PWA wetter.js): - gassiScore(...) 1-10 mit Temp/Regen/Wind/Asphalt/Gewitter - asphaltTemp(airMax, uvMax) — gleiche Formel mit t_factor und UV-Bonus - asphaltLevel safe/warm/hot/danger mit Advice-Texten - schnueffelIndex aus Feuchte (precipProb-derived) und Temperatur - tickRisk March-Oktober, Schwellen 7/12/20°C - pawColdProtection bei tempMin <= 0 UI: - Horizontaler Tag-Picker (Heute/Morgen + EEE) mit Mini-Stats - Großer Gassi-Score-Badge in Empfehlungs-Farbe (grün/amber/rot) - Stats-Grid 2x2: Niederschlag, Wind, UV, Asphalt - Hunde-Hinweise als farbige Boxen (Asphalt, Pfoten, Gewitter, Zecken) - Schnüffel-Index als kompakte Karte mit Emoji Color(hex:)-Extension für die HEX-Werte aus dem PWA übernommen.
20 lines
688 B
Swift
20 lines
688 B
Swift
import SwiftUI
|
|
|
|
extension Color {
|
|
/// Creates a Color from a 6-digit hex string (e.g. "10B981" or "#10B981").
|
|
/// Falls back to system gray on bad input.
|
|
init(hex: String) {
|
|
let cleaned = hex.trimmingCharacters(in: CharacterSet(charactersIn: "#"))
|
|
var value: UInt64 = 0
|
|
Scanner(string: cleaned).scanHexInt64(&value)
|
|
|
|
guard cleaned.count == 6 else {
|
|
self.init(.sRGB, red: 0.5, green: 0.5, blue: 0.5)
|
|
return
|
|
}
|
|
let r = Double((value >> 16) & 0xFF) / 255
|
|
let g = Double((value >> 8) & 0xFF) / 255
|
|
let b = Double(value & 0xFF) / 255
|
|
self.init(.sRGB, red: r, green: g, blue: b)
|
|
}
|
|
}
|