import { default as React } from 'react'; import { GroundTrackPoint, GroundStation, LayerDef as MapLayerDef } from '../types'; export interface SatelliteTrack { /** Unique satellite identifier */ id: string; /** Satellite display name */ name: string; /** Ground track points */ groundTrack: GroundTrackPoint[]; /** Track color */ color?: string; /** Satellite status for icon coloring */ status?: "normal" | "caution" | "serious" | "critical" | "standby" | "off"; /** Access mask (true = in contact) */ accessMask?: boolean[]; /** Show this satellite's sensor footprint */ showFootprint?: boolean; /** Footprint radius in degrees (sensor cone half-angle on ground) */ footprintRadius?: number; /** Show future (predicted) track as dashed line */ futureTrackIndex?: number; /** AOS/LOS markers */ passMarkers?: Array<{ type: "aos" | "los"; latitude: number; longitude: number; label?: string; }>; } export interface GroundStationEnhanced extends GroundStation { /** Station status */ status?: "normal" | "caution" | "serious" | "critical" | "standby" | "off"; /** Show coverage circle */ showCoverage?: boolean; /** Coverage radius in degrees (visibility horizon) */ coverageRadius?: number; /** Station type (affects icon) */ type?: "dish" | "phased-array" | "omni" | "relay"; } /** * SRO-compatible team path format (space-range-operator CustomMap data shape). * Provide this as an alternative to `satellites` for plug-and-play compatibility. */ export interface TeamPath { /** Team/satellite name */ name: string; /** Track color */ color?: string; /** Ordered position array */ positions: Array<{ lat: number; lng: number; time?: number; altitude?: number | null; }>; } /** SRO-compatible ground station format */ export interface SROGroundStation { name: string; latitude: number; longitude: number; altitude?: number | null; } /** * User-placed point-of-interest pin on the map. * Designed for collaborative scenarios where operators share annotated locations * across terminals in real time (e.g. targets, waypoints, hazard markers). */ export interface MapPin { /** Unique identifier (used as key and for update/remove callbacks) */ id: string; /** Latitude in degrees (−90 … 90) */ latitude: number; /** Longitude in degrees (−180 … 180) */ longitude: number; /** Short label displayed next to the pin (e.g. "Target Alpha") */ label?: string; /** Pin color — any CSS color string. Defaults to accent primary. */ color?: string; /** Optional description shown in tooltip on hover */ description?: string; /** Who placed the pin (display-only; not enforced) */ createdBy?: string; } /** * A point light source rendered on the night side of the map. * Use this to display city lights, base locations, RF emitters, * or any glow that should only be visible after sunset. * * Light sources are masked by the terminator — they fade in * through the twilight gradient and reach full brightness in * deep night, matching real-world light-pollution behavior. */ export interface LightSource { /** Latitude in degrees (−90 … 90) */ latitude: number; /** Longitude in degrees (−180 … 180) */ longitude: number; /** Glow radius in pixels (default 4). Larger values create wider halos. */ radius?: number; /** Glow intensity 0–1 (default 0.8). Controls the peak alpha of the light dot. */ intensity?: number; /** Light color — any CSS color string (default '#ffeedd', warm white). */ color?: string; /** Optional label shown on hover (Leaflet) or in tooltip (Canvas). */ label?: string; } export type { MapLayerDef } from '../types'; export interface GroundTrackMapProps { /** Single satellite ground track (legacy API) */ groundTrack?: GroundTrackPoint[]; /** Multiple satellite tracks */ satellites?: SatelliteTrack[]; /** Ground stations to display */ groundStations?: (GroundStation | GroundStationEnhanced | SROGroundStation)[]; /** Access mask for single-satellite mode (legacy API) */ accessMask?: boolean[]; /** Team path data (SRO CustomMap format) — auto-converts to satellites internally */ teamPaths?: TeamPath[]; /** Show day/night terminator */ showTerminator?: boolean; /** Override the time used for the day/night terminator calculation. * Defaults to wall-clock `new Date()` when omitted. * Pass a simulation/mission UTC to keep the terminator in sync with a sim clock. */ terminatorTime?: Date; /** Show grid lines */ showGrid?: boolean; /** Show legend */ showLegend?: boolean; /** Show equator highlight */ showEquator?: boolean; /** Show recenter button (SRO compat) */ showRecenterButton?: boolean; /** Show a toggle button to switch between Dark and Satellite tile styles. Default true for Leaflet. */ showMapStyleToggle?: boolean; /** Whether data is still loading (SRO compat) */ isLoading?: boolean; /** Message when there is no data (SRO compat) */ emptyMessage?: string; /** Chart width (default: 100%) */ width?: number | string; /** Chart height — number for fixed px, or CSS string like '100%' to fill a flex parent */ height?: number | string; /** Minimum height CSS string (SRO compat, e.g. "400px") */ minHeight?: string; /** Default center [lat, lon] (SRO compat) */ defaultCenter?: [number, number]; /** Default zoom level 1-10 (SRO compat, affects initial scale) */ defaultZoom?: number; /** Custom className */ className?: string; /** Click handler for satellites */ onSatelliteClick?: (satelliteId: string) => void; /** Click handler for ground stations */ onStationClick?: (stationId: string) => void; /** Map backend: 'leaflet' (default, requires leaflet peer) or 'canvas' */ mapProvider?: "leaflet" | "canvas"; /** Tile URL for Leaflet (default: CartoDB dark). Ignored when mapProvider is 'canvas'. */ tileUrl?: string; /** * URL template for a "night" tile layer (e.g. NASA Black Marble, VIIRS city lights). * When provided, this layer is rendered beneath the terminator overlay so that it * appears only on the night side of the map — creating a realistic day/night transition. * The day tiles remain visible on the sunlit side. * * Requires `showTerminator` to be enabled. Leaflet backend only. * * Example: `'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/VIIRS_CityLights_2012/...'` */ nightTileUrl?: string; /** * Array of point light sources rendered on the night side of the map. * Each light appears as a soft glow dot that is masked by the terminator — * invisible in daylight, fading in through twilight, full brightness at night. * * Use cases: city lights, base indicators, RF emitters, targets, population centers. */ lightSources?: LightSource[]; /** Array of user-placed pins displayed on the map */ pins?: MapPin[]; /** * Allow operators to place new pins by clicking the map. * When true, a single-click on an empty area opens a pin creation flow. * Requires `onPinAdd` to be set. Default false. */ pinsEditable?: boolean; /** Called when the user places a new pin (provides lat/lon; consumer assigns id and persists) */ onPinAdd?: (pin: Omit) => void; /** Called when the user edits an existing pin (label, color, description change) */ onPinUpdate?: (pin: MapPin) => void; /** Called when the user removes a pin */ onPinRemove?: (pinId: string) => void; /** * Custom overlay layers shown in the Layers panel dropdown. * Each layer gets a toggle switch. The GroundTrackMap does NOT render * the layer content — it only provides the toggle UI. * Listen to `onLayerChange` for state updates and render your own overlays. */ customLayers?: MapLayerDef[]; /** * Called when any layer is toggled (built-in or custom). * `layerId` is one of: 'terminator', 'grid', or a custom layer id. * `enabled` is the new toggle state. */ onLayerChange?: (layerId: string, enabled: boolean) => void; /** * Show sun and moon position markers on the map. * Requires `showTerminator`. Default: true when terminator is enabled. */ showCelestialMarkers?: boolean; } export declare function GroundTrackMap({ groundTrack, satellites, groundStations, accessMask, teamPaths, showTerminator, terminatorTime, showGrid, showLegend, showEquator, showRecenterButton, showMapStyleToggle, isLoading, emptyMessage, width, height, minHeight, defaultCenter, defaultZoom, className, onSatelliteClick, onStationClick, mapProvider, tileUrl, nightTileUrl, lightSources, pins, pinsEditable, onPinAdd, onPinUpdate, onPinRemove, customLayers, onLayerChange, showCelestialMarkers, }: GroundTrackMapProps): React.ReactElement; export default GroundTrackMap;