"use client"; import { useState, useMemo } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { AlertTriangle, Clock, Minus, Plus, ExternalLink, Brain, Loader2 } from 'lucide-react'; import React, { useEffect, useRef, useCallback } from 'react'; import WikiImage from '@/components/WikiImage'; import { fetchWikipediaSummary } from '@/lib/wikimediaClient'; import type { SelectedEntity, RegionDossier, FimiData } from "@/types/dashboard"; import { useDataKeys } from '@/hooks/useDataStore'; import { API_BASE } from '@/lib/api'; import { lookupShodanHost } from '@/lib/shodanClient'; import type { ShodanHost } from '@/types/shodan'; // Format time from pubish string "Tue, 24 Feb 2026 15:30:00 GMT" to "15:30" function formatTime(pubDate: string) { try { const d = new Date(pubDate); return d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); } catch { return "00:00"; } } // ICAO type designator → Wikipedia article title const AIRCRAFT_WIKI: Record = { // Boeing widebodies B741: 'Boeing 747', B742: 'Boeing 747', B743: 'Boeing 747', B744: 'Boeing 747-400', B748: 'Boeing 747-8', B752: 'Boeing 757', B753: 'Boeing 757', B762: 'Boeing 767', B763: 'Boeing 767', B764: 'Boeing 767', B772: 'Boeing 777', B773: 'Boeing 777', B77L: 'Boeing 777', B77W: 'Boeing 777', B778: 'Boeing 777X', B788: 'Boeing 787 Dreamliner', B789: 'Boeing 787 Dreamliner', B78X: 'Boeing 787 Dreamliner', // Boeing narrowbodies B712: 'Boeing 717', B731: 'Boeing 737', B732: 'Boeing 737', B733: 'Boeing 737', B734: 'Boeing 737', B735: 'Boeing 737', B736: 'Boeing 737', B737: 'Boeing 737', B738: 'Boeing 737 Next Generation', B739: 'Boeing 737 Next Generation', B37M: 'Boeing 737 MAX', B38M: 'Boeing 737 MAX', B39M: 'Boeing 737 MAX', // Airbus widebodies A306: 'Airbus A300', A310: 'Airbus A310', A332: 'Airbus A330', A333: 'Airbus A330', A338: 'Airbus A330neo', A339: 'Airbus A330neo', A342: 'Airbus A340', A343: 'Airbus A340', A345: 'Airbus A340', A346: 'Airbus A340', A359: 'Airbus A350', A35K: 'Airbus A350', A388: 'Airbus A380', // Airbus narrowbodies A318: 'Airbus A318', A319: 'Airbus A319', A320: 'Airbus A320', A321: 'Airbus A321', A19N: 'Airbus A319neo', A20N: 'Airbus A320neo family', A21N: 'Airbus A321neo', // Embraer E135: 'Embraer ERJ 145 family', E145: 'Embraer ERJ 145 family', E170: 'Embraer E-Jet family', E175: 'Embraer E-Jet family', E190: 'Embraer E-Jet family', E195: 'Embraer E-Jet family', E290: 'Embraer E-Jet E2 family', E295: 'Embraer E-Jet E2 family', // Bombardier / CRJ CRJ1: 'Bombardier CRJ100/200', CRJ2: 'Bombardier CRJ100/200', CRJ7: 'Bombardier CRJ700 series', CRJ9: 'Bombardier CRJ700 series', CRJX: 'Bombardier CRJ700 series', // Turboprops DH8A: 'De Havilland Canada Dash 8', DH8B: 'De Havilland Canada Dash 8', DH8C: 'De Havilland Canada Dash 8', DH8D: 'De Havilland Canada Dash 8', AT45: 'ATR 42', AT46: 'ATR 42', AT72: 'ATR 72', AT76: 'ATR 72', // Bizjets C56X: 'Cessna Citation Excel', C680: 'Cessna Citation Sovereign', C750: 'Cessna Citation X', CL30: 'Bombardier Challenger 300', CL35: 'Bombardier Challenger 350', CL60: 'Bombardier Challenger 600 series', GL5T: 'Bombardier Global 5000', GLEX: 'Bombardier Global Express', GLF4: 'Gulfstream IV', GLF5: 'Gulfstream V', GLF6: 'Gulfstream G650', G280: 'Gulfstream G280', GA5C: 'Gulfstream G500/G600', GA6C: 'Gulfstream G500/G600', LJ35: 'Learjet 35', LJ45: 'Learjet 45', LJ60: 'Learjet 60', F900: 'Dassault Falcon 900', FA7X: 'Dassault Falcon 7X', FA8X: 'Dassault Falcon 8X', // Military — US C130: 'Lockheed C-130 Hercules', C30J: 'Lockheed Martin C-130J Super Hercules', C17: 'Boeing C-17 Globemaster III', KC35: 'Boeing KC-135 Stratotanker', KC46: 'Boeing KC-46 Pegasus', K35R: 'Boeing KC-135 Stratotanker', E3CF: 'Boeing E-3 Sentry', E3TF: 'Boeing E-3 Sentry', E6B: 'Boeing E-6 Mercury', P8: 'Boeing P-8 Poseidon', P8A: 'Boeing P-8 Poseidon', B52H: 'Boeing B-52 Stratofortress', B1: 'Rockwell B-1 Lancer', B1B: 'Rockwell B-1 Lancer', B2: 'Northrop Grumman B-2 Spirit', B21: 'Northrop Grumman B-21 Raider', F16: 'General Dynamics F-16 Fighting Falcon', F16C: 'General Dynamics F-16 Fighting Falcon', F15: 'McDonnell Douglas F-15 Eagle', F15E: 'McDonnell Douglas F-15E Strike Eagle', F18: 'Boeing F/A-18E/F Super Hornet', F18H: 'Boeing F/A-18E/F Super Hornet', FA18: 'Boeing F/A-18E/F Super Hornet', F35: 'Lockheed Martin F-35 Lightning II', F22: 'Lockheed Martin F-22 Raptor', A10: 'Fairchild Republic A-10 Thunderbolt II', V22: 'Bell Boeing V-22 Osprey', C5M: 'Lockheed C-5 Galaxy', C5: 'Lockheed C-5 Galaxy', C2: 'Grumman C-2 Greyhound', C40: 'Boeing C-40 Clipper', C37: 'Gulfstream V', E4B: 'Boeing E-4', E8: 'Northrop Grumman E-8 Joint STARS', RC135: 'Boeing RC-135', RC35: 'Boeing RC-135', R135: 'Boeing RC-135', U2: 'Lockheed U-2', U2S: 'Lockheed U-2', RQ4: 'Northrop Grumman RQ-4 Global Hawk', MQ9: 'General Atomics MQ-9 Reaper', MQ4C: 'Northrop Grumman MQ-4C Triton', H60: 'Sikorsky UH-60 Black Hawk', MH60: 'Sikorsky SH-60 Seahawk', CH47: 'Boeing CH-47 Chinook', H47: 'Boeing CH-47 Chinook', AH64: 'Boeing AH-64 Apache', H64: 'Boeing AH-64 Apache', EP3: 'Lockheed EP-3', P3: 'Lockheed P-3 Orion', T38: 'Northrop T-38 Talon', T6: 'Beechcraft T-6 Texan II', // Military — NATO / Allied EUFI: 'Eurofighter Typhoon', RFAL: 'Dassault Rafale', TORN: 'Panavia Tornado', GROB: 'Grob G 120TP', GRIS: 'Saab JAS 39 Gripen', J39: 'Saab JAS 39 Gripen', F4: 'McDonnell Douglas F-4 Phantom II', HAWK: 'BAE Systems Hawk', MRTT: 'Airbus A330 MRTT', A310M: 'Airbus A310 MRTT', P1: 'Kawasaki P-1', C1: 'Kawasaki C-1', C2JP: 'Kawasaki C-2 (aircraft)', // Military — Russian SU27: 'Sukhoi Su-27', SU30: 'Sukhoi Su-30', SU34: 'Sukhoi Su-34', SU35: 'Sukhoi Su-35', SU57: 'Sukhoi Su-57', MIG29: 'Mikoyan MiG-29', MIG31: 'Mikoyan MiG-31', TU95: 'Tupolev Tu-95', TU160: 'Tupolev Tu-160', TU22M: 'Tupolev Tu-22M', IL78: 'Ilyushin Il-78', A50: 'Beriev A-50', // GA C172: 'Cessna 172', C182: 'Cessna 182 Skylane', C206: 'Cessna 206', C208: 'Cessna 208 Caravan', C210: 'Cessna 210 Centurion', PA28: 'Piper PA-28 Cherokee', PA32: 'Piper PA-32', PA46: 'Piper PA-46 Malibu', BE36: 'Beechcraft Bonanza', BE9L: 'Beechcraft King Air', BE20: 'Beechcraft Super King Air', B350: 'Beechcraft King Air 350', PC12: 'Pilatus PC-12', PC24: 'Pilatus PC-24', TBM7: 'Daher TBM', TBM8: 'Daher TBM', TBM9: 'Daher TBM', PIVI: 'Pipistrel Virus', // Helicopters R44: 'Robinson R44', R22: 'Robinson R22', R66: 'Robinson R66', B06: 'Bell 206', B407: 'Bell 407', B412: 'Bell 412', EC35: 'Airbus Helicopters H135', EC45: 'Airbus Helicopters H145', S76: 'Sikorsky S-76', S92: 'Sikorsky S-92', // Russian / other SU95: 'Sukhoi Superjet 100', AN12: 'Antonov An-12', AN26: 'Antonov An-26', IL76: 'Ilyushin Il-76', IL96: 'Ilyushin Il-96', A400: 'Airbus A400M Atlas', C295: 'Airbus C-295', }; /** * Maps plane_alert_db `ac_type` substrings → correct Wikipedia article titles. * The ac_type field often includes variant suffixes (e.g. "KC-135R", "F-16AM") * that don't correspond to Wikipedia article names. Checked in order — first match wins. */ const AC_TYPE_WIKI_OVERRIDES: [RegExp, string][] = [ // US Fighters & Attack [/F-?22/i, 'Lockheed Martin F-22 Raptor'], [/F-?35/i, 'Lockheed Martin F-35 Lightning II'], [/F-?16/i, 'General Dynamics F-16 Fighting Falcon'], [/F-?15E/i, 'McDonnell Douglas F-15E Strike Eagle'], [/F-?15/i, 'McDonnell Douglas F-15 Eagle'], [/F.?\/A.?18/i, 'Boeing F/A-18E/F Super Hornet'], [/F-?18/i, 'Boeing F/A-18E/F Super Hornet'], [/A-?10/i, 'Fairchild Republic A-10 Thunderbolt II'], // US Bombers [/B-?52/i, 'Boeing B-52 Stratofortress'], [/B-?1B|B-?1\b/i, 'Rockwell B-1 Lancer'], [/B-?2\b/i, 'Northrop Grumman B-2 Spirit'], [/B-?21/i, 'Northrop Grumman B-21 Raider'], // US Tankers & Transport [/KC-?135/i, 'Boeing KC-135 Stratotanker'], [/KC-?46/i, 'Boeing KC-46 Pegasus'], [/KC-?10/i, 'McDonnell Douglas KC-10 Extender'], [/C-?17/i, 'Boeing C-17 Globemaster III'], [/C-?130J/i, 'Lockheed Martin C-130J Super Hercules'], [/C-?130/i, 'Lockheed C-130 Hercules'], [/C-?5/i, 'Lockheed C-5 Galaxy'], [/V-?22/i, 'Bell Boeing V-22 Osprey'], // US ISR & Special [/P-?8/i, 'Boeing P-8 Poseidon'], [/E-?3/i, 'Boeing E-3 Sentry'], [/E-?6/i, 'Boeing E-6 Mercury'], [/E-?4/i, 'Boeing E-4'], [/E-?8|Joint.?STARS/i, 'Northrop Grumman E-8 Joint STARS'], [/RC-?135/i, 'Boeing RC-135'], [/EP-?3/i, 'Lockheed EP-3'], [/P-?3/i, 'Lockheed P-3 Orion'], [/U-?2/i, 'Lockheed U-2'], [/RQ-?4|Global.?Hawk/i, 'Northrop Grumman RQ-4 Global Hawk'], [/MQ-?9|Reaper/i, 'General Atomics MQ-9 Reaper'], [/MQ-?4C|Triton/i, 'Northrop Grumman MQ-4C Triton'], // US Helicopters [/AH-?64|Apache/i, 'Boeing AH-64 Apache'], [/CH-?47|Chinook/i, 'Boeing CH-47 Chinook'], [/UH-?60|Black.?Hawk/i, 'Sikorsky UH-60 Black Hawk'], [/SH-?60|MH-?60|Seahawk/i, 'Sikorsky SH-60 Seahawk'], // NATO / Allied [/Eurofighter|Typhoon/i, 'Eurofighter Typhoon'], [/Rafale/i, 'Dassault Rafale'], [/Tornado/i, 'Panavia Tornado'], [/Gripen/i, 'Saab JAS 39 Gripen'], [/A400M/i, 'Airbus A400M Atlas'], [/A330\s*MRTT|Voyager/i, 'Airbus A330 MRTT'], [/Hawk\s*T/i, 'BAE Systems Hawk'], // Russian [/Su-?57/i, 'Sukhoi Su-57'], [/Su-?35/i, 'Sukhoi Su-35'], [/Su-?34/i, 'Sukhoi Su-34'], [/Su-?30/i, 'Sukhoi Su-30'], [/Su-?27/i, 'Sukhoi Su-27'], [/Su-?25/i, 'Sukhoi Su-25'], [/MiG-?31/i, 'Mikoyan MiG-31'], [/MiG-?29/i, 'Mikoyan MiG-29'], [/Tu-?160/i, 'Tupolev Tu-160'], [/Tu-?95/i, 'Tupolev Tu-95'], [/Tu-?22M/i, 'Tupolev Tu-22M'], [/Il-?76/i, 'Ilyushin Il-76'], [/Il-?78/i, 'Ilyushin Il-78'], [/A-?50\b/i, 'Beriev A-50'], // Chinese [/J-?20/i, 'Chengdu J-20'], [/J-?16/i, 'Shenyang J-16'], [/J-?10/i, 'Chengdu J-10'], [/Y-?20/i, 'Xi\'an Y-20'], ]; /** Resolve a plane_alert_db ac_type string to a Wikipedia article title. */ function resolveAcTypeWiki(acType: string): string | null { for (const [pattern, wikiTitle] of AC_TYPE_WIKI_OVERRIDES) { if (pattern.test(acType)) return wikiTitle; } return null; } function resolveAircraftWikiTitle(model: string | undefined): string | null { if (!model) return null; return AIRCRAFT_WIKI[model] || resolveAcTypeWiki(model); } // Issue #220 (tg12): the previous implementation kept its own // module-local Wikipedia thumbnail cache and issued anonymous fetches // without `Api-User-Agent`. We now delegate to lib/wikimediaClient, // which sends the policy-compliant header and shares one cache with // WikiImage and useRegionDossier. function useAircraftImage(model: string | undefined): { imgUrl: string | null; wikiUrl: string | null; loading: boolean } { const [imgUrl, setImgUrl] = useState(null); const [loading, setLoading] = useState(false); const wikiTitle = resolveAircraftWikiTitle(model) || undefined; const wikiUrl = wikiTitle ? `https://en.wikipedia.org/wiki/${wikiTitle.replace(/ /g, '_')}` : null; useEffect(() => { let cancelled = false; if (!wikiTitle) { setImgUrl(null); setLoading(false); return; } setLoading(true); fetchWikipediaSummary(wikiTitle).then((summary) => { if (cancelled) return; setImgUrl(summary?.thumbnail || null); setLoading(false); }); return () => { cancelled = true; }; }, [wikiTitle]); if (!wikiTitle) return { imgUrl: null, wikiUrl: null, loading: false }; return { imgUrl, wikiUrl, loading }; } // Vessel type → Wikipedia article for generic ships (carriers have their own wiki field) const VESSEL_TYPE_WIKI: Record = { 'tanker': 'https://en.wikipedia.org/wiki/Oil_tanker', 'cargo': 'https://en.wikipedia.org/wiki/Container_ship', 'passenger': 'https://en.wikipedia.org/wiki/Cruise_ship', 'yacht': 'https://en.wikipedia.org/wiki/Superyacht', 'military_vessel': 'https://en.wikipedia.org/wiki/Warship', }; type FlightTrailPoint = { lat?: number; lng?: number; alt?: number; ts?: number } | number[]; function EmissionsEstimateBlock({ flight }: { flight: any }) { const emissions = flight?.emissions; const context = emissions ? 'Model-based cruise estimate' : null; return (
EMISSIONS ESTIMATE
FUEL RATE
{emissions ? ( <>{emissions.fuel_gph} GPH ) : 'UNKNOWN'}
CO2 RATE
{emissions ? ( <>{emissions.co2_kg_per_hour.toLocaleString()} KG/HR ) : 'UNKNOWN'}
{context && (
{context}
)}
); } function NewsFeedInner({ selectedEntity, regionDossier, regionDossierLoading, onArticleClick }: { selectedEntity?: SelectedEntity | null, regionDossier?: RegionDossier | null, regionDossierLoading?: boolean, onArticleClick?: (idx: number, lat?: number, lng?: number, title?: string) => void }) { const data = useDataKeys([ 'news', 'fimi', 'commercial_flights', 'private_flights', 'private_jets', 'military_flights', 'tracked_flights', 'ships', 'gdelt', 'liveuamap', 'airports', 'last_updated', 'threat_level', ] as const); const [isMinimized, setIsMinimized] = useState(false); const [selectedFlightTrail, setSelectedFlightTrail] = useState([]); const [expandedIndexes, setExpandedIndexes] = useState([]); const [fimiExpanded, setFimiExpanded] = useState(false); const [aiSummaryOpen, setAiSummaryOpen] = useState(false); const [aiSummary, setAiSummary] = useState(null); const [aiSummaryLoading, setAiSummaryLoading] = useState(false); const itemRefs = useRef<(HTMLDivElement | null)[]>([]); // Intentionally omitting map click triggers for expanding // as we now show a contextual pop-up on the map directly. const toggleExpand = (idx: number) => { if (expandedIndexes.includes(idx)) { setExpandedIndexes(expandedIndexes.filter(i => i !== idx)); } else { setExpandedIndexes([...expandedIndexes, idx]); } } const news = data?.news || []; const fimi: FimiData | undefined = data?.fimi; // Cross-reference: check if a news article title matches any FIMI disinfo keywords const fimiKeywords = useMemo(() => fimi?.disinfo_keywords || [], [fimi?.disinfo_keywords]); const checkDisinfoLinked = useCallback((title: string): boolean => { if (fimiKeywords.length === 0) return false; const titleLower = title.toLowerCase(); return fimiKeywords.some(kw => titleLower.includes(kw)); }, [fimiKeywords]); // Determine the selected flight's model for Wikipedia thumbnail lookup // (must call hook unconditionally — React rules of hooks) const selectedFlightModel = (() => { if (!selectedEntity) return undefined; const { type, id } = selectedEntity; const findByIdOrIndex = (flights?: Array<{ icao24?: string; model?: string }>) => { if (!flights) return null; if (typeof id === 'number') return flights[id] || null; return flights.find((flight) => flight.icao24 === id) || null; }; let flight: { model?: string } | null = null; if (type === 'flight') flight = findByIdOrIndex(data?.commercial_flights); else if (type === 'private_flight') flight = findByIdOrIndex(data?.private_flights); else if (type === 'private_jet') flight = findByIdOrIndex(data?.private_jets); else if (type === 'military_flight') flight = findByIdOrIndex(data?.military_flights); else if (type === 'tracked_flight') flight = findByIdOrIndex(data?.tracked_flights); return flight?.model; })(); const { imgUrl: aircraftImgUrl, wikiUrl: aircraftWikiUrl, loading: aircraftImgLoading } = useAircraftImage(selectedFlightModel); useEffect(() => { const flightSelectionTypes = new Set([ 'flight', 'commercial_flight', 'private_flight', 'private_ga', 'private_jet', 'military_flight', 'tracked_flight', ]); if (!selectedEntity || !flightSelectionTypes.has(selectedEntity.type)) { setSelectedFlightTrail([]); return; } const trailId = String(selectedEntity.id || '').trim(); if (!trailId) { setSelectedFlightTrail([]); return; } let cancelled = false; const refreshSelectedFlightTrail = () => { fetch(`${API_BASE}/api/trail/flight/${encodeURIComponent(trailId)}`, { cache: 'no-store' }) .then((res) => (res.ok ? res.json() : null)) .then((payload) => { if (cancelled) return; const trail = Array.isArray(payload?.trail) ? payload.trail as FlightTrailPoint[] : []; setSelectedFlightTrail(trail); }) .catch(() => { if (!cancelled) setSelectedFlightTrail([]); }); }; refreshSelectedFlightTrail(); const trailRefreshTimer = window.setInterval(refreshSelectedFlightTrail, 30000); return () => { cancelled = true; window.clearInterval(trailRefreshTimer); }; }, [selectedEntity?.id, selectedEntity?.type]); const withSelectedTrail = useCallback((flight: any) => { if (!flight || selectedFlightTrail.length < 2) return flight; const selectedId = String(selectedEntity?.id || '').trim().toLowerCase(); const flightId = String(flight.icao24 || '').trim().toLowerCase(); if (!selectedId || !flightId || selectedId !== flightId) return flight; return { ...flight, trail: selectedFlightTrail }; }, [selectedEntity?.id, selectedFlightTrail]); const [shodanDetail, setShodanDetail] = useState(null); const [shodanLoading, setShodanLoading] = useState(false); const [shodanError, setShodanError] = useState(null); useEffect(() => { let cancelled = false; const host = (selectedEntity?.extra || {}) as Record; const ip = selectedEntity?.type === 'shodan_host' ? String(host.ip || '').trim() : ''; if (!ip) { setShodanDetail(null); setShodanLoading(false); setShodanError(null); return; } if (Array.isArray(host.services) && host.services.length > 0) { setShodanDetail(host as unknown as ShodanHost); setShodanLoading(false); setShodanError(null); return; } setShodanLoading(true); setShodanError(null); lookupShodanHost(ip) .then((resp) => { if (cancelled) return; setShodanDetail(resp.host); }) .catch((err) => { if (cancelled) return; setShodanError(err instanceof Error ? err.message : 'Failed to load host detail'); }) .finally(() => { if (cancelled) return; setShodanLoading(false); }); return () => { cancelled = true; }; }, [selectedEntity]); // Region Dossier (right-click intelligence) if (selectedEntity?.type === 'region_dossier') { const d = regionDossier; return (

REGION DOSSIER

{selectedEntity.extra ? `${selectedEntity.extra.lat.toFixed(3)}, ${selectedEntity.extra.lng.toFixed(3)}` : ''}
{regionDossierLoading ? (
COMPILING INTELLIGENCE...
) : d && !d.error ? (
{d.warning && (
{d.warning}
)} {/* COUNTRY */}
COUNTRY LEVEL {d.country?.flag_emoji || ''}
COUNTRY{d.country?.name}
{d.country?.official_name && d.country.official_name !== d.country.name && (
OFFICIAL{d.country.official_name}
)}
LEADER{d.country?.leader}
GOVERNMENT{d.country?.government_type}
POPULATION{d.country?.population?.toLocaleString()}
CAPITAL{d.country?.capital}
LANGUAGES{d.country?.languages?.join(', ')}
{d.country?.currencies?.length > 0 && (
CURRENCY{d.country.currencies.join(', ')}
)}
REGION{d.country?.subregion || d.country?.region}
{d.country?.area_km2 > 0 && (
AREA{d.country.area_km2.toLocaleString()} km²
)} {/* LOCAL */} {(d.local?.name || d.local?.state) && ( <>
LOCAL LEVEL
{d.local.name &&
LOCALITY{d.local.name}
} {d.local.state &&
STATE/PROVINCE{d.local.state}
} {d.local.description &&
TYPE{d.local.description}
} {d.local.summary && (
>_ INTEL: {d.local.summary.length > 500 ? d.local.summary.substring(0, 500) + '...' : d.local.summary}
)} )} {/* Sentinel-2 imagery now shown as map popup — see MaplibreViewer */}
) : d?.error ? (
{d.error}
) : (
INTEL UNAVAILABLE
)}
); } if (selectedEntity?.type === 'shodan_host') { const baseHost = (selectedEntity.extra || {}) as Record; const host = (shodanDetail || baseHost) as Record; const portLabel = host.port ? `${host.ip}:${host.port}` : (host.ip || selectedEntity.name || 'UNKNOWN HOST'); return (

SHODAN HOST DOSSIER

{portLabel}
ATTRIBUTION
Data from Shodan · Operator-supplied API key · Local session overlay
{shodanLoading && (
Loading full host detail...
)} {shodanError && (
{shodanError}
)}
HOST
IP{host.ip || 'UNKNOWN'}
PORT{host.port || host.ports?.[0] || 'UNKNOWN'}
ORG{host.org || 'UNKNOWN'}
ASN{host.asn || 'UNKNOWN'}
ISP{host.isp || 'UNKNOWN'}
OS{host.os || 'UNKNOWN'}
PRODUCT{host.product || host.transport || 'UNKNOWN'}
SEEN{host.timestamp || host.services?.[0]?.timestamp || 'UNKNOWN'}
LOCATION{host.location_label || host.country_name || 'UNMAPPED'}
COORDS{host.lat != null && host.lng != null ? `${Number(host.lat).toFixed(4)}, ${Number(host.lng).toFixed(4)}` : 'UNMAPPED'}
HOSTNAMES{host.hostnames?.length ? host.hostnames.join(', ') : 'NONE'}
DOMAINS{host.domains?.length ? host.domains.join(', ') : 'NONE'}
TAGS{host.tags?.length ? host.tags.join(', ') : 'NONE'}
VULNS{host.vulns?.length ? host.vulns.join(', ') : 'NONE'}
{Array.isArray(host.ports) && host.ports.length > 0 && (
ALL PORTS{host.ports.slice(0, 20).join(', ')}
)} {Array.isArray(host.services) && host.services.length > 0 && ( <>
SERVICES
{host.services.slice(0, 8).map((service: Record, idx: number) => (
{service.port || '?'} / {service.transport || 'tcp'} {service.timestamp || 'UNKNOWN'}
{service.product || 'Unknown service'}
{service.tags?.length > 0 && (
TAGS: {service.tags.join(', ')}
)} {service.banner_excerpt && (
{service.banner_excerpt}
)}
))}
)} {host.data_snippet && (
>_ BANNER: {host.data_snippet}
)}
); } if (selectedEntity?.type === 'tracked_flight') { const flight = data?.tracked_flights?.find((f: any) => f.icao24 === selectedEntity.id); if (flight) { const flightForEmissions = withSelectedTrail(flight); const callsign = flight.callsign || "UNKNOWN"; const alertColorMap: Record = { '#ff1493': 'text-[#ff1493]', pink: 'text-[#ff1493]', red: 'text-red-400', yellow: 'text-yellow-400', blue: 'text-blue-400', orange: 'text-orange-400', '#32cd32': 'text-[#32cd32]', purple: 'text-purple-400', black: 'text-gray-400', white: 'text-white' }; const alertBorderMap: Record = { '#ff1493': 'border-[#ff1493]/30', pink: 'border-[#ff1493]/30', red: 'border-red-500/30', yellow: 'border-yellow-500/30', blue: 'border-blue-500/30', orange: 'border-orange-500/30', '#32cd32': 'border-[#32cd32]/30', purple: 'border-purple-500/30', black: 'border-gray-500/30', white: 'border-[var(--border-primary)]/30' }; const alertBgMap: Record = { '#ff1493': 'bg-[#ff1493]/10', pink: 'bg-[#ff1493]/10', red: 'bg-red-950/40', yellow: 'bg-yellow-950/40', blue: 'bg-blue-950/40', orange: 'bg-orange-950/40', '#32cd32': 'bg-lime-950/40', purple: 'bg-purple-950/40', black: 'bg-gray-900/40', white: 'bg-[var(--bg-panel)]' }; const ac = flight.alert_color || 'white'; const headerColor = alertColorMap[ac] || 'text-white'; const borderColor = alertBorderMap[ac] || 'border-[var(--border-primary)]/30'; const bgColor = alertBgMap[ac] || 'bg-[var(--bg-panel)]'; const shadowColor = (ac === 'pink' || ac === '#ff1493') ? 'rgba(255,20,147,0.4)' : ac === 'red' ? 'rgba(255,32,32,0.2)' : ac === 'yellow' ? 'rgba(255,255,0,0.2)' : ac === 'blue' ? 'rgba(59,130,246,0.2)' : ac === 'orange' ? 'rgba(255,140,0,0.3)' : ac === '#32cd32' ? 'rgba(50,205,50,0.2)' : ac === 'purple' ? 'rgba(155,89,182,0.2)' : 'rgba(255,255,255,0.1)'; return (

⚠ TRACKED AIRCRAFT — {flight.alert_category || "ALERT"}

TRK: {callsign}
OPERATOR {flight.alert_operator && flight.alert_operator !== "UNKNOWN" ? (() => { const wikiSlug = flight.alert_wiki || flight.alert_operator.replace(/\s*\(.*?\)\s*/g, '').trim().replace(/ /g, '_'); const wikiHref = `https://en.wikipedia.org/wiki/${encodeURIComponent(wikiSlug)}`; const operatorHref = flight.alert_link || wikiHref; return ( {flight.alert_operator} ); })() : ( UNKNOWN )}
{/* Primary image: military → aircraft model photo; everything else → operator/company photo */} {(() => { // Categories where the aircraft model should be the primary image const MILITARY_CATEGORIES = new Set([ 'USAF', 'RAF', 'GAF', 'Royal Navy Fleet Air Arm', 'Army Air Corps', 'Other Air Forces', 'Other Navies', 'United States Navy', 'United States Marine Corps', 'Special Forces', 'Gunship', 'Nuclear', 'UAV', 'Coastguard', 'Da Comrade', 'Hired Gun', 'Oxcart', 'Zoomies', 'Toy Soldiers', 'Police Forces', 'Flying Doctors', 'Aerial Firefighter', ]); const cat = flight.alert_category || ''; const isMilitary = MILITARY_CATEGORIES.has(cat); // Resolve aircraft model wiki info (for link or image depending on context) let acWikiTitle = flight.model ? AIRCRAFT_WIKI[flight.model] : undefined; if (!acWikiTitle && flight.alert_type && flight.alert_type !== "UNKNOWN") { acWikiTitle = resolveAcTypeWiki(flight.alert_type) || flight.alert_type; } const acModelWikiUrl = acWikiTitle ? `https://en.wikipedia.org/wiki/${acWikiTitle.replace(/ /g, '_')}` : null; // Resolve operator wiki info const operatorSlug = flight.alert_wiki || (flight.alert_operator && flight.alert_operator !== "UNKNOWN" ? flight.alert_operator.replace(/\s*\(.*?\)\s*/g, '').trim().replace(/ /g, '_') : null); const operatorWikiUrl = operatorSlug ? `https://en.wikipedia.org/wiki/${encodeURIComponent(operatorSlug)}` : null; const accentClass = ac === 'pink' ? 'hover:border-pink-500/50' : ac === 'red' ? 'hover:border-red-500/50' : 'hover:border-cyan-500/50'; if (isMilitary) { // MILITARY: aircraft model photo as primary image, operator as text link above return acModelWikiUrl ? (
) : null; } // NON-MILITARY (tracked jets, celebs, companies, airlines): // Operator/company photo as primary image // Aircraft model as a text link below return ( <> {operatorWikiUrl && (
)} {acModelWikiUrl && ( )} ); })()}
CATEGORY {flight.alert_category || "N/A"}
AIRCRAFT {(() => { const acLabel = flight.alert_type || flight.model || "UNKNOWN"; let acLink = flight.model ? AIRCRAFT_WIKI[flight.model] : undefined; if (!acLink && flight.alert_type && flight.alert_type !== "UNKNOWN") { acLink = resolveAcTypeWiki(flight.alert_type) || undefined; } const acHref = acLink ? `https://en.wikipedia.org/wiki/${acLink.replace(/ /g, '_')}` : null; return acHref ? ( {acLabel} ) : ( {acLabel} ); })()}
REGISTRATION {flight.registration || "N/A"}
{flight.alert_tags && (
INTEL TAGS {flight.alert_tags}
)}
ALTITUDE {(Math.round((flight.alt || 0) / 0.3048)).toLocaleString()} ft
GROUND SPEED {flight.speed_knots ? `${flight.speed_knots} kts` : 'N/A'}
HEADING {Math.round(flight.heading || 0)}°
{flight.squawk && (
SQUAWK {flight.squawk}{flight.squawk === '7700' ? ' ⚠ EMERGENCY' : flight.squawk === '7600' ? ' COMMS LOST' : ''}
)} {flight.alert_link && ( )} {flight.alert_socials && (flight.alert_socials.twitter || flight.alert_socials.instagram) && (
SOCIALS
{flight.alert_socials.twitter && ( @{flight.alert_socials.twitter} )} {flight.alert_socials.instagram && ( @{flight.alert_socials.instagram} )}
)} {flight.icao24 && (
FLIGHT RECORD View History Log
)}
) } } if (selectedEntity?.type === 'flight' || selectedEntity?.type === 'military_flight' || selectedEntity?.type === 'private_flight' || selectedEntity?.type === 'private_jet') { const flightsList = selectedEntity.type === 'flight' ? data?.commercial_flights : selectedEntity.type === 'private_flight' ? data?.private_flights : selectedEntity.type === 'private_jet' ? data?.private_jets : data?.military_flights; const flight = flightsList?.find((f: any) => f.icao24 === selectedEntity.id); if (flight) { const flightForEmissions = withSelectedTrail(flight); const callsign = flight.callsign || "UNKNOWN"; let airline = "UNKNOWN"; const isPrivateFlight = selectedEntity.type === 'private_flight' || selectedEntity.type === 'private_jet'; const aircraftWikiTitle = resolveAircraftWikiTitle(flight.model); const aircraftModelWikiUrl = aircraftWikiTitle ? `https://en.wikipedia.org/wiki/${aircraftWikiTitle.replace(/ /g, '_')}` : null; const showModelWiki = isPrivateFlight || selectedEntity.type === 'military_flight'; if (selectedEntity.type === 'military_flight') { const mil = flight as import('@/types/dashboard').MilitaryFlight; const milCountry = mil.country; airline = mil.force ? `${milCountry} ${mil.force}`.trim() : (milCountry && milCountry !== 'Military Asset' && milCountry !== 'Unknown' ? milCountry : "MILITARY ASSET"); } else if (selectedEntity.type === 'private_jet') { airline = "PRIVATE JET"; } else if (selectedEntity.type === 'private_flight') { airline = "PRIVATE / GA"; } else if ('airline_code' in flight && flight.airline_code) { // Use the airline code resolved from adsb.lol routeset API const codeMap: Record = { "UAL": "United Airlines", "DAL": "Delta Air Lines", "SWA": "Southwest Airlines", "AAL": "American Airlines", "BAW": "British Airways", "AFR": "Air France", "JBU": "JetBlue Airways", "NKS": "Spirit Airlines", "THY": "Turkish Airlines", "UAE": "Emirates", "QFA": "Qantas", "ACA": "Air Canada", "FFT": "Frontier Airlines", "WJA": "WestJet", "RPA": "Republic Airways", "SKW": "SkyWest Airlines", "ENY": "Envoy Air", "ASA": "Alaska Airlines", "HAL": "Hawaiian Airlines", "DLH": "Lufthansa", "KLM": "KLM", "EZY": "EasyJet", "RYR": "Ryanair", "SIA": "Singapore Airlines", "CPA": "Cathay Pacific", "ANA": "All Nippon Airways", "JAL": "Japan Airlines", "QTR": "Qatar Airways", "ETD": "Etihad Airways", "SAS": "SAS Scandinavian" }; airline = codeMap[flight.airline_code] || flight.airline_code; } else if (callsign !== "UNKNOWN") { airline = "COMMERCIAL FLIGHT"; } return (

{selectedEntity.type === 'military_flight' ? "MILITARY BOGEY INTERCEPT" : selectedEntity.type === 'private_flight' ? "PRIVATE TRANSPONDER" : selectedEntity.type === 'private_jet' ? "PRIVATE JET TRANSPONDER" : "COMMERCIAL TRANSPONDER"}

TRK: {callsign}
OPERATOR {!isPrivateFlight && selectedEntity.type !== 'military_flight' && airline && airline !== 'COMMERCIAL FLIGHT' && airline !== 'UNKNOWN' ? ( {airline} ) : ( {airline} )}
{/* Commercial: Airline company Wikipedia image */} {!isPrivateFlight && selectedEntity.type !== 'military_flight' && airline && airline !== 'COMMERCIAL FLIGHT' && airline !== 'UNKNOWN' && (
)}
REGISTRATION {flight.registration || "N/A"}
AIRCRAFT MODEL {showModelWiki && aircraftModelWikiUrl ? ( {aircraftWikiTitle || flight.model} ) : ( {flight.model || "UNKNOWN"} )}
{/* Military: Aircraft model Wikipedia image (gold accent) */} {selectedEntity.type === 'military_flight' && (() => { // Resolve model to Wikipedia article — ICAO code first, then ac_type regex const milAcType = (flight as Record).alert_type as string | undefined; const milWikiTitle = (flight.model ? AIRCRAFT_WIKI[flight.model] : undefined) || (milAcType ? resolveAcTypeWiki(milAcType) : null) || (flight.model ? resolveAcTypeWiki(flight.model) : null); const milModelUrl = milWikiTitle ? `https://en.wikipedia.org/wiki/${milWikiTitle.replace(/ /g, '_')}` : null; if (milModelUrl) { return (
); } // Fall back to cached thumbnail if available if (aircraftImgUrl || aircraftImgLoading) { return (
{aircraftImgLoading && (
)} {aircraftImgUrl && ( {AIRCRAFT_WIKI[flight.model] )} {aircraftWikiUrl && ( 📖 {AIRCRAFT_WIKI[flight.model] || flight.model} — Wikipedia → )}
); } return null; })()} {/* Private/GA: aircraft model Wikipedia image as the primary visual */} {isPrivateFlight && aircraftModelWikiUrl && (
)} {/* Non-military: Aircraft model photo (secondary, below airline image) */} {!isPrivateFlight && selectedEntity.type !== 'military_flight' && selectedEntity.type !== 'flight' && (aircraftImgUrl || aircraftImgLoading || aircraftWikiUrl) && (
{aircraftImgLoading && (
)} {aircraftImgUrl && ( {AIRCRAFT_WIKI[flight.model] )} {aircraftWikiUrl && ( 📖 {AIRCRAFT_WIKI[flight.model] || flight.model} — Wikipedia → )}
)}
ALTITUDE {(Math.round((flight.alt || 0) / 0.3048)).toLocaleString()} ft
GROUND SPEED {flight.speed_knots ? `${flight.speed_knots} kts` : 'N/A'}
HEADING {Math.round(flight.heading || 0)}°
{flight.squawk && (
SQUAWK {flight.squawk}{flight.squawk === '7700' ? ' ⚠ EMERGENCY' : flight.squawk === '7600' ? ' COMMS LOST' : ''}
)}
ROUTE {flight.origin_name !== "UNKNOWN" ? `[${flight.origin_name}] → [${flight.dest_name}]` : "UNKNOWN"}
{flight.icao24 && (
FLIGHT RECORD View History Log
)}
) } } if (selectedEntity?.type === 'ship') { const ship = data?.ships?.find((s: any) => s.mmsi === selectedEntity.id); if (ship) { const vesselTypeLabels: Record = { 'tanker': 'TANKER', 'cargo': 'CARGO VESSEL', 'passenger': 'PASSENGER / CRUISE', 'yacht': 'PRIVATE YACHT', 'military_vessel': 'MILITARY VESSEL', 'carrier': 'AIRCRAFT CARRIER', }; const typeLabel = vesselTypeLabels[ship.type] || ship.type?.toUpperCase() || 'VESSEL'; const headerColorMap: Record = { 'tanker': 'text-red-400', 'cargo': 'text-red-400', 'passenger': 'text-white', 'yacht': 'text-blue-400', 'military_vessel': 'text-yellow-400', 'carrier': 'text-orange-400', }; const headerColor = headerColorMap[ship.type] || 'text-[var(--text-secondary)]'; const headerTitleMap: Record = { 'tanker': 'AIS TANKER INTERCEPT', 'cargo': 'AIS CARGO INTERCEPT', 'passenger': 'AIS PASSENGER VESSEL', 'yacht': 'AIS YACHT SIGNAL', 'military_vessel': 'AIS MILITARY VESSEL', 'carrier': 'CARRIER STRIKE GROUP', }; const headerTitle = headerTitleMap[ship.type] || 'AIS VESSEL SIGNAL'; return (

{headerTitle}

MMSI: {ship.mmsi || 'N/A'}
VESSEL NAME {ship.name || 'UNKNOWN'}
VESSEL TYPE {typeLabel}
FLAG STATE {ship.country || 'UNKNOWN'}
{ship.callsign && (
CALLSIGN {ship.callsign}
)} {(ship.imo ?? 0) > 0 && (
IMO NUMBER {ship.imo}
)}
DESTINATION {ship.destination || 'UNKNOWN'}
SPEED (SOG) {ship.type === 'carrier' ? 'UNKNOWN' : `${ship.sog || 0} kts`}
COURSE (COG) {ship.type === 'carrier' ? 'UNKNOWN' : `${Math.round(ship.cog || 0)}°`}
{ship.mmsi && ( )} {/* Ship/Carrier Wikipedia photo */} {(ship.wiki || VESSEL_TYPE_WIKI[ship.type]) && (
)}
) } } if (selectedEntity?.type === 'gdelt') { const gdeltItem = data?.gdelt?.find((g: any) => (g.properties?.name || String(g.geometry?.coordinates)) === selectedEntity.id); if (gdeltItem && gdeltItem.properties) { const props = gdeltItem.properties; return (

MILITARY INCIDENT CLUSTER

ID: {selectedEntity.id}
LOCATION {props.name || 'UNKNOWN REGION'}
ARTICLE COUNT {props.count || 1}
LATEST REPORTS:
{(() => { const urls: string[] = props._urls_list || []; const headlines: string[] = props._headlines_list || []; if (urls.length === 0) return No articles available.; return urls.map((url: string, idx: number) => { const headline = headlines[idx] || ''; let domain = ''; try { domain = new URL(url).hostname.replace('www.', ''); } catch { domain = ''; } return ( {headline || domain || 'View Article'} {headline && domain && ( {domain} )} ); }); })()}
) } } if (selectedEntity?.type === 'liveuamap') { const item = data?.liveuamap?.find((l: any) => String(l.id) === String(selectedEntity.id)); if (item) { return (

REGIONAL TACTICAL EVENT

ID: {item.id}
REGION {item.region || 'UNKNOWN'}
DESCRIPTION {item.title}
REPORTED TIME {item.timestamp || 'UNKNOWN'}
{item.link && ( )}
) } } if (selectedEntity?.type === 'news') { const item = data?.news?.[selectedEntity.id as number]; if (item) { return (

THREAT INTERCEPT

LVL: {item.risk_score}/10
SOURCE {item.source || 'UNKNOWN'}
HEADLINE {item.title}
{item.oracle_score != null && (
ORACLE SCORE = 7 ? 'text-red-400' : item.oracle_score >= 4 ? 'text-yellow-400' : 'text-green-400'}`}> {item.oracle_score}/10 [{item.oracle_score >= 7 ? 'CRITICAL' : item.oracle_score >= 4 ? 'ELEVATED' : 'ROUTINE'}]
)} {item.sentiment != null && (
SENTIMENT = 0.05 ? 'text-green-400' : 'text-gray-400'}`}> {item.sentiment > 0 ? '+' : ''}{item.sentiment.toFixed(2)} [{item.sentiment <= -0.05 ? 'NEGATIVE' : item.sentiment >= 0.05 ? 'POSITIVE' : 'NEUTRAL'}]
)} {item.prediction_odds && item.prediction_odds.consensus_pct != null && (
MARKET CORRELATION
{item.prediction_odds.title}
CONSENSUS: {item.prediction_odds.consensus_pct}% {item.prediction_odds.polymarket_pct != null && Polymarket {item.prediction_odds.polymarket_pct}%} {item.prediction_odds.kalshi_pct != null && Kalshi {item.prediction_odds.kalshi_pct}%}
)} {item.machine_assessment && (
>_ SYS.ANALYSIS: {item.machine_assessment}
)} {item.link && ( )}
) } } if (selectedEntity?.type === 'airport') { const apt = data?.airports?.find((a: any) => String(a.id) === String(selectedEntity.id)); if (apt) { return (

AERONAUTICAL HUB

IATA: {apt.iata}
FACILITY NAME {apt.name}
COORDINATES {apt.lat.toFixed(4)}, {apt.lng.toFixed(4)}
STATUS OPERATIONAL
) } } /* CCTV is now handled by the fullscreen OPTIC INTERCEPT modal in MaplibreViewer */ if (selectedEntity?.type === 'cctv') return null; return (
setIsMinimized(!isMinimized)} >
GLOBAL THREAT INTERCEPT
{isMinimized ? ( ) : ( )}
{!isMinimized && ( SYS.STATUS: MONITORING {data?.last_updated ? formatTime(data.last_updated) : "SCANNING"} )}
{/* Threat Level Indicator */} {!isMinimized && data?.threat_level && (
THREAT: {data.threat_level.level} {data.threat_level.score}/100
{/* Threat drivers removed — the level bar is sufficient */} )} {/* AI Intelligence Brief */} {!isMinimized && aiSummaryOpen && (
AI INTELLIGENCE BRIEF
{aiSummaryLoading ? (
COMPILING INTELLIGENCE BRIEF...
) : aiSummary ? (
{aiSummary.summary}
{aiSummary.top_stories?.length > 0 && ( )} {aiSummary.keywords?.length > 0 && (
TRENDING KEYWORDS
{aiSummary.keywords.slice(0, 10).map((kw: any, i: number) => ( {kw.word} ({kw.count}) ))}
)} {aiSummary.threat_distribution && (
THREAT BREAKDOWN
{Object.entries(aiSummary.threat_distribution).map(([level, count]) => ( {level}: {count as number} ))}
)}
) : (
No data available.
)}
)}
{/* DISINFORMATION INDEX — compact bar or major alert takeover */} {!isMinimized && fimi && fimi.narratives && fimi.narratives.length > 0 && ( {/* Compact bar */} {/* Expanded weekly report */} {fimiExpanded && ( {/* Threat Actor Bar */} {Object.keys(fimi.threat_actors).length > 0 && (
THREAT ACTORS
{(() => { const total = Object.values(fimi.threat_actors).reduce((a, b) => a + b, 0); const actorColors: Record = { 'Russia': 'bg-red-500', 'China': 'bg-amber-500', 'Iran': 'bg-purple-500', 'North Korea': 'bg-pink-500', 'Belarus': 'bg-orange-500', }; return Object.entries(fimi.threat_actors).map(([actor, count]) => (
)); })()}
{Object.entries(fimi.threat_actors).map(([actor, count]) => ( {actor} {count} ))}
)} {/* Top Narratives */}
LATEST NARRATIVES
{fimi.narratives.slice(0, 5).map((n, i) => ( {n.title} ))}
{/* Debunked Claims */} {fimi.claims.length > 0 && (
DEBUNKED CLAIMS ({fimi.claims.length})
{fimi.claims.slice(0, 5).map((c, i) => ( ✕ {c.title} ))}
)} {/* Target Countries */} {Object.keys(fimi.targets).length > 0 && (
TARGETS
{Object.entries(fimi.targets).slice(0, 10).map(([target, count]) => ( {target} ({count}) ))}
)} {/* Source attribution */}
Source: {fimi.source} {fimi.last_fetched ? new Date(fimi.last_fetched).toLocaleString([], { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }) : ''}
)} )} {!isMinimized && ( {news.map((item: any, idx: number) => { let bgClass, titleClass, badgeClass; const isBreaking = item.breaking === true; if (isBreaking) { bgClass = "bg-red-950/30 border-red-500/60"; titleClass = "text-red-300 font-bold"; badgeClass = "bg-red-500/20 text-red-300 border-red-400/50"; } else if (item.risk_score >= 9) { bgClass = "bg-red-950/20 border-red-500/30"; titleClass = "text-cyan-300 font-bold"; badgeClass = "bg-red-500/10 text-red-400 border-red-500/30"; } else if (item.risk_score >= 7) { bgClass = "bg-orange-950/20 border-orange-500/30"; titleClass = "text-cyan-300 font-bold"; badgeClass = "bg-orange-500/10 text-orange-400 border-orange-500/30"; } else if (item.risk_score >= 4) { bgClass = "bg-yellow-950/20 border-yellow-500/30"; titleClass = "text-cyan-300 font-bold"; badgeClass = "bg-yellow-500/10 text-yellow-500 border-yellow-500/30"; } else { bgClass = "bg-green-950/20 border-green-500/30"; titleClass = "text-cyan-300 font-medium"; badgeClass = "bg-green-500/10 text-green-400 border-green-500/30"; } const isExpanded = expandedIndexes.includes(idx); return ( { itemRefs.current[idx] = el; }} initial={idx < 15 ? { opacity: 0, x: -10 } : { opacity: 1, x: 0 }} animate={{ opacity: 1, x: 0 }} transition={idx < 15 ? { delay: 0.1 + (idx * 0.05) } : { duration: 0 }} className={`p-2 rounded-sm border-l-[2px] border-r border-t border-b ${bgClass} flex flex-col gap-1 relative group shrink-0`} >
{isBreaking && BREAKING} >_ {item.source} [{item.published ? formatTime(item.published) : ''}]
{item.machine_assessment && (
>_ SYS.ANALYSIS: {item.machine_assessment}
)} {item.prediction_odds && item.prediction_odds.consensus_pct != null && (
MKT {item.prediction_odds.title} {item.prediction_odds.consensus_pct}%
)}
{isBreaking ? 'BREAKING' : `LVL: ${item.risk_score}/10`} {item.sentiment != null && ( 0.1 ? 'bg-green-500/10 text-green-400 border-green-500/30' : 'bg-gray-500/10 text-gray-400 border-gray-500/30' }`}> {item.sentiment < -0.1 ? '▼' : item.sentiment > 0.1 ? '▲' : '—'}{' '} {item.sentiment > 0 ? '+' : ''}{item.sentiment.toFixed(2)} )} {item.oracle_score != null && ( = 7 ? 'bg-orange-500/10 text-orange-400 border-orange-500/30' : item.oracle_score >= 4 ? 'bg-yellow-500/10 text-yellow-400 border-yellow-500/30' : 'bg-cyan-500/10 text-cyan-400 border-cyan-500/30' }`}> ⚡ {item.oracle_score.toFixed(1)} )} {checkDisinfoLinked(item.title) && ( ⚠ DISINFORMATION-LINKED )} {item.cluster_count > 1 && ( )} {item.coords && ( {item.coords[0].toFixed(2)}, {item.coords[1].toFixed(2)} )}
{isExpanded && item.articles && item.articles.length > 1 && ( {item.articles.slice(1).map((subItem: any, subIdx: number) => (
>_ {subItem.source} = 9 ? 'text-red-400' : subItem.risk_score >= 7 ? 'text-orange-400' : subItem.risk_score >= 4 ? 'text-yellow-500' : 'text-green-400' }>LVL: {subItem.risk_score}/10
{subItem.title}
))}
)}
) })} {news.length === 0 && (
NO NEWS ITEMS LOADED
Feed ingest is empty or still warming up.
)}
)}
); } const NewsFeed = React.memo(NewsFeedInner); export default NewsFeed;