'use client'; import React, { useState } from 'react'; import { RadarMapMode, RadarRiderTelemetry } from './types'; import { INITIAL_RADAR_RIDERS } from './fixtures'; interface LivePackRadarProps { initialMode?: RadarMapMode; } export function LivePackRadar({ initialMode = 'tactical' }: LivePackRadarProps) { const [mapMode, setMapMode] = useState(initialMode); const [selectedRiderId, setSelectedRiderId] = useState('rider-1'); const [simulationTick, setSimulationTick] = useState(0); // Active riders list with slight dynamic animation based on simulationTick const riders: RadarRiderTelemetry[] = INITIAL_RADAR_RIDERS.map((r, idx) => { // Subtle realistic wobble for demo interactivity const speedWobble = simulationTick > 0 ? ((simulationTick + idx * 3) % 5) - 2 : 0; return { ...r, speedMph: Math.max(0, r.speedMph + speedWobble), }; }); const selectedRider = riders.find((r) => r.id === selectedRiderId) || riders[0]; const handlePulseSimulation = () => { setSimulationTick((prev) => prev + 1); }; return (
{/* Tactical Header Strip */}
Swarm Recon: Skyline Blvd > Coast Hwy
Session #CA-84-SW
cell_tower Mesh Active ● {riders.length} Synchronized Gap Delta: ±0.4s
{/* Cockpit Layout: Map & Radar Feed */}
{/* Tactical Canvas & Radar Screen */}
{/* Tactical Background Overlay */} {mapMode === 'tactical' && ( <> {/* Tactical Coordinate Grids (Inline SVG Overlay) */} {/* Tactical Route Trace */} {/* Safe Spacing Buffers */} )} {/* Satellite Mode Backdrop */} {mapMode === 'satellite' && (
{/* Satellite Dark Topography Simulation */}
{/* Topographic Contour lines */} {/* Satellite Vector Track */}
High-Resolution Orbit Imagery • Multi-Band GNSS Overlaid
)} {/* Elevation 3D Mode Backdrop */} {mapMode === 'elevation' && (
{/* Elevation isometric grid lines */} {/* Mountain elevation profile ribbon */} {/* Elevation Altitude Badges */}
Start: 1,480 ft
Summit: 2,210 ft (+730 ft gain)
Grade: 8.4% Apex Switchback
)} {/* Map HUD Top Left: Sector Status */}
Formation Profile Staggered Dual Column [B] shield Paceline Lock: Optimal
{/* Map HUD Top Right: Telemetry & Mesh Lock (GPS Frequency label removed as requested) */}
GNSS Multi-Band Mesh 18 Satellites Locked
satellite_alt
{/* Interactive Rider Markers across the canvas */}
{riders.map((rider) => { const isSelected = selectedRiderId === rider.id; return (
setSelectedRiderId(rider.id)} style={{ left: `${rider.coordinates.x}%`, top: `${rider.coordinates.y}%`, }} className={`absolute -translate-x-1/2 -translate-y-1/2 cursor-pointer transition-all duration-200 group ${ isSelected ? 'z-30 scale-110' : 'z-20 hover:scale-105' }`} data-testid={`radar-marker-${rider.callsign}`} > {/* Outer targeting reticle if selected */} {isSelected && (
)} {/* Marker Badge */}
{rider.callsign} {rider.speedMph} MPH
{/* Deceleration Warning Callout */} {rider.status === 'alert' && (
warning -1.2G Decel
)}
); })}
{/* Map HUD Bottom Control Strip */}
{/* Radar View Mode Toggles */}
{/* Regroup point readout */}
Regroup Point Alice's Restaurant (14.8 mi)
{/* Live Swarm Nodes Telemetry Column */}
Pack Telemetry Stream {riders.length} Active Nodes
{/* Active Rider Telemetry Cards */} {riders.map((rider) => { const isSelected = selectedRiderId === rider.id; return (
setSelectedRiderId(rider.id)} className={`p-space-sm rounded-xl cursor-pointer transition-all border ${ isSelected ? 'bg-surface-container-highest border-primary-container shadow-md ring-1 ring-primary-container/50' : 'bg-surface-container-high border-transparent hover:bg-surface-container-highest hover:border-outline-variant/30' }`} data-testid={`telemetry-card-${rider.callsign}`} >
{rider.callsign} {rider.role}
{rider.gapMeters === 0 ? 'Lead' : `+${rider.gapMeters}m Gap`}
{/* Normal Telemetry Grid */}
Speed: {rider.speedMph} MPH
Lean: {rider.leanAngleDeg}°
{rider.brakePct && rider.brakePct > 0 ? ( Brake: {rider.brakePct}% ) : rider.throttlePct !== undefined ? ( Throttle: {rider.throttlePct}% ) : ( Delta: ±{rider.gapDeltaSec}s )}
{/* Warning / Alert Callout */} {rider.alertText && (
{rider.status === 'alert' ? 'warning' : 'tire_repair'} {rider.alertText}
)}
); })} {/* Selected Rider Inspector HUD Drawer */} {selectedRider && (
Selected Node Inspector {selectedRider.callsign}
Role: {selectedRider.roleBadge} Gap Delta: ±{selectedRider.gapDeltaSec}s Live Sync: 20Hz
)}
{/* Formation Safety Metrics Panel Strip */}
{/* Metric 1: Spacing Integrity */}
Spacing Integrity verified
94% Safety Index
{/* Metric 2: Average Pack Speed */}
Average Pack Velocity speed
64.2 MPH
Delta Drift: -1.8 MPH (tightening)
{/* Metric 3: Atmospheric & Track Conditions */}
Surface & Climate thermostat
21°C Dry Asphalt
0% Precip • Grip Optimal
{/* Metric 4: Next Regroup Waypoint */}
Regroup Point pin_drop
14.8 Miles
Alice's Restaurant Checkpoint
); }