Radar reflectivity (dBZ)
+~20 light · 40 moderate · 50+ heavy rain / hail
+NWS alerts
+ {(["warning", "watch", "advisory"] as const).map((k) => ( +Fill colour = NWS hazard-map colour for the event
+Power outages
diff --git a/drb-frontend/components/live/WallPanels.tsx b/drb-frontend/components/live/WallPanels.tsx index 79b3596..a41a9ba 100644 --- a/drb-frontend/components/live/WallPanels.tsx +++ b/drb-frontend/components/live/WallPanels.tsx @@ -17,9 +17,12 @@ import { SourceCredit, fetchedLabel } from "@/components/SourceCredit"; import { InlinePlayer } from "@/components/InlinePlayer"; import { canPlayAudio, hasAudio, playIncident, stop as stopAudio, useAudio } from "@/lib/audioQueue"; import { - CONTEXT_KM, MAY_BE_MERGED_KM, NEAR_CAMERA_KM, bboxAround, contextFor, pathStops, sampleRadarDbz, stopNumbers, + CONTEXT_KM, MAY_BE_MERGED_KM, NEAR_CAMERA_KM, PRECIP_ECHO_DBZ, alertsAt, bboxAround, compass, contextFor, pathStops, + sampleRadarDbz, stopNumbers, wantsWind, wxStyle, wxTime, type LatLon, type NearCamera, } from "@/lib/liveWall"; +import { useWeatherAlertsIn, useWind, type Polled } from "@/lib/useWeather"; +import type { WeatherAlertsResponse } from "@/lib/types"; import { useOutagesIn, type OutagesState } from "@/lib/useOutages"; import { OUTAGE_POINT_KM, countyName, isUtilityHazard, matchOutages, staleCountiesAt } from "@/lib/outageMatch"; @@ -181,6 +184,126 @@ function OutageFeedRow({ incidents, nodes }: { incidents: IncidentRecord[]; node ); } + +// ── Weather (server-26#237) ────────────────────────────────────────────────── +const NWS_CREDIT: CameraCredit = { attribution: "National Weather Service", attribution_url: "https://www.weather.gov/", disclaimer: null }; +const METAR_CREDIT: CameraCredit = { attribution: "NOAA Aviation Weather Center (METAR)", attribution_url: "https://aviationweather.gov/", disclaimer: null }; + +/** + * Why the NWS answer is unusable, in one line (same wording as the map's + * banner) — or null when it is fine to read. + */ +function nwsProblem(state: Polled