@zendir/ui 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/index.js +0 -137
  2. package/dist/index.js.map +1 -1
  3. package/dist/react/context/DisplaySettingsContext.js +0 -12
  4. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  5. package/dist/react/index.d.ts +0 -30
  6. package/dist/react/utils/index.js +0 -8
  7. package/dist/react/utils/index.js.map +1 -1
  8. package/dist/react.js +0 -137
  9. package/dist/react.js.map +1 -1
  10. package/package.json +2 -2
  11. package/dist/react/3d/EarthViewer.js +0 -836
  12. package/dist/react/3d/EarthViewer.js.map +0 -1
  13. package/dist/react/3d/SolarSystemViewer.js +0 -372
  14. package/dist/react/3d/SolarSystemViewer.js.map +0 -1
  15. package/dist/react/3d/ZenSpace3D.js +0 -1253
  16. package/dist/react/3d/ZenSpace3D.js.map +0 -1
  17. package/dist/react/3d/ZenSpace3DCesium.js +0 -186
  18. package/dist/react/3d/ZenSpace3DCesium.js.map +0 -1
  19. package/dist/react/3d/ZenSpace3DShaders.js +0 -94
  20. package/dist/react/3d/ZenSpace3DShaders.js.map +0 -1
  21. package/dist/react/3d/ZenSpace3DUtils.js +0 -213
  22. package/dist/react/3d/ZenSpace3DUtils.js.map +0 -1
  23. package/dist/react/3d/threeLoader.js +0 -18
  24. package/dist/react/3d/threeLoader.js.map +0 -1
  25. package/dist/react/cards/AccessCard.js +0 -410
  26. package/dist/react/cards/AccessCard.js.map +0 -1
  27. package/dist/react/cards/OrbitCard.js +0 -372
  28. package/dist/react/cards/OrbitCard.js.map +0 -1
  29. package/dist/react/cards/SpacecraftCard.js +0 -941
  30. package/dist/react/cards/SpacecraftCard.js.map +0 -1
  31. package/dist/react/cards/TelemetryCard.js +0 -742
  32. package/dist/react/cards/TelemetryCard.js.map +0 -1
  33. package/dist/react/cards/TelemetryStreamCard.js +0 -309
  34. package/dist/react/cards/TelemetryStreamCard.js.map +0 -1
  35. package/dist/react/charts/GroundTrackMap.js +0 -1123
  36. package/dist/react/charts/GroundTrackMap.js.map +0 -1
  37. package/dist/react/charts/GroundTrackMapLeaflet.js +0 -571
  38. package/dist/react/charts/GroundTrackMapLeaflet.js.map +0 -1
  39. package/dist/react/charts/groundTrackMapLeafletTiles.js +0 -11
  40. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +0 -1
  41. package/dist/react/charts/groundTrackMapLeafletUtils.js +0 -109
  42. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +0 -1
  43. package/dist/react/charts/unified/AstroChart.js +0 -1405
  44. package/dist/react/charts/unified/AstroChart.js.map +0 -1
  45. package/dist/react/charts/unified/PowerOverviewChart.js +0 -488
  46. package/dist/react/charts/unified/PowerOverviewChart.js.map +0 -1
  47. package/dist/react/charts/unified/domain.js +0 -3168
  48. package/dist/react/charts/unified/domain.js.map +0 -1
  49. package/dist/react/charts/unified/generators.js +0 -518
  50. package/dist/react/charts/unified/generators.js.map +0 -1
  51. package/dist/react/charts/unified/presets.js +0 -999
  52. package/dist/react/charts/unified/presets.js.map +0 -1
  53. package/dist/react/charts/unified/sync.js +0 -219
  54. package/dist/react/charts/unified/sync.js.map +0 -1
  55. package/dist/react/charts/unified/theme.js +0 -562
  56. package/dist/react/charts/unified/theme.js.map +0 -1
  57. package/dist/react/charts/unified/useChartStream.js +0 -226
  58. package/dist/react/charts/unified/useChartStream.js.map +0 -1
  59. package/dist/react/visualizations/EclipseTimerCard.js +0 -250
  60. package/dist/react/visualizations/EclipseTimerCard.js.map +0 -1
  61. package/dist/react/visualizations/LinkBudgetCard.js +0 -444
  62. package/dist/react/visualizations/LinkBudgetCard.js.map +0 -1
  63. package/dist/react/visualizations/NavBallCard.js +0 -243
  64. package/dist/react/visualizations/NavBallCard.js.map +0 -1
  65. package/dist/react/visualizations/PropulsionCard.js +0 -298
  66. package/dist/react/visualizations/PropulsionCard.js.map +0 -1
  67. package/dist/react/visualizations/SensorFootprintCard.js +0 -326
  68. package/dist/react/visualizations/SensorFootprintCard.js.map +0 -1
  69. package/dist/react/visualizations/ThermalHeatmapCard.js +0 -372
  70. package/dist/react/visualizations/ThermalHeatmapCard.js.map +0 -1
  71. package/dist/shaders/atmosphere.frag.js +0 -5
  72. package/dist/shaders/atmosphere.frag.js.map +0 -1
  73. package/dist/shaders/atmosphere.vert.js +0 -5
  74. package/dist/shaders/atmosphere.vert.js.map +0 -1
  75. package/dist/shaders/stars.frag.js +0 -5
  76. package/dist/shaders/stars.frag.js.map +0 -1
  77. package/dist/shaders/stars.vert.js +0 -5
  78. package/dist/shaders/stars.vert.js.map +0 -1
  79. package/dist/style.css +0 -143
@@ -1 +0,0 @@
1
- {"version":3,"file":"domain.js","sources":["../../../../src/react/charts/unified/domain.tsx"],"sourcesContent":["/**\n * @zendir/ui - Domain-Specific Chart Components\n * \n * Pre-configured charts for common space operations use cases.\n * These wrap AstroChart with domain-specific defaults and data transformations.\n */\n\nimport React, { forwardRef, memo, useMemo, useState, useEffect } from 'react';\nimport { AstroChart, AstroChartHandle } from './AstroChart';\nimport { useTheme } from '../../theme';\nimport type { \n SeriesData, \n PowerChartData, \n AttitudeChartData,\n ThermalChartData,\n LinkBudgetChartData,\n ContactWindowData,\n SpectrumDataPoint,\n ManeuverBudgetData,\n EclipseTimelineData,\n AnnotationOptions,\n ExportOptions,\n InfoTooltipOptions,\n CoverageGridData,\n} from './types';\n\n// echarts-gl: loaded once, state tracked so 3D components don't render before GL registers.\nlet _echartsGlReady = false;\nlet _echartsGlPromise: Promise<boolean> | null = null;\n\nfunction _loadEchartsGl(): Promise<boolean> {\n if (!_echartsGlPromise) {\n _echartsGlPromise = import('echarts-gl' as string) // cast suppresses \"no types\" warning\n .then(() => { _echartsGlReady = true; return true; })\n .catch((err) => {\n console.warn('[zendir-ui] echarts-gl failed to load — 3D charts will not render:', err);\n return false;\n });\n }\n return _echartsGlPromise;\n}\n\n// Start loading immediately when the module is imported (same as before, but tracked).\n_loadEchartsGl();\n\n/** Returns true once echarts-gl has registered its series types with ECharts. */\nfunction useEchartsGlReady(): boolean {\n const [ready, setReady] = useState(_echartsGlReady);\n useEffect(() => {\n if (!_echartsGlReady) {\n _loadEchartsGl().then((ok) => { if (ok) setReady(true); });\n }\n }, []);\n return ready;\n}\n\n// Common props shared by all domain charts\ninterface CommonChartProps {\n /** Export options */\n export?: ExportOptions;\n /** Info tooltip */\n infoTooltip?: InfoTooltipOptions;\n \n // === Header Status Icon System (inherited from AstroChartProps) ===\n \n /** \n * Icon name to display in chart header (uses AstroIcon)\n * Shows before the chart title\n */\n icon?: string;\n /** \n * Status for the header icon (shows as colored dot)\n * Uses AstroUXDS status colors\n */\n iconStatus?: 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';\n /** \n * Status message shown on hover over the status icon\n */\n statusMessage?: string;\n}\nimport { STATUS_COLORS, ASTRO_DATA_VIZ_COLORS, ZENDIR_BRAND_COLORS } from './theme';\n\n// Medium-soft status colors (readable, not too pale)\nconst SOFT_STATUS_COLORS = {\n normal: '#6ed86e',\n caution: '#ffd54f',\n serious: '#ffa726',\n critical: '#e57373',\n off: '#90a4ae',\n standby: '#4fc3f7',\n};\n\n// =============================================================================\n// Theme-Aware Tooltip & Legend Styles (for 3D charts)\n// =============================================================================\n\n/**\n * Get theme-aware tooltip style for 3D charts\n * 3D charts don't use the standard AstroChart theming\n */\nfunction useChartTooltipStyle() {\n const { tokens, mode } = useTheme();\n const isDark = mode === 'dark';\n \n return {\n backgroundColor: isDark ? 'rgba(15, 23, 42, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n borderColor: isDark ? 'rgba(100, 116, 139, 0.4)' : 'rgba(100, 116, 139, 0.3)',\n textStyle: {\n color: tokens.colors.text.primary,\n fontSize: 12,\n },\n };\n}\n\n/**\n * Get theme-aware legend style for 3D charts\n */\nfunction useChartLegendStyle() {\n const { tokens } = useTheme();\n return {\n textStyle: {\n color: tokens.colors.text.secondary,\n },\n };\n}\n\n/**\n * Get theme-aware visual map style for 3D charts\n * Includes hoverLink for highlighting hovered regions (Google/Apple level UX)\n */\nfunction useChartVisualMapStyle() {\n const { tokens } = useTheme();\n return {\n textStyle: {\n color: tokens.colors.text.tertiary,\n },\n // Allow drag selection on the visualMap bar\n calculable: true,\n // Enable hover linking - when hovering on visualMap, highlight only that range\n hoverLink: true,\n // Non-hovered regions get faded opacity (not invisible, just light)\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)', // Very light gray with low opacity\n opacity: 0.15, // Also reduce opacity for 3D elements\n },\n // Handle styles for the interactive bar (the draggable endpoints)\n handleStyle: {\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.accent.primary,\n },\n // Indicator style when hovering\n indicatorStyle: {\n borderColor: '#fff',\n },\n // Smooth transition when highlighting\n realtime: true,\n };\n}\n\n// =============================================================================\n// Power Chart\n// =============================================================================\n\nexport interface PowerChartProps extends CommonChartProps {\n /** Power data points (time in ms) */\n data: PowerChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Show eclipse shading */\n showEclipse?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const PowerChart = memo(forwardRef<AstroChartHandle, PowerChartProps>(\n function PowerChart({\n data = [],\n title = 'Power system',\n showLegend = true,\n width = '100%',\n height = 250,\n showEclipse = true,\n loading = false,\n enableZoom = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n // Icon/status props\n icon,\n iconStatus,\n statusMessage,\n }, ref) {\n // Transform data to series\n const { series, annotations } = useMemo(() => {\n const solarSeries: SeriesData = {\n id: 'solar',\n name: 'Solar',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.solarPower })),\n color: SOFT_STATUS_COLORS.standby, // Cyan for solar\n yAxisIndex: 0,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const batterySeries: SeriesData = {\n id: 'battery',\n name: 'Battery',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.batteryPercent })),\n color: SOFT_STATUS_COLORS.normal, // Green for battery\n yAxisIndex: 1,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const netPowerSeries: SeriesData = {\n id: 'netPower',\n name: 'Net',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.netPower })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n yAxisIndex: 0,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const consumptionSeries: SeriesData = {\n id: 'consumption',\n name: 'Load',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.consumption })),\n color: SOFT_STATUS_COLORS.critical, // Red for consumption\n yAxisIndex: 0,\n lineStyle: { type: 'dashed', width: 1.5 },\n smooth: true,\n symbol: { type: 'none' },\n };\n\n // Eclipse shading as mark areas\n const eclipseAreas: AnnotationOptions['markAreas'] = { data: [] };\n if (showEclipse) {\n let inEclipse = false;\n let eclipseStart = 0;\n\n data.forEach((d, _i) => {\n if (d.eclipse && !inEclipse) {\n inEclipse = true;\n eclipseStart = d.time;\n } else if (!d.eclipse && inEclipse) {\n inEclipse = false;\n eclipseAreas.data.push([\n { xAxis: eclipseStart, name: 'Eclipse' },\n { xAxis: d.time },\n ]);\n }\n });\n\n // Handle ongoing eclipse\n if (inEclipse && data.length > 0) {\n eclipseAreas.data.push([\n { xAxis: eclipseStart, name: 'Eclipse' },\n { xAxis: data[data.length - 1].time },\n ]);\n }\n\n eclipseAreas.itemStyle = {\n color: `${STATUS_COLORS.critical}15`,\n };\n }\n\n return {\n series: [solarSeries, batterySeries, netPowerSeries, consumptionSeries],\n annotations: showEclipse && eclipseAreas.data.length > 0 \n ? { markAreas: eclipseAreas } \n : undefined,\n };\n }, [data, showEclipse]);\n\n const tooltipConfig = useMemo(() => ({\n trigger: 'axis' as const,\n crosshair: 'x' as const,\n formatter: (params: unknown) => {\n const p = Array.isArray(params) ? params : [];\n if (p.length === 0) return '';\n const axisVal = (p[0] as { value?: unknown; axisValue?: unknown }).axisValue ?? (p[0] as { value?: unknown }).value;\n const time = typeof axisVal === 'number' ? axisVal : (axisVal instanceof Date ? axisVal.getTime() : Number(axisVal));\n const inEclipse = annotations?.markAreas?.data\n ? annotations.markAreas.data.some(\n (pair) => {\n const start = (pair[0].xAxis as number) ?? 0;\n const end = (pair[1].xAxis as number) ?? 0;\n return time >= start && time <= end;\n }\n )\n : false;\n const lines = p.map((item: { marker?: string; seriesName?: string; value?: unknown }) =>\n `${item.marker ?? ''} ${item.seriesName ?? ''}: ${item.value ?? ''}`\n );\n if (inEclipse) lines.push('◐ Eclipse — spacecraft in shadow; solar panels off');\n return lines.join('<br/>');\n },\n }), [annotations]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n icon={icon}\n iconStatus={iconStatus}\n statusMessage={statusMessage}\n xAxis={{ type: 'time', name: '' }}\n yAxis={[\n { \n name: 'Power [W]', \n position: 'left',\n min: 0,\n },\n { \n name: 'Battery [%]', \n position: 'right',\n min: 0,\n max: 100,\n },\n ]}\n tooltip={tooltipConfig}\n legend={{ show: showLegend, position: 'bottom' }}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n annotations={annotations}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Attitude Chart\n// =============================================================================\n\nexport interface AttitudeChartProps extends CommonChartProps {\n /** Attitude data points (time in ms) */\n data: AttitudeChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Show pointing error */\n showError?: boolean;\n /** Show angular velocity */\n showAngularVelocity?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const AttitudeChart = memo(forwardRef<AstroChartHandle, AttitudeChartProps>(\n function AttitudeChart({\n data = [],\n title = 'Attitude control',\n showLegend = true,\n width = '100%',\n height = 200,\n loading = false,\n enableZoom = false,\n showError = true,\n showAngularVelocity = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n // Icon/status props\n icon,\n iconStatus,\n statusMessage,\n }, ref) {\n // Transform data to series\n const series = useMemo(() => {\n const result: SeriesData[] = [\n {\n id: 'roll',\n name: 'Roll',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.roll })),\n color: SOFT_STATUS_COLORS.critical, // Red\n smooth: true,\n symbol: { type: 'none' },\n },\n {\n id: 'pitch',\n name: 'Pitch',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.pitch })),\n color: SOFT_STATUS_COLORS.normal, // Green\n smooth: true,\n symbol: { type: 'none' },\n },\n {\n id: 'yaw',\n name: 'Yaw',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.yaw })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n smooth: true,\n symbol: { type: 'none' },\n },\n ];\n\n if (showError && data.some(d => d.pointingError !== undefined)) {\n result.push({\n id: 'error',\n name: 'Error',\n type: 'line',\n data: data\n .filter(d => d.pointingError !== undefined)\n .map(d => ({ x: d.time, y: d.pointingError! })),\n color: SOFT_STATUS_COLORS.caution, // Yellow (status color)\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { width: 1.5 },\n });\n }\n\n if (showAngularVelocity && data.some(d => d.angularVelocity !== undefined)) {\n result.push({\n id: 'angVel',\n name: 'ω',\n type: 'line',\n data: data\n .filter(d => d.angularVelocity !== undefined)\n .map(d => ({ x: d.time, y: d.angularVelocity! })),\n color: ZENDIR_BRAND_COLORS.purple, // Zendir Purple\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { type: 'dashed', width: 1 },\n });\n }\n\n return result;\n }, [data, showError, showAngularVelocity]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n icon={icon}\n iconStatus={iconStatus}\n statusMessage={statusMessage}\n xAxis={{ type: 'time', name: '' }}\n yAxis={{ \n name: 'Attitude [deg]',\n // Center zero line\n }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: showLegend, position: 'bottom' }}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n annotations={{\n markLines: {\n data: [{ yAxis: 0, label: '', lineStyle: { type: 'solid', width: 1 } }],\n },\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Thermal Heatmap Chart\n// =============================================================================\n\nexport interface ThermalHeatmapChartProps extends CommonChartProps {\n /** Thermal data */\n data: ThermalChartData[];\n /** Zone names */\n zones: string[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Temperature range */\n range?: [number, number];\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ThermalHeatmapChart = memo(forwardRef<AstroChartHandle, ThermalHeatmapChartProps>(\n function ThermalHeatmapChart({\n data = [],\n zones = [],\n title = 'Thermal zones',\n width = '100%',\n height = 300,\n range = [-40, 80],\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n // Transform to heatmap format\n const { series, timeLabels } = useMemo(() => {\n const timeLabels = data.map(d => \n new Date(d.time).toLocaleTimeString([], { \n hour: '2-digit', \n minute: '2-digit',\n hour12: false,\n })\n );\n\n // Build heatmap data: [x, y, value]\n const heatmapData: [number, number, number][] = [];\n data.forEach((d, timeIdx) => {\n zones.forEach((zone, zoneIdx) => {\n const temp = d.zones[zone] ?? 0;\n heatmapData.push([timeIdx, zoneIdx, temp]);\n });\n });\n\n return {\n series: [{\n id: 'thermal',\n name: 'Temperature',\n type: 'heatmap' as const,\n data: heatmapData,\n }],\n timeLabels,\n };\n }, [data, zones]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'category' }}\n yAxis={{ type: 'category' }}\n tooltip={{ trigger: 'item' }}\n echartsOptions={{\n xAxis: { data: timeLabels },\n yAxis: { data: zones },\n visualMap: {\n min: range[0],\n max: range[1],\n calculable: true,\n orient: 'vertical',\n right: 10,\n top: 'center',\n // Enable hover linking - highlight only hovered range\n hoverLink: true,\n // Non-hovered regions get faded opacity\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)',\n opacity: 0.15,\n },\n // Thermal gradient (cold → hot) - Original high-contrast palette\n // Multi-hue gradient for clear temperature differentiation\n inRange: {\n color: [\n '#313695', // Deep blue (very cold)\n '#4575b4', // Blue\n '#74add1', // Light blue\n '#abd9e9', // Pale blue\n '#e0f3f8', // Very pale blue\n '#ffffbf', // Pale yellow (neutral)\n '#fee090', // Light orange\n '#fdae61', // Orange\n '#f46d43', // Red-orange\n '#d73027', // Red\n '#a50026', // Dark red (very hot)\n ],\n },\n },\n series: [{\n type: 'heatmap',\n data: series[0].data,\n label: { show: true, formatter: (p: { value?: unknown }) => Array.isArray(p.value) && typeof p.value[2] === 'number' ? `${p.value[2]}°` : '' },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Link Budget Chart\n// =============================================================================\n\nexport interface LinkBudgetChartProps extends CommonChartProps {\n /** Link budget data */\n data: LinkBudgetChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Margin threshold (dB) */\n marginThreshold?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const LinkBudgetChart = memo(forwardRef<AstroChartHandle, LinkBudgetChartProps>(\n function LinkBudgetChart({\n data = [],\n title = 'Link budget',\n showLegend = true,\n width = '100%',\n height = 200,\n marginThreshold = 3,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => [\n {\n id: 'signal',\n name: 'Signal',\n type: 'area',\n data: data.map(d => ({ x: d.time, y: d.signalStrength })),\n color: SOFT_STATUS_COLORS.normal,\n smooth: true,\n symbol: { type: 'none' },\n areaStyle: { opacity: 0.2 },\n },\n {\n id: 'noise',\n name: 'Noise floor',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.noiseFloor })),\n color: SOFT_STATUS_COLORS.critical,\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { type: 'dashed', width: 1 },\n },\n {\n id: 'margin',\n name: 'Margin',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.margin })),\n color: SOFT_STATUS_COLORS.standby,\n yAxisIndex: 1,\n smooth: true,\n symbol: { type: 'none' },\n },\n ], [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'time' }}\n yAxis={[\n { name: 'dBm', position: 'left' },\n { name: 'Margin [dB]', position: 'right', min: 0 },\n ]}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: showLegend, position: 'bottom' }}\n annotations={{\n markLines: {\n data: [\n { \n yAxis: marginThreshold, \n label: `Min margin (${marginThreshold} dB)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n },\n ],\n },\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Subsystem Status Gauge\n// =============================================================================\n\nexport interface SubsystemGaugeProps extends CommonChartProps {\n /** Current value (0-100) */\n value: number;\n /** Subsystem name */\n name: string;\n /** Unit label */\n unit?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Status thresholds */\n thresholds?: {\n caution?: number;\n critical?: number;\n };\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const SubsystemGauge = memo(forwardRef<AstroChartHandle, SubsystemGaugeProps>(\n function SubsystemGauge({\n value,\n name,\n unit = '%',\n width = 200,\n height = 200,\n thresholds = { caution: 70, critical: 90 },\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const clampedValue = Math.max(0, Math.min(100, value));\n const widthPx = typeof width === 'number' ? width : height;\n const gaugeSize = Math.max(110, Math.min(widthPx, height));\n const arcWidth = Math.max(8, Math.round(gaugeSize * 0.085));\n const valueFontSize = Math.max(18, Math.round(gaugeSize * 0.17));\n const titleFontSize = Math.max(10, Math.round(gaugeSize * 0.085));\n const compactGauge = gaugeSize < 150;\n const centerY = compactGauge ? '53%' : '55%';\n const detailY = compactGauge ? '10%' : '15%';\n const titleY = compactGauge ? '78%' : '84%';\n const unitSuffix = unit?.trim() ?? '';\n const longUnit = unitSuffix.length > 4;\n\n // Modern color based on value thresholds\n const getValueColor = () => {\n if (thresholds.critical && clampedValue >= thresholds.critical) return SOFT_STATUS_COLORS.critical;\n if (thresholds.caution && clampedValue >= thresholds.caution) return SOFT_STATUS_COLORS.caution;\n return SOFT_STATUS_COLORS.normal;\n };\n\n return (\n <AstroChart\n ref={ref}\n type=\"gauge\"\n series={[]} // Empty - we provide full gauge config via echartsOptions\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n series: [{\n type: 'gauge',\n min: 0,\n max: 100,\n startAngle: 200,\n endAngle: -20,\n radius: '90%',\n center: ['50%', centerY],\n // Modern minimal track\n axisLine: {\n lineStyle: {\n width: arcWidth,\n color: [[1, 'rgba(100, 116, 139, 0.15)']], // Subtle track\n },\n },\n // Hide all traditional gauge elements\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: { show: false },\n pointer: { show: false }, // No pointer for modern look\n // Progress arc with gradient\n progress: {\n show: true,\n width: arcWidth,\n roundCap: true,\n itemStyle: {\n color: {\n type: 'linear',\n x: 0, y: 0, x2: 1, y2: 0,\n colorStops: [\n { offset: 0, color: 'rgba(100, 200, 200, 0.6)' },\n { offset: 1, color: getValueColor() },\n ],\n },\n shadowColor: getValueColor(),\n shadowBlur: 8,\n },\n },\n // Clean title below\n title: {\n show: true,\n offsetCenter: [0, titleY],\n fontSize: titleFontSize,\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.7)',\n },\n // Modern centered value\n detail: {\n valueAnimation: true,\n formatter: (currentValue: number) => {\n const rounded = Math.round(currentValue);\n if (!unitSuffix) return `${rounded}`;\n if (longUnit) return `${rounded}\\n{unit|${unitSuffix}}`;\n return `${rounded}${unitSuffix}`;\n },\n fontSize: valueFontSize,\n fontWeight: 700, // AstroUXDS bold for gauge values\n lineHeight: Math.round(valueFontSize * 1.05),\n offsetCenter: [0, detailY],\n color: getValueColor(),\n rich: {\n unit: {\n color: 'rgba(255, 255, 255, 0.75)',\n fontSize: Math.max(10, Math.round(valueFontSize * 0.5)),\n fontWeight: 500,\n lineHeight: Math.round(valueFontSize * 0.8),\n },\n },\n },\n data: [{ value: clampedValue, name }],\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Orbit Visualization (Polar)\n// =============================================================================\n\nexport interface OrbitChartProps extends CommonChartProps {\n /** Orbit position data (angle in degrees, altitude in km) */\n data: { angle: number; altitude: number; label?: string }[];\n /** Chart title */\n title?: string;\n /** Reference altitude (nominal orbit) */\n referenceAltitude?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const OrbitChart = memo(forwardRef<AstroChartHandle, OrbitChartProps>(\n function OrbitChart({\n data = [],\n title = 'Polar Projection',\n referenceAltitude,\n width = 300,\n height = 300,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n title={title}\n series={[]} // Empty - we provide polar series via echartsOptions\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n polar: {\n radius: ['0%', '75%'],\n center: ['50%', '50%'],\n },\n angleAxis: {\n type: 'value',\n min: 0,\n max: 360,\n startAngle: 90,\n interval: 30,\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.15)',\n type: 'dashed',\n },\n },\n axisLabel: {\n fontSize: 9,\n color: 'rgba(255, 255, 255, 0.4)',\n formatter: (value: number) => value === 0 ? '' : `${value}°`,\n },\n },\n radiusAxis: {\n min: referenceAltitude ? referenceAltitude * 0.9 : 'dataMin',\n max: referenceAltitude ? referenceAltitude * 1.1 : 'dataMax',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.2)',\n type: 'dashed',\n },\n },\n },\n series: [{\n type: 'scatter',\n name: 'Position',\n coordinateSystem: 'polar',\n data: data.map(d => [d.altitude, d.angle]),\n symbolSize: 8,\n itemStyle: {\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n shadowColor: ZENDIR_BRAND_COLORS.electric,\n shadowBlur: 6,\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Contact Window / Pass Chart (Gantt-style) – AstroUXD compliant\n// =============================================================================\n\nexport interface ContactWindowChartProps extends CommonChartProps {\n /** Contact window data by ground station */\n data: ContactWindowData[];\n /** Chart title */\n title?: string;\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ContactWindowChart = memo(forwardRef<AstroChartHandle, ContactWindowChartProps>(\n function ContactWindowChart({\n data = [],\n title = 'Contact windows',\n timeRange,\n width = '100%',\n height = 200,\n loading = false,\n enableZoom = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n // Transform to Gantt-style data\n const { categories, ganttData } = useMemo(() => {\n const cats = data.map(d => d.name);\n const items: Array<{ name: string; value: [number, number, number, string?] }> = [];\n \n data.forEach((station, stationIdx) => {\n station.windows.forEach(w => {\n const _color = w.signalQuality === 'poor' ? STATUS_COLORS.critical \n : w.signalQuality === 'marginal' ? STATUS_COLORS.caution \n : STATUS_COLORS.normal;\n items.push({\n name: station.name,\n value: [stationIdx, w.start, w.end, w.label],\n });\n });\n });\n \n return { categories: cats, ganttData: items };\n }, [data]);\n\n const series: SeriesData[] = [{\n id: 'contacts',\n name: 'Contacts',\n type: 'bar',\n data: [],\n }];\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n echartsOptions={{\n tooltip: {\n trigger: 'item',\n formatter: ((params: unknown) => {\n const p = params as { value: [number, number, number, string?] };\n const [, start, end, label] = p.value;\n const duration = ((end - start) / 60000).toFixed(1);\n return `${label || 'Contact'}<br/>Duration: ${duration} min`;\n }) as unknown as string,\n },\n grid: { left: 100, right: 20, top: 40, bottom: 40 },\n xAxis: {\n type: 'time',\n min: timeRange?.[0],\n max: timeRange?.[1],\n },\n yAxis: {\n type: 'category',\n data: categories,\n },\n series: [{\n type: 'custom',\n renderItem: ((_params: unknown, api: unknown) => {\n const a = api as { value: (idx: number) => number; coord: (val: [number, number]) => number[]; size: (val: [number, number]) => number[] };\n const catIdx = a.value(0);\n const start = a.coord([a.value(1), catIdx]);\n const end = a.coord([a.value(2), catIdx]);\n const height = a.size([0, 1])[1] * 0.6;\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - height / 2,\n width: end[0] - start[0],\n height,\n },\n style: {\n fill: STATUS_COLORS.normal,\n stroke: STATUS_COLORS.standby,\n },\n };\n }) as unknown as undefined,\n encode: { x: [1, 2], y: 0 },\n data: ganttData,\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Spectrum / Waterfall Chart – Space TT&C domain\n// =============================================================================\n\nexport interface SpectrumChartProps extends CommonChartProps {\n /** Spectrum data points */\n data: SpectrumDataPoint[];\n /** Chart title */\n title?: string;\n /** Frequency range [min, max] */\n frequencyRange?: [number, number];\n /** Power range [min, max] dBm */\n powerRange?: [number, number];\n /** Noise floor level */\n noiseFloor?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const SpectrumChart = memo(forwardRef<AstroChartHandle, SpectrumChartProps>(\n function SpectrumChart({\n data = [],\n title = 'RF spectrum',\n frequencyRange,\n powerRange,\n noiseFloor,\n width = '100%',\n height = 200,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => [{\n id: 'spectrum',\n name: 'Power',\n type: 'area',\n data: data.map(d => ({ x: d.frequency, y: d.power })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n smooth: false,\n areaStyle: { opacity: 0.3 },\n symbol: { type: 'none' },\n }], [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"area\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ \n type: 'value', \n name: 'Frequency',\n min: frequencyRange?.[0],\n max: frequencyRange?.[1],\n }}\n yAxis={{ \n type: 'value', \n name: 'dBm',\n min: powerRange?.[0],\n max: powerRange?.[1],\n }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n annotations={noiseFloor !== undefined ? {\n markLines: {\n data: [{\n yAxis: noiseFloor,\n label: `Noise floor (${noiseFloor} dBm)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n }],\n },\n } : undefined}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Maneuver / Delta-V Budget Chart – Propulsion domain\n// =============================================================================\n\nexport interface ManeuverBudgetChartProps extends CommonChartProps {\n /** Maneuver budget data */\n data: ManeuverBudgetData[];\n /** Chart title */\n title?: string;\n /** Total delta-V budget (for percentage) */\n totalBudget?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ManeuverBudgetChart = memo(forwardRef<AstroChartHandle, ManeuverBudgetChartProps>(\n function ManeuverBudgetChart({\n data = [],\n title = 'Delta-V budget',\n totalBudget,\n width = '100%',\n height = 200,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => {\n // Status colors for executed/planned, Zendir colors for remaining/margin\n const typeColors: Record<string, string> = {\n executed: STATUS_COLORS.normal, // Green (completed)\n planned: STATUS_COLORS.standby, // Cyan (scheduled)\n remaining: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n margin: ZENDIR_BRAND_COLORS.purple, // Zendir Purple\n };\n \n return [{\n id: 'deltaV',\n name: 'Delta-V',\n type: 'bar',\n data: data.map(d => ({ \n x: d.name, \n y: d.deltaV,\n meta: { type: d.type, color: typeColors[d.type] || STATUS_COLORS.standby },\n })),\n }];\n }, [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n subtitle={totalBudget ? `Total: ${totalBudget} m/s` : undefined}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'category' }}\n yAxis={{ type: 'value', name: 'm/s' }}\n tooltip={{ trigger: 'axis' }}\n echartsOptions={{\n series: [{\n type: 'bar',\n data: data.map(d => ({\n value: d.deltaV,\n name: d.name,\n itemStyle: {\n color: d.type === 'executed' ? STATUS_COLORS.normal\n : d.type === 'planned' ? STATUS_COLORS.standby\n : d.type === 'remaining' ? ZENDIR_BRAND_COLORS.electric\n : ZENDIR_BRAND_COLORS.purple,\n },\n })),\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Eclipse Timeline Chart – Orbital mechanics domain\n// =============================================================================\n\nexport interface EclipseTimelineChartProps extends CommonChartProps {\n /** Eclipse timeline data */\n data: EclipseTimelineData[];\n /** Chart title */\n title?: string;\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const EclipseTimelineChart = memo(forwardRef<AstroChartHandle, EclipseTimelineChartProps>(\n function EclipseTimelineChart({\n data = [],\n title = 'Eclipse timeline',\n timeRange,\n width = '100%',\n height = 100,\n loading = false,\n enableZoom = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series: SeriesData[] = [{\n id: 'eclipse',\n name: 'Eclipse',\n type: 'bar',\n data: [],\n }];\n\n // Eclipse type colors using Zendir-branded palette\n // Umbra/Penumbra use brand dark tones, sunlight uses status yellow\n const typeColors: Record<string, string> = {\n umbra: ZENDIR_BRAND_COLORS.prussianBlue, // Deep Zendir blue\n penumbra: ZENDIR_BRAND_COLORS.electricDark, // Dark electric\n sunlight: STATUS_COLORS.caution, // Standard yellow for sunlight\n };\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n echartsOptions={{\n tooltip: {\n trigger: 'item',\n formatter: ((params: unknown) => {\n const p = params as { data: { value: [number, number, string] } };\n const [start, end, eclipseType] = p.data.value;\n const duration = ((end - start) / 60000).toFixed(1);\n return `${eclipseType.charAt(0).toUpperCase() + eclipseType.slice(1)}<br/>Duration: ${duration} min`;\n }) as unknown as string,\n },\n grid: { left: 60, right: 20, top: 30, bottom: 30 },\n xAxis: {\n type: 'time',\n min: timeRange?.[0],\n max: timeRange?.[1],\n },\n yAxis: {\n type: 'category',\n data: [''],\n show: false,\n },\n series: [{\n type: 'custom',\n renderItem: ((_params: unknown, api: unknown) => {\n const a = api as { value: (idx: number) => number | string; coord: (val: [number, number]) => number[]; size: (val: [number, number]) => number[] };\n const start = a.coord([a.value(0) as number, 0]);\n const end = a.coord([a.value(1) as number, 0]);\n const eclipseType = a.value(2) as string;\n const h = 30;\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - h / 2,\n width: Math.max(end[0] - start[0], 2),\n height: h,\n },\n style: {\n fill: typeColors[eclipseType] || typeColors.sunlight,\n },\n };\n }) as unknown as undefined,\n encode: { x: [0, 1] },\n data: data.map(d => ({ value: [d.start, d.end, d.type] })),\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Rose Diagram (Polar Histogram for Directional Data)\n// =============================================================================\n\nexport interface RoseDiagramProps extends CommonChartProps {\n /** Directional data (angle in degrees, magnitude) */\n data: import('./types').RoseDiagramData[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Number of bins (sectors) */\n bins?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const RoseDiagram = memo(forwardRef<AstroChartHandle, RoseDiagramProps>(\n function RoseDiagram({\n data = [],\n title = 'Rose Diagram',\n width = '100%',\n height = 400,\n bins = 16,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const binData = useMemo(() => {\n // Create bins (e.g., 16 bins = 22.5° each)\n const binSize = 360 / bins;\n const binCounts = new Array(bins).fill(0);\n \n // Aggregate data into bins\n data.forEach(d => {\n const normalizedAngle = ((d.direction % 360) + 360) % 360;\n const binIndex = Math.floor(normalizedAngle / binSize);\n binCounts[binIndex] += d.magnitude;\n });\n \n // Create series data\n return binCounts.map((count, i) => ({\n name: `${(i * binSize).toFixed(0)}°`,\n value: count,\n }));\n }, [data, bins]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n polar: {\n radius: ['10%', '70%'],\n center: ['50%', '50%'],\n },\n angleAxis: {\n type: 'category',\n data: binData.map(d => d.name),\n startAngle: 90,\n boundaryGap: true,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: 9,\n color: 'rgba(255, 255, 255, 0.5)',\n margin: 8,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.12)',\n type: 'dashed',\n },\n },\n },\n radiusAxis: {\n min: 0,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.15)',\n type: 'dashed',\n },\n },\n },\n tooltip: {\n trigger: 'item',\n backgroundColor: 'rgba(20, 30, 48, 0.95)',\n borderColor: 'rgba(100, 116, 139, 0.3)',\n textStyle: { color: 'rgba(255, 255, 255, 0.87)' }, // High contrast white\n },\n series: [{\n type: 'bar',\n data: binData.map(d => d.value),\n coordinateSystem: 'polar',\n roundCap: true,\n itemStyle: {\n // Zendir Electric → Purple gradient\n color: {\n type: 'linear',\n x: 0, y: 0, x2: 1, y2: 0,\n colorStops: [\n { offset: 0, color: ZENDIR_BRAND_COLORS.electric }, // #3E3CFF\n { offset: 1, color: ZENDIR_BRAND_COLORS.purple }, // #9D70FF\n ],\n },\n shadowColor: ZENDIR_BRAND_COLORS.purple,\n shadowBlur: 4,\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Heliocentric Orbit Plot (2D/3D with Mode Switching)\n// =============================================================================\n\n/** Color map for orbital bodies by type */\nconst ORBIT_COLOR_MAP: Record<string, string> = {\n // Human-made objects: Zendir Purple/Blue shades\n spacecraft: '#3E3CFF', // Zendir Electric\n satellite: '#9D70FF', // Zendir Purple\n station: '#3548C0', // Zendir Prussian Blue Light\n probe: '#1B2DA0', // Zendir Prussian Blue\n // Natural objects: Realistic colors\n planet: '#5BC0DE', // Teal-blue (default)\n // Debris/Asteroids: Brown/Gray shades\n asteroid: '#8B7355', // Warm brown\n debris: '#6B6B6B', // Gray\n // Comets: Brown with icy tones\n comet: '#5C4033', // Dark brown\n};\n\n/** Type labels for tooltips */\nconst ORBIT_TYPE_LABELS: Record<string, string> = {\n spacecraft: 'Spacecraft',\n satellite: 'Satellite',\n station: 'Space Station',\n probe: 'Deep Space Probe',\n planet: 'Planet',\n asteroid: 'Asteroid',\n debris: 'Debris',\n comet: 'Comet',\n};\n\nexport interface HeliocentricOrbitProps extends CommonChartProps {\n /** Orbital bodies/spacecraft data */\n data: import('./types').HeliocentricOrbitData[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Show grid */\n showGrid?: boolean;\n /** Enable zoom (scroll to zoom, drag to pan) */\n enableZoom?: boolean;\n /** Show labels on bodies */\n showLabels?: boolean;\n /** Visualization mode: 2D or 3D */\n mode?: '2d' | '3d';\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n /** Callback when body is clicked */\n onBodyClick?: (body: import('./types').HeliocentricOrbitData) => void;\n}\n\n/**\n * HeliocentricOrbitPlot - Interactive 2D/3D orbit visualization\n * \n * Features:\n * - 2D mode: Classic ecliptic plane view with X/Y axes\n * - 3D mode: Full 3D visualization with rotation/zoom (requires echarts-gl)\n * - Interactive hover on both bodies and orbit lines\n * - Zoom/pan controls\n * - Body/orbit highlighting on hover\n */\nexport const HeliocentricOrbitPlot = memo(forwardRef<AstroChartHandle, HeliocentricOrbitProps>(\n function HeliocentricOrbitPlot({\n data = [],\n title = 'Heliocentric Orbit',\n width = '100%',\n height = 500,\n showGrid = true,\n enableZoom = true,\n showLabels = true,\n mode = '2d',\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n onBodyClick: _onBodyClick,\n }, ref) {\n const { tokens, mode: themeMode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _legendStyle = useChartLegendStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const labelBg = themeMode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n // Store body data for tooltip lookup\n const bodyDataMap = useMemo(() => {\n const map = new Map<string, import('./types').HeliocentricOrbitData>();\n data.forEach(body => map.set(body.name, body));\n return map;\n }, [data]);\n\n // 2D Options\n const echarts2DOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((body, idx) => {\n const bodyColor = body.color || ORBIT_COLOR_MAP[body.type || 'spacecraft'] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const typeLabel = ORBIT_TYPE_LABELS[body.type || 'spacecraft'] || 'Object';\n \n // Add orbit path (interactive)\n if (body.orbitPath && body.orbitPath.length > 0) {\n // Calculate orbit stats for tooltip\n const orbitRadius = body.semiMajorAxis || Math.max(...body.orbitPath.map(p => Math.sqrt(p.x*p.x + p.y*p.y)));\n \n seriesArray.push({\n type: 'line',\n name: `${body.name} Orbit`,\n data: body.orbitPath.map(p => [p.x, p.y, body.name, typeLabel, orbitRadius, body.period, body.inclination]),\n lineStyle: {\n color: bodyColor,\n type: 'dashed',\n width: 1.5,\n opacity: 0.6,\n },\n symbol: 'none',\n silent: false,\n emphasis: {\n lineStyle: {\n width: 3.5,\n opacity: 1,\n shadowBlur: 8,\n shadowColor: bodyColor,\n },\n },\n z: 1,\n });\n }\n\n // Add body position (scatter point)\n seriesArray.push({\n type: 'scatter',\n name: body.name,\n symbolSize: body.size || (body.type === 'planet' ? 20 : 12),\n data: [[body.x, body.y, body.z || 0, body.type, typeLabel, body.description, body.semiMajorAxis, body.period]],\n itemStyle: {\n color: bodyColor,\n shadowColor: bodyColor,\n shadowBlur: body.type === 'planet' ? 10 : 5,\n },\n label: {\n show: showLabels,\n position: 'top',\n formatter: body.name,\n fontSize: 11,\n color: labelSecondary,\n textBorderColor: 'transparent',\n textBorderWidth: 0,\n },\n emphasis: {\n scale: 1.6,\n itemStyle: {\n shadowBlur: 20,\n },\n label: {\n show: true,\n fontWeight: 'bold',\n fontSize: 12,\n color: labelPrimary,\n },\n },\n z: 10,\n });\n });\n\n return {\n tooltip: {\n trigger: 'item' as const,\n ...tooltipStyle,\n borderWidth: 1,\n padding: [12, 16],\n formatter: ((params: any) => {\n const seriesName = params.seriesName || '';\n \n // Orbit line tooltip - show orbital parameters\n if (params.seriesType === 'line') {\n const [_x, _y, bodyName, typeLabel, orbitRadius, period, inclination] = params.value || [];\n const bodyInfo = bodyDataMap.get(bodyName);\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:6px;color:#3E3CFF\">${seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.5px\">${typeLabel || 'Orbital Path'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n \n if (orbitRadius) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Semi-major axis:</span><span style=\"font-family:monospace\">${orbitRadius.toFixed(3)} AU</span></div>`;\n }\n if (period) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Orbital period:</span><span style=\"font-family:monospace\">${period.toFixed(1)} days</span></div>`;\n }\n if (inclination !== undefined) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Inclination:</span><span style=\"font-family:monospace\">${inclination.toFixed(1)}°</span></div>`;\n }\n if (bodyInfo?.description) {\n html += `<div style=\"margin-top:6px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px\">${bodyInfo.description}</div>`;\n }\n html += `</div>`;\n return html;\n }\n \n // Scatter point (body) tooltip\n if (params.seriesType === 'scatter') {\n const [x, y, z, _bodyType, typeLabel, description, sma, period] = params.value;\n const distance = Math.sqrt(x*x + y*y + (z||0)*(z||0));\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.5px\">${typeLabel || 'Object'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">X:</span><span style=\"font-family:monospace\">${x.toFixed(3)} AU</span></div>`;\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Y:</span><span style=\"font-family:monospace\">${y.toFixed(3)} AU</span></div>`;\n if (z !== 0 && z !== undefined) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Z:</span><span style=\"font-family:monospace\">${z.toFixed(3)} AU</span></div>`;\n }\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px;border-top:1px solid rgba(100,116,139,0.2);padding-top:6px;margin-top:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Distance from Sun:</span><span style=\"font-family:monospace;color:#5BC0DE\">${distance.toFixed(3)} AU</span></div>`;\n if (sma) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Semi-major axis:</span><span style=\"font-family:monospace\">${sma.toFixed(3)} AU</span></div>`;\n }\n if (period) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Period:</span><span style=\"font-family:monospace\">${period.toFixed(1)} days</span></div>`;\n }\n if (description) {\n html += `<div style=\"margin-top:8px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px;max-width:200px\">${description}</div>`;\n }\n html += `</div>`;\n return html;\n }\n return seriesName;\n }) as unknown as string,\n },\n toolbox: {\n show: enableZoom,\n right: 20,\n top: 10,\n feature: {\n dataZoom: { show: true, title: { zoom: 'Zoom', back: 'Reset' } },\n restore: { show: true, title: 'Reset' },\n },\n iconStyle: { borderColor: 'rgba(255, 255, 255, 0.5)' },\n },\n dataZoom: enableZoom ? [\n { type: 'inside' as const, xAxisIndex: 0, filterMode: 'none' as const },\n { type: 'inside' as const, yAxisIndex: 0, filterMode: 'none' as const },\n ] : undefined,\n grid: {\n containLabel: true,\n left: 60,\n right: enableZoom ? 80 : 40,\n top: 60,\n bottom: 60,\n },\n xAxis: {\n type: 'value' as const,\n name: 'X (AU)',\n nameLocation: 'middle' as const,\n nameGap: 30,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n axisLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.3)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.5)' },\n },\n yAxis: {\n type: 'value' as const,\n name: 'Y (AU)',\n nameLocation: 'middle' as const,\n nameGap: 40,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n axisLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.3)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.5)' },\n },\n animation: true,\n animationDuration: 300,\n series: seriesArray,\n };\n }, [data, showGrid, enableZoom, showLabels, bodyDataMap, tooltipStyle]);\n\n // 3D Options (requires echarts-gl)\n const echarts3DOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((body, idx) => {\n const bodyColor = body.color || ORBIT_COLOR_MAP[body.type || 'spacecraft'] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const typeLabel = ORBIT_TYPE_LABELS[body.type || 'spacecraft'] || 'Object';\n \n // Orbit path as line3D series\n if (body.orbitPath && body.orbitPath.length > 0) {\n const orbitData = body.orbitPath.map(p => [p.x, p.y, p.z || 0]);\n // Close the orbit loop\n if (orbitData.length > 2) {\n orbitData.push(orbitData[0]);\n }\n seriesArray.push({\n type: 'line3D',\n name: `${body.name} Orbit`,\n coordinateSystem: 'cartesian3D',\n data: orbitData,\n lineStyle: {\n color: bodyColor,\n width: 1.5,\n opacity: 0.6,\n },\n silent: false,\n });\n }\n\n // Body position as scatter3D series\n seriesArray.push({\n type: 'scatter3D',\n name: body.name,\n coordinateSystem: 'cartesian3D',\n data: [{\n name: body.name,\n value: [body.x, body.y, body.z || 0],\n itemStyle: { color: bodyColor },\n typeLabel,\n description: body.description,\n }],\n symbolSize: body.size || (body.type === 'planet' ? 16 : 10),\n itemStyle: { color: bodyColor },\n label: {\n show: showLabels,\n formatter: body.name,\n textStyle: {\n color: labelPrimary,\n fontSize: 11,\n backgroundColor: labelBg,\n padding: [2, 4],\n borderRadius: 2,\n },\n },\n emphasis: {\n itemStyle: { opacity: 1 },\n label: { show: true },\n },\n });\n });\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const seriesName = params.seriesName || '';\n \n // Line series (orbit)\n if (params.seriesType === 'line3D') {\n return `<div style=\"font-weight:600\">${seriesName}</div>`;\n }\n \n // Scatter (body)\n const [x, y, z] = d.value || params.value || [0, 0, 0];\n const distance = Math.sqrt(x*x + y*y + z*z);\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase\">${d.typeLabel || 'Object'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n html += `<div>X: <span style=\"font-family:monospace\">${x.toFixed(3)}</span> AU</div>`;\n html += `<div>Y: <span style=\"font-family:monospace\">${y.toFixed(3)}</span> AU</div>`;\n html += `<div>Z: <span style=\"font-family:monospace\">${z.toFixed(3)}</span> AU</div>`;\n html += `<div style=\"margin-top:4px;color:#5BC0DE\">Distance: <span style=\"font-family:monospace\">${distance.toFixed(3)}</span> AU</div>`;\n if (d.description) {\n html += `<div style=\"margin-top:6px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px\">${d.description}</div>`;\n }\n html += `</div>`;\n return html;\n }) as unknown as string,\n },\n grid3D: {\n boxWidth: 200,\n boxHeight: 60,\n boxDepth: 200,\n viewControl: {\n autoRotate: false,\n autoRotateAfterStill: 5,\n autoRotateSpeed: 5,\n distance: 280,\n alpha: 20,\n beta: 40,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n panSensitivity: 1,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: true, intensity: 0.05 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: 'X (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: 'Y (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: 'Z (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, showLabels]);\n\n // Cast to any for 3D options since echarts-gl types extend base ECharts\n const echartsOptions = mode === '3d' ? echarts3DOptions as any : echarts2DOptions;\n\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Scatter3D Chart - Constellation Visualization, Debris Fields\n// =============================================================================\n\nexport interface Scatter3DChartProps extends CommonChartProps {\n /** 3D scatter data series */\n data: import('./types').Scatter3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Show grid/axis */\n showGrid?: boolean;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Scatter3DChart - 3D scatter plot for constellation analysis, debris fields\n * \n * Perfect for visualizing:\n * - Satellite constellation distributions\n * - Space debris fields\n * - Multi-dimensional parameter spaces\n * - Position clustering analysis\n */\nexport const Scatter3DChart = memo(forwardRef<AstroChartHandle, Scatter3DChartProps>(\n function Scatter3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n showGrid = true,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray = data.map((series, idx) => ({\n type: 'scatter3D' as const,\n name: series.name,\n data: series.data.map(p => ({\n name: p.label || series.name,\n value: [p.x, p.y, p.z],\n itemStyle: p.color ? { color: p.color } : undefined,\n meta: p.meta,\n })),\n symbolSize: typeof series.symbolSize === 'number' ? series.symbolSize : 12,\n itemStyle: {\n color: series.color || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length],\n },\n label: {\n show: false,\n },\n emphasis: {\n itemStyle: { opacity: 1 },\n label: { show: true, formatter: (params: any) => params.data?.name || '' },\n },\n }));\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const [x, y, z] = d.value || [0, 0, 0];\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || params.seriesName}</div>`;\n html += `<div>${xAxisLabel}: <span style=\"font-family:monospace\">${x.toFixed(2)}</span></div>`;\n html += `<div>${yAxisLabel}: <span style=\"font-family:monospace\">${y.toFixed(2)}</span></div>`;\n html += `<div>${zAxisLabel}: <span style=\"font-family:monospace\">${z.toFixed(2)}</span></div>`;\n return html;\n }) as unknown as string,\n },\n legend: {\n show: data.length > 1,\n top: 10,\n ...legendStyle,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 100,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 5,\n distance: 200,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: true, intensity: 0.05 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, xAxisLabel, yAxisLabel, zAxisLabel, autoRotate, tooltipStyle, legendStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Bar3D Chart - Telemetry Comparisons, Multi-Satellite Analysis\n// =============================================================================\n\nexport interface Bar3DChartProps extends CommonChartProps {\n /** 3D bar data */\n data: import('./types').Bar3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** X-axis categories (or auto-derived) */\n xCategories?: string[];\n /** Y-axis categories (or auto-derived) */\n yCategories?: string[];\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Bar shading style */\n shading?: 'color' | 'lambert' | 'realistic';\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Bar3DChart - 3D bar chart for multi-dimensional comparisons\n * \n * Perfect for visualizing:\n * - Telemetry comparisons across satellites\n * - Parameter variations over time\n * - Multi-subsystem status comparisons\n * - Resource allocation matrices\n */\nexport const Bar3DChart = memo(forwardRef<AstroChartHandle, Bar3DChartProps>(\n function Bar3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n xCategories = [],\n yCategories = [],\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Value',\n shading = 'lambert',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const visualMapStyle = useChartVisualMapStyle();\n const { tokens } = useTheme();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n \n // Derive categories if not provided\n const derivedXCategories = xCategories || [...new Set(data.map(d => String(d.x)))];\n const derivedYCategories = yCategories || [...new Set(data.map(d => String(d.y)))];\n\n const echartsOptions = useMemo(() => {\n const seriesData = data.map(d => {\n const xIdx = derivedXCategories.indexOf(String(d.x));\n const yIdx = derivedYCategories.indexOf(String(d.y));\n return {\n value: [xIdx, yIdx, d.z],\n name: d.label || `${d.x} - ${d.y}`,\n itemStyle: d.color ? { color: d.color } : undefined,\n };\n });\n\n // Calculate max Z for scaling\n const maxZ = Math.max(...data.map(d => d.z), 1);\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const [xIdx, yIdx, z] = d.value || [0, 0, 0];\n const xLabel = derivedXCategories[xIdx] || xIdx;\n const yLabel = derivedYCategories[yIdx] || yIdx;\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || ''}</div>`;\n html += `<div>${xAxisLabel}: ${xLabel}</div>`;\n html += `<div>${yAxisLabel}: ${yLabel}</div>`;\n html += `<div style=\"color:#3E3CFF\">${zAxisLabel}: <span style=\"font-family:monospace\">${z.toFixed(2)}</span></div>`;\n return html;\n }) as unknown as string,\n },\n visualMap: {\n show: true,\n min: 0,\n max: maxZ,\n inRange: {\n color: ['#3E3CFF', '#9D70FF', '#22d3ee', '#56f000'],\n },\n ...visualMapStyle,\n right: 10,\n top: 'center',\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 80,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 250,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.1, shadow: true, shadowQuality: 'medium' },\n ambient: { intensity: 0.4 },\n },\n },\n xAxis3D: {\n type: 'category' as const,\n name: xAxisLabel,\n data: derivedXCategories,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelSecondary, fontSize: 10 },\n },\n yAxis3D: {\n type: 'category' as const,\n name: yAxisLabel,\n data: derivedYCategories,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelSecondary, fontSize: 10 },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelTertiary },\n },\n series: [{\n type: 'bar3D' as const,\n data: seriesData,\n shading,\n barSize: 15,\n bevelSize: 0.1,\n label: {\n show: false,\n },\n emphasis: {\n label: {\n show: true,\n formatter: (params: any) => params.data?.name || '',\n textStyle: { color: labelPrimary, fontSize: 11 },\n },\n },\n }],\n };\n }, [data, derivedXCategories, derivedYCategories, xAxisLabel, yAxisLabel, zAxisLabel, shading, autoRotate, tooltipStyle, visualMapStyle, labelPrimary, labelSecondary, labelTertiary]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"bar\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Surface3D Chart - Signal Strength Maps, Thermal Analysis\n// =============================================================================\n\nexport interface Surface3DChartProps extends CommonChartProps {\n /** Surface data (2D array or structured) */\n data: import('./types').Surface3DData;\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Surface shading style */\n shading?: 'color' | 'lambert' | 'realistic';\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Surface3DChart - 3D surface visualization for continuous data\n * \n * Perfect for visualizing:\n * - Signal strength heatmaps over coverage areas\n * - Thermal distribution surfaces\n * - Terrain/topography models\n * - Radiation patterns\n */\nexport const Surface3DChart = memo(forwardRef<AstroChartHandle, Surface3DChartProps>(\n function Surface3DChart({\n data = { data: [] },\n title,\n width = '100%',\n height = 500,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n shading = 'realistic',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const visualMapStyle = useChartVisualMapStyle();\n \n const echartsOptions = useMemo(() => {\n // Convert 2D array to surface data format\n const surfaceData: number[][] = [];\n const rows = data.data.length;\n const cols = rows > 0 ? data.data[0].length : 0;\n \n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n const x = data.xRange ? data.xRange[0] + (data.xRange[1] - data.xRange[0]) * (i / (rows - 1 || 1)) : i;\n const y = data.yRange ? data.yRange[0] + (data.yRange[1] - data.yRange[0]) * (j / (cols - 1 || 1)) : j;\n surfaceData.push([x, y, data.data[i][j]]);\n }\n }\n\n // Calculate min/max for visual map\n const allZ = data.data.flat();\n const minZ = Math.min(...allZ);\n const maxZ = Math.max(...allZ);\n\n // Color map based on selection\n const colorRange = data.colorMap === 'thermal' \n ? ['#0d0887', '#6a00a8', '#b12a90', '#e16462', '#fca636', '#f0f921']\n : data.colorMap === 'viridis'\n ? ['#440154', '#414487', '#2a788e', '#22a884', '#7ad151', '#fde725']\n : data.colorStops?.map(s => s.color) \n || ['#1B2DA0', '#3E3CFF', '#9D70FF', '#22d3ee', '#56f000'];\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n },\n visualMap: {\n show: true,\n min: minZ,\n max: maxZ,\n inRange: { color: colorRange },\n ...visualMapStyle,\n right: 10,\n top: 'center',\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 60,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 220,\n alpha: 30,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: true, shadowQuality: 'medium' },\n ambient: { intensity: 0.5 },\n },\n postEffect: {\n enable: true,\n SSAO: { enable: true, radius: 2 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n series: [{\n type: 'surface' as const,\n data: surfaceData,\n shading,\n wireframe: data.wireframe ? {\n show: true,\n lineStyle: { color: 'rgba(255, 255, 255, 0.2)', width: 0.5 },\n } : { show: false },\n }],\n };\n }, [data, xAxisLabel, yAxisLabel, zAxisLabel, shading, autoRotate, tooltipStyle, visualMapStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Lines3D Chart - Debris Trajectories, Satellite Links\n// =============================================================================\n\nexport interface Lines3DChartProps extends CommonChartProps {\n /** 3D line paths */\n data: import('./types').Lines3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Show grid */\n showGrid?: boolean;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Show flow animation effect */\n showFlowEffect?: boolean;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Lines3DChart - 3D line paths for trajectories and connections\n * \n * Perfect for visualizing:\n * - Space debris trajectories\n * - Inter-satellite link networks\n * - Transfer orbit paths\n * - Multi-body trajectory visualization\n */\nexport const Lines3DChart = memo(forwardRef<AstroChartHandle, Lines3DChartProps>(\n function Lines3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n showGrid = true,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n showFlowEffect = false,\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const { tokens, mode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const _labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((line, idx) => {\n const lineColor = line.color || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n \n // Main line\n seriesArray.push({\n type: 'line3D' as const,\n name: line.name,\n coordinateSystem: 'cartesian3D',\n data: line.path.map(p => [p.x, p.y, p.z]),\n lineStyle: {\n color: lineColor,\n width: line.lineWidth || 2,\n type: line.lineStyle || 'solid',\n opacity: 0.8,\n },\n });\n\n // Endpoints as scatter\n if (line.showEndpoints) {\n seriesArray.push({\n type: 'scatter3D' as const,\n name: `${line.name} Points`,\n coordinateSystem: 'cartesian3D',\n data: [\n { value: [line.path[0].x, line.path[0].y, line.path[0].z], name: 'Start' },\n { value: [line.path[line.path.length - 1].x, line.path[line.path.length - 1].y, line.path[line.path.length - 1].z], name: 'End' },\n ],\n symbolSize: 8,\n itemStyle: { color: lineColor },\n });\n }\n });\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n if (params.seriesType === 'line3D') {\n return `<div style=\"font-weight:600\">${params.seriesName}</div>`;\n }\n const [x, y, z] = d.value || [0, 0, 0];\n return `<div style=\"font-weight:600\">${d.name || params.seriesName}</div>\n <div>${xAxisLabel}: ${x.toFixed(2)}</div>\n <div>${yAxisLabel}: ${y.toFixed(2)}</div>\n <div>${zAxisLabel}: ${z.toFixed(2)}</div>`;\n }) as unknown as string,\n },\n legend: {\n show: data.length > 1,\n top: 10,\n ...legendStyle,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 100,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 200,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: showFlowEffect, intensity: 0.1 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, xAxisLabel, yAxisLabel, zAxisLabel, showFlowEffect, autoRotate, tooltipStyle, legendStyle]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// SPACE-SPECIFIC 3D CHARTS\n// =============================================================================\n\n// =============================================================================\n// SphericalRadar3DChart - Object Tracking in Spherical Coordinates\n// =============================================================================\n\nexport interface SphericalRadar3DData {\n /** Object identifier */\n id: string;\n /** Object name */\n name: string;\n /** Azimuth angle (degrees, 0-360) */\n azimuth: number;\n /** Elevation angle (degrees, -90 to 90) */\n elevation: number;\n /** Range/distance */\n range: number;\n /** Object category */\n category?: 'satellite' | 'debris' | 'unknown' | 'friendly' | 'hostile';\n /** Color override */\n color?: string;\n /** Size override */\n size?: number;\n}\n\nexport interface SphericalRadar3DChartProps extends CommonChartProps {\n /** Tracked objects */\n data: SphericalRadar3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Maximum range for scaling */\n maxRange?: number;\n /** Show range rings */\n showRangeRings?: boolean;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SphericalRadar3DChart - 3D radar-style object tracking visualization\n * \n * USE CASES:\n * - Ground station tracking view (azimuth/elevation/range)\n * - Space surveillance radar displays\n * - Proximity operations around spacecraft\n * - Air/space traffic control visualization\n * - Collision avoidance monitoring\n */\nexport const SphericalRadar3DChart = memo(forwardRef<AstroChartHandle, SphericalRadar3DChartProps>(\n function SphericalRadar3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n maxRange = 1000,\n showRangeRings = true,\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const _legendStyle = useChartLegendStyle();\n \n const categoryColors: Record<string, string> = {\n satellite: '#56f000',\n debris: '#ff3838',\n unknown: '#fce83a',\n friendly: '#3E3CFF',\n hostile: '#ff3838',\n };\n\n const echartsOptions = useMemo(() => {\n // Convert spherical to Cartesian for 3D display\n const scatterData = data.map(obj => {\n const azRad = (obj.azimuth * Math.PI) / 180;\n const elRad = (obj.elevation * Math.PI) / 180;\n const r = (obj.range / maxRange) * 100;\n \n return {\n name: obj.name,\n value: [\n r * Math.cos(elRad) * Math.sin(azRad),\n r * Math.sin(elRad),\n r * Math.cos(elRad) * Math.cos(azRad),\n ],\n itemStyle: { color: obj.color || categoryColors[obj.category || 'unknown'] },\n symbolSize: obj.size || 12,\n category: obj.category,\n azimuth: obj.azimuth,\n elevation: obj.elevation,\n range: obj.range,\n };\n });\n\n // Generate range rings\n const rangeRings: any[] = [];\n if (showRangeRings) {\n [0.25, 0.5, 0.75, 1.0].forEach(fraction => {\n const r = fraction * 100;\n const ringPoints = Array.from({ length: 73 }, (_, i) => {\n const angle = (i / 72) * Math.PI * 2;\n return [r * Math.sin(angle), 0, r * Math.cos(angle)];\n });\n rangeRings.push({\n type: 'line3D',\n coordinateSystem: 'cartesian3D',\n data: ringPoints,\n lineStyle: { color: 'rgba(100, 116, 139, 0.3)', width: 1 },\n silent: true,\n });\n });\n }\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);text-transform:uppercase;font-size:10px;margin-bottom:6px\">${d.category || 'Unknown'}</div>`;\n html += `<div>Azimuth: <span style=\"font-family:monospace\">${d.azimuth?.toFixed(1)}°</span></div>`;\n html += `<div>Elevation: <span style=\"font-family:monospace\">${d.elevation?.toFixed(1)}°</span></div>`;\n html += `<div style=\"color:#22d3ee\">Range: <span style=\"font-family:monospace\">${d.range?.toFixed(1)} km</span></div>`;\n return html;\n }) as unknown as string,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 50,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 2,\n distance: 250,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.5 },\n },\n postEffect: { enable: true, bloom: { enable: true, intensity: 0.05 } },\n },\n xAxis3D: { type: 'value', name: 'East', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n yAxis3D: { type: 'value', name: 'Up', min: -50, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n zAxis3D: { type: 'value', name: 'North', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n series: [...rangeRings, { type: 'scatter3D', coordinateSystem: 'cartesian3D', data: scatterData, symbolSize: 12 }],\n };\n }, [data, maxRange, showRangeRings, autoRotate, categoryColors, tooltipStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height}\n loading={loading} className={className} echartsOptions={echartsOptions as any}\n export={exportOptions} infoTooltip={infoTooltip} />\n );\n }\n));\n\n// =============================================================================\n// TransferOrbit3DChart - Mission Planning & Trajectory Visualization\n// =============================================================================\n\nexport interface TransferOrbitSegment {\n id: string;\n name: string;\n path: Array<{ x: number; y: number; z: number }>;\n type: 'coast' | 'burn' | 'gravity-assist' | 'spiral';\n deltaV?: number;\n color?: string;\n}\n\nexport interface TransferOrbitWaypoint {\n name: string;\n position: { x: number; y: number; z: number };\n type: 'departure' | 'arrival' | 'flyby' | 'node' | 'burn';\n deltaV?: number;\n tof?: number;\n}\n\nexport interface TransferOrbit3DChartProps extends CommonChartProps {\n segments: TransferOrbitSegment[];\n waypoints?: TransferOrbitWaypoint[];\n referenceOrbits?: Array<{ name: string; path: Array<{ x: number; y: number; z: number }>; color?: string }>;\n title?: string;\n width?: number | string;\n height?: number;\n showDeltaV?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * TransferOrbit3DChart - Interplanetary/orbital transfer visualization\n * \n * USE CASES:\n * - Hohmann transfer orbit planning\n * - Bi-elliptic transfer visualization\n * - Gravity assist trajectory design\n * - Low-thrust spiral maneuvers\n * - Lunar/Mars mission trajectory planning\n */\nexport const TransferOrbit3DChart = memo(forwardRef<AstroChartHandle, TransferOrbit3DChartProps>(\n function TransferOrbit3DChart({\n segments = [], waypoints = [], referenceOrbits = [], title, width = '100%', height = 550,\n showDeltaV = true, autoRotate = false, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const { tokens, mode } = useTheme();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n const labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const segmentColors: Record<string, string> = { coast: '#9D70FF', burn: '#ff3838', 'gravity-assist': '#22d3ee', spiral: '#56f000' };\n const waypointColors: Record<string, string> = { departure: '#3E3CFF', arrival: '#56f000', flyby: '#22d3ee', node: '#fce83a', burn: '#ff3838' };\n\n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n referenceOrbits.forEach(orbit => {\n seriesArray.push({ type: 'line3D', name: orbit.name, coordinateSystem: 'cartesian3D',\n data: orbit.path.map(p => [p.x, p.y, p.z]), lineStyle: { color: orbit.color || 'rgba(100, 116, 139, 0.3)', width: 1, type: 'dashed' }, silent: true });\n });\n segments.forEach((segment, idx) => {\n const color = segment.color || segmentColors[segment.type] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n seriesArray.push({ type: 'line3D', name: segment.name, coordinateSystem: 'cartesian3D',\n data: segment.path.map(p => [p.x, p.y, p.z]), lineStyle: { color, width: segment.type === 'burn' ? 4 : 2 } });\n });\n if (waypoints.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Waypoints', coordinateSystem: 'cartesian3D',\n data: waypoints.map(wp => ({ name: wp.name, value: [wp.position.x, wp.position.y, wp.position.z],\n itemStyle: { color: waypointColors[wp.type] || '#fff' }, symbolSize: wp.type === 'burn' ? 14 : 18, deltaV: wp.deltaV, tof: wp.tof, waypointType: wp.type })),\n label: { show: true, formatter: (p: any) => p.data?.name, textStyle: { color: labelPrimary, fontSize: 11, backgroundColor: labelBg, padding: [2, 4] } } });\n }\n const totalDeltaV = segments.reduce((sum, s) => sum + (s.deltaV || 0), 0) + waypoints.reduce((sum, w) => sum + (w.deltaV || 0), 0);\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') { const seg = segments.find(s => s.name === params.seriesName); return `<div style=\"font-weight:600\">${params.seriesName}</div>${seg?.deltaV ? `<div style=\"color:#ff3838\">ΔV: ${seg.deltaV.toFixed(2)} km/s</div>` : ''}`; }\n return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div>${d.deltaV ? `<div style=\"color:#ff3838\">ΔV: ${d.deltaV.toFixed(2)} km/s</div>` : ''}${d.tof ? `<div>TOF: ${d.tof.toFixed(0)} days</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n graphic: showDeltaV && totalDeltaV > 0 ? [{ type: 'text', right: 20, top: 20, style: { text: `Total ΔV: ${totalDeltaV.toFixed(2)} km/s`, fill: '#ff3838', fontSize: 14, fontWeight: 'bold' } }] : undefined,\n grid3D: { boxWidth: 150, boxHeight: 80, boxDepth: 150, viewControl: { autoRotate, autoRotateSpeed: 2, distance: 280, alpha: 20, beta: 40 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.08 } } },\n xAxis3D: { type: 'value', name: 'X (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Z (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Y (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [segments, waypoints, referenceOrbits, showDeltaV, autoRotate, segmentColors, waypointColors, tooltipStyle, legendStyle, labelPrimary, labelSecondary, labelTertiary, labelBg]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// AttitudeHistory3DChart - Spacecraft Orientation Over Time\n// =============================================================================\n\nexport interface AttitudeHistoryPoint {\n time: number;\n euler?: { roll: number; pitch: number; yaw: number };\n error?: number;\n mode?: string;\n}\n\nexport interface AttitudeHistory3DChartProps extends CommonChartProps {\n data: AttitudeHistoryPoint[];\n title?: string;\n width?: number | string;\n height?: number;\n mode?: 'euler' | 'pointing-error';\n showModeTransitions?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * AttitudeHistory3DChart - Spacecraft attitude evolution visualization\n * \n * USE CASES:\n * - Attitude maneuver visualization\n * - Tumbling/spin analysis\n * - Pointing stability assessment\n * - Safe mode recovery analysis\n * - Slew profile optimization\n */\nexport const AttitudeHistory3DChart = memo(forwardRef<AstroChartHandle, AttitudeHistory3DChartProps>(\n function AttitudeHistory3DChart({\n data = [], title, width = '100%', height = 500, mode = 'euler', showModeTransitions = true,\n autoRotate = false, loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n if (mode === 'euler' && data.length > 0) {\n const pathData = data.filter(d => d.euler).map(d => [d.euler!.roll, d.euler!.pitch, d.euler!.yaw]);\n seriesArray.push({ type: 'line3D', name: 'Attitude Path', coordinateSystem: 'cartesian3D', data: pathData, lineStyle: { color: '#3E3CFF', width: 2 } });\n if (pathData.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Start/End', coordinateSystem: 'cartesian3D', data: [\n { value: pathData[0], name: 'Start', itemStyle: { color: '#56f000' } },\n { value: pathData[pathData.length - 1], name: 'End', itemStyle: { color: '#ff3838' } }\n ], symbolSize: 14 });\n }\n if (showModeTransitions) {\n const transitions = data.filter((d, i) => i > 0 && d.mode !== data[i - 1].mode && d.euler);\n if (transitions.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Mode Changes', coordinateSystem: 'cartesian3D', data: transitions.map(d => ({ value: [d.euler!.roll, d.euler!.pitch, d.euler!.yaw], name: d.mode, itemStyle: { color: '#fce83a' } })), symbolSize: 10, symbol: 'diamond' });\n }\n }\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; const [roll, pitch, yaw] = d.value || [0, 0, 0]; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name || params.seriesName}</div><div>Roll: ${roll.toFixed(2)}°</div><div>Pitch: ${pitch.toFixed(2)}°</div><div>Yaw: ${yaw.toFixed(2)}°</div>`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, distance: 220, alpha: 25, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } } },\n xAxis3D: { type: 'value', name: 'Roll (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Pitch (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Yaw (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [data, mode, showModeTransitions, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// ConjunctionAssessment3DChart - Collision Analysis\n// =============================================================================\n\nexport interface ConjunctionEvent {\n id: string;\n primary: string;\n secondary: string;\n tca: number;\n missDistance: number;\n probability?: number;\n relativeVelocity?: number;\n position: { x: number; y: number; z: number };\n uncertainty?: { rx: number; ry: number; rz: number };\n}\n\nexport interface ConjunctionAssessment3DChartProps extends CommonChartProps {\n events: ConjunctionEvent[];\n primaryOrbit?: Array<{ x: number; y: number; z: number }>;\n title?: string;\n width?: number | string;\n height?: number;\n showUncertainty?: boolean;\n warningThreshold?: number;\n criticalThreshold?: number;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConjunctionAssessment3DChart - Space object collision analysis\n * \n * USE CASES:\n * - Conjunction screening results visualization\n * - Collision avoidance maneuver planning\n * - Debris close approach monitoring\n * - Rendezvous safety analysis\n * - Formation flying separation monitoring\n */\nexport const ConjunctionAssessment3DChart = memo(forwardRef<AstroChartHandle, ConjunctionAssessment3DChartProps>(\n function ConjunctionAssessment3DChart({\n events = [], primaryOrbit = [], title, width = '100%', height = 550, showUncertainty = true,\n warningThreshold = 5, criticalThreshold = 1, autoRotate = false, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const { tokens, mode } = useTheme();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const _labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n if (primaryOrbit && primaryOrbit.length > 0) {\n seriesArray.push({ type: 'line3D', name: 'Primary Orbit', coordinateSystem: 'cartesian3D', data: primaryOrbit.map(p => [p.x, p.y, p.z]), lineStyle: { color: '#3E3CFF', width: 2 } });\n }\n const eventData = events.map(evt => {\n const color = evt.missDistance < criticalThreshold ? '#ff3838' : evt.missDistance < warningThreshold ? '#fce83a' : '#56f000';\n return { name: `${evt.primary} × ${evt.secondary}`, value: [evt.position.x, evt.position.y, evt.position.z], itemStyle: { color }, symbolSize: Math.max(8, Math.min(24, 30 - evt.missDistance * 3)), ...evt };\n });\n seriesArray.push({ type: 'scatter3D', name: 'Conjunctions', coordinateSystem: 'cartesian3D', data: eventData, symbol: 'circle', emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 2 } } });\n if (showUncertainty) {\n events.filter(e => e.uncertainty).forEach(evt => {\n const { x, y, z } = evt.position; const { rx, ry, rz } = evt.uncertainty!;\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x - rx, y, z], [x + rx, y, z]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x, y - ry, z], [x, y + ry, z]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x, y, z - rz], [x, y, z + rz]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n });\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') return ''; const mdColor = d.missDistance < criticalThreshold ? '#ff3838' : d.missDistance < warningThreshold ? '#fce83a' : '#56f000'; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div><div style=\"color:${mdColor}\">Miss Distance: ${d.missDistance?.toFixed(3)} km</div>${d.probability !== undefined ? `<div>Probability: ${(d.probability * 100).toExponential(2)}%</div>` : ''}${d.relativeVelocity ? `<div>Rel. Velocity: ${d.relativeVelocity.toFixed(2)} km/s</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, distance: 220, alpha: 25, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.05 } } },\n xAxis3D: { type: 'value', name: 'X (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Y (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Z (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [events, primaryOrbit, showUncertainty, warningThreshold, criticalThreshold, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// LaunchCorridor3DChart - Launch/Reentry Visualization\n// =============================================================================\n\nexport interface LaunchCorridorData {\n corridors: Array<{ id: string; name: string; type: 'nominal' | 'abort' | 'safety' | 'exclusion'; groundFootprint: Array<{ lat: number; lon: number }>; altitudeRange: [number, number]; color?: string }>;\n trajectory?: Array<{ lat: number; lon: number; altitude: number; time?: number }>;\n events?: Array<{ name: string; lat: number; lon: number; altitude: number; time?: number }>;\n}\n\nexport interface LaunchCorridor3DChartProps extends CommonChartProps {\n data: LaunchCorridorData;\n title?: string;\n width?: number | string;\n height?: number;\n showTrajectory?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * LaunchCorridor3DChart - Launch/reentry corridor visualization\n * \n * USE CASES:\n * - Launch window planning\n * - Range safety corridor definition\n * - Abort trajectory visualization\n * - Reentry footprint prediction\n * - Debris fall zone analysis\n */\nexport const LaunchCorridor3DChart = memo(forwardRef<AstroChartHandle, LaunchCorridor3DChartProps>(\n function LaunchCorridor3DChart({\n data = { corridors: [] } as LaunchCorridorData, title, width = '100%', height = 550, showTrajectory = true, autoRotate = false,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const { tokens, mode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n const labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n const legendStyle = useChartLegendStyle();\n \n const corridorColors: Record<string, string> = { nominal: 'rgba(86, 240, 0, 0.4)', abort: 'rgba(255, 179, 2, 0.4)', safety: 'rgba(34, 211, 238, 0.4)', exclusion: 'rgba(255, 56, 56, 0.4)' };\n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n const latLonTo3D = (lat: number, lon: number, alt: number) => [lon, alt * 0.1, lat];\n data.corridors.forEach(corridor => {\n const color = corridor.color || corridorColors[corridor.type] || 'rgba(100, 116, 139, 0.4)';\n const lowerPath = corridor.groundFootprint.map(p => latLonTo3D(p.lat, p.lon, corridor.altitudeRange[0]));\n if (lowerPath.length > 0) lowerPath.push(lowerPath[0]);\n seriesArray.push({ type: 'line3D', name: `${corridor.name} (floor)`, coordinateSystem: 'cartesian3D', data: lowerPath, lineStyle: { color, width: 2 } });\n const upperPath = corridor.groundFootprint.map(p => latLonTo3D(p.lat, p.lon, corridor.altitudeRange[1]));\n if (upperPath.length > 0) upperPath.push(upperPath[0]);\n seriesArray.push({ type: 'line3D', name: `${corridor.name} (ceiling)`, coordinateSystem: 'cartesian3D', data: upperPath, lineStyle: { color, width: 2, type: 'dashed' } });\n });\n if (showTrajectory && data.trajectory && data.trajectory.length > 0) {\n seriesArray.push({ type: 'line3D', name: 'Trajectory', coordinateSystem: 'cartesian3D', data: data.trajectory.map(p => latLonTo3D(p.lat, p.lon, p.altitude)), lineStyle: { color: '#fff', width: 3 } });\n }\n if (data.events && data.events.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Events', coordinateSystem: 'cartesian3D', data: data.events.map(e => ({ name: e.name, value: latLonTo3D(e.lat, e.lon, e.altitude), itemStyle: { color: '#fce83a' }, altitude: e.altitude, time: e.time })), symbolSize: 12, symbol: 'diamond', label: { show: true, formatter: (p: any) => p.data?.name, textStyle: { color: labelPrimary, fontSize: 10, backgroundColor: labelBg, padding: [2, 4] } } });\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') return `<div style=\"font-weight:600\">${params.seriesName}</div>`; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div>${d.altitude ? `<div>Altitude: ${(d.altitude).toFixed(1)} km</div>` : ''}${d.time ? `<div>T+: ${d.time.toFixed(0)}s</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 150, boxHeight: 60, boxDepth: 100, viewControl: { autoRotate, distance: 280, alpha: 30, beta: 30 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } } },\n xAxis3D: { type: 'value', name: 'Longitude (°)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Altitude (km)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Latitude (°)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [data, showTrajectory, autoRotate, corridorColors, tooltipStyle, legendStyle, labelPrimary, labelSecondary, labelTertiary, labelBg]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// AntennaPattern3DChart - RF/Communications Pattern Visualization\n// =============================================================================\n\nexport interface AntennaPattern3DData {\n name: string;\n pattern: Array<{ theta: number; phi: number; gain: number }>;\n boresight?: { theta: number; phi: number };\n color?: string;\n}\n\nexport interface AntennaPattern3DChartProps extends CommonChartProps {\n patterns: AntennaPattern3DData[];\n title?: string;\n width?: number | string;\n height?: number;\n showScale?: boolean;\n minGain?: number;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * AntennaPattern3DChart - 3D antenna radiation pattern visualization\n * \n * USE CASES:\n * - Antenna gain pattern analysis\n * - Multi-beam satellite coverage\n * - Interference zone identification\n * - Link margin optimization\n * - Phased array beam steering visualization\n */\nexport const AntennaPattern3DChart = memo(forwardRef<AstroChartHandle, AntennaPattern3DChartProps>(\n function AntennaPattern3DChart({\n patterns = [], title, width = '100%', height = 500, minGain = -20, autoRotate = true,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n patterns.forEach((pattern, pIdx) => {\n const color = pattern.color || ASTRO_DATA_VIZ_COLORS.mixed[pIdx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const maxGain = Math.max(...pattern.pattern.map(p => p.gain), 0);\n const surfaceData = pattern.pattern.filter(p => p.gain >= minGain).map(p => {\n const thetaRad = (p.theta * Math.PI) / 180; const phiRad = (p.phi * Math.PI) / 180;\n const r = Math.max(0, ((p.gain - minGain) / (maxGain - minGain)) * 80 + 20);\n return { value: [r * Math.sin(thetaRad) * Math.cos(phiRad), r * Math.cos(thetaRad), r * Math.sin(thetaRad) * Math.sin(phiRad)], gain: p.gain, itemStyle: { color, opacity: 0.7 } };\n });\n seriesArray.push({ type: 'scatter3D', name: pattern.name, coordinateSystem: 'cartesian3D', data: surfaceData, symbolSize: 4 });\n if (pattern.boresight) {\n const thetaRad = (pattern.boresight.theta * Math.PI) / 180; const phiRad = (pattern.boresight.phi * Math.PI) / 180;\n seriesArray.push({ type: 'line3D', name: `${pattern.name} Boresight`, coordinateSystem: 'cartesian3D', data: [[0, 0, 0], [100 * Math.sin(thetaRad) * Math.cos(phiRad), 100 * Math.cos(thetaRad), 100 * Math.sin(thetaRad) * Math.sin(phiRad)]], lineStyle: { color: '#fff', width: 2 } });\n }\n });\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; return `<div style=\"font-weight:600;margin-bottom:4px\">${params.seriesName}</div>${d.gain !== undefined ? `<div style=\"color:#22d3ee\">Gain: ${d.gain.toFixed(1)} dBi</div>` : ''}`; }) as unknown as string },\n legend: { show: patterns.length > 1, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, autoRotateSpeed: 3, distance: 220, alpha: 20, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.5 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.08 } } },\n xAxis3D: { type: 'value', name: 'X', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n yAxis3D: { type: 'value', name: 'Z', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n zAxis3D: { type: 'value', name: 'Y', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n series: seriesArray,\n };\n }, [patterns, minGain, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// WaterfallChart - RF Spectrum Waterfall/Spectrogram Display\n// =============================================================================\n\nimport type { \n WaterfallDataPoint, \n WaterfallSignalMarker, \n DopplerTrackPoint, \n SatellitePassInfo, \n LinkMarginPoint \n} from './types';\n\nexport interface WaterfallChartProps extends CommonChartProps {\n /** Waterfall data points */\n data: WaterfallDataPoint[];\n /** Chart title */\n title?: string;\n /** Center frequency (Hz) */\n centerFrequency?: number;\n /** Bandwidth (Hz) */\n bandwidth?: number;\n /** FFT bins */\n fftBins?: number;\n /** Color map: viridis, plasma, inferno, magma */\n colorMap?: 'viridis' | 'plasma' | 'inferno' | 'magma';\n /** Power range [min, max] in dBm */\n powerRange?: [number, number];\n /** Time window in seconds */\n timeWindow?: number;\n /** Signal markers to highlight */\n markers?: WaterfallSignalMarker[];\n /** Show spectrum line above heatmap */\n showSpectrum?: boolean;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * WaterfallChart - RF spectrum waterfall/spectrogram display\n * \n * USE CASES:\n * - RF signal monitoring\n * - Interference detection\n * - Spectrum analysis\n * - Signal characterization\n */\nexport const WaterfallChart = memo(forwardRef<AstroChartHandle, WaterfallChartProps>(\n function WaterfallChart({\n data = [], title = 'RF Spectrum Waterfall', centerFrequency: _centerFrequency, bandwidth: _bandwidth, fftBins = 512, \n colorMap = 'viridis', powerRange = [-120, -60], timeWindow = 60, markers: _markers = [], \n showSpectrum: _showSpectrum = true, width = '100%', height = 400, loading = false, className = '', \n export: exportOptions, infoTooltip,\n }, ref) {\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n \n // Color maps for spectrum display\n const colorMaps: Record<string, string[]> = {\n viridis: ['#440154', '#482777', '#3e4989', '#31688e', '#26828e', '#1f9e89', '#35b779', '#6ece58', '#b5de2b', '#fde725'],\n plasma: ['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'],\n inferno: ['#000004', '#1b0c41', '#4a0c6b', '#781c6d', '#a52c60', '#cf4446', '#ed6925', '#fb9b06', '#f7d13d', '#fcffa4'],\n magma: ['#000004', '#180f3d', '#440f76', '#721f81', '#9e2f7f', '#cd4071', '#f1605d', '#fd9668', '#feca8d', '#fcfdbf'],\n };\n \n const echartsOptions = useMemo(() => {\n if (!data.length) return {};\n \n // Build heatmap data: [freqIndex, timeIndex, power]\n const heatmapData: [number, number, number][] = [];\n const timeLabels: string[] = [];\n const freqLabels: string[] = [];\n \n // Get frequency range from first data point\n const firstPoint = data[0];\n const freqMin = Math.min(...firstPoint.frequencies);\n const freqMax = Math.max(...firstPoint.frequencies);\n const freqStep = (freqMax - freqMin) / (fftBins - 1);\n \n // Build frequency labels\n for (let i = 0; i < fftBins; i++) {\n const freq = freqMin + i * freqStep;\n freqLabels.push((freq / 1e6).toFixed(2));\n }\n \n // Process each time slice\n data.slice(-timeWindow).forEach((point, tIdx) => {\n const time = point.time instanceof Date ? point.time : new Date(point.time);\n timeLabels.push(time.toLocaleTimeString());\n \n point.powers.forEach((power, fIdx) => {\n if (fIdx < fftBins) {\n heatmapData.push([fIdx, tIdx, power]);\n }\n });\n });\n \n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: (params: any): string => {\n if (Array.isArray(params)) return '';\n const [fIdx, tIdx, power] = params.data || [];\n const freq = freqLabels[fIdx] || 'N/A';\n const time = timeLabels[tIdx] || 'N/A';\n return `<div style=\"font-weight:600\">Spectrum</div>\n <div>Frequency: ${freq} MHz</div>\n <div>Time: ${time}</div>\n <div>Power: ${power?.toFixed(1) ?? 'N/A'} dBm</div>`;\n },\n },\n grid: { left: 60, right: 40, top: 40, bottom: 60 },\n xAxis: { type: 'category', data: freqLabels, name: 'Frequency (MHz)', nameLocation: 'middle', nameGap: 35 },\n yAxis: { type: 'category', data: timeLabels, name: 'Time', nameLocation: 'middle', nameGap: 45 },\n visualMap: {\n min: powerRange[0],\n max: powerRange[1],\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n // Enable hover linking - highlight only hovered range\n hoverLink: true,\n // Non-hovered regions get faded opacity\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)',\n opacity: 0.15,\n },\n inRange: { color: colorMaps[colorMap] || colorMaps.viridis },\n text: [`${powerRange[1]} dBm`, `${powerRange[0]} dBm`],\n textStyle: { color: 'rgba(255, 255, 255, 0.7)' },\n },\n series: [{\n type: 'heatmap',\n data: heatmapData,\n emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 1 } },\n }],\n };\n }, [data, fftBins, colorMap, powerRange, timeWindow, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// DopplerTrackChart - Doppler Shift Tracking Display\n// =============================================================================\n\nexport interface DopplerTrackChartProps extends CommonChartProps {\n /** Predicted Doppler track */\n predicted: DopplerTrackPoint[];\n /** Measured Doppler data (optional) */\n measured?: DopplerTrackPoint[];\n /** Carrier frequency (Hz) */\n carrierFrequency?: number;\n /** Pass info */\n passInfo?: SatellitePassInfo;\n /** Show residuals (predicted - measured) */\n showResiduals?: boolean;\n /** Show elevation overlay */\n showElevation?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * DopplerTrackChart - Doppler shift tracking visualization\n * \n * USE CASES:\n * - Satellite pass tracking\n * - Signal acquisition validation\n * - Orbit determination\n * - Tracking residual analysis\n */\nexport const DopplerTrackChart = memo(forwardRef<AstroChartHandle, DopplerTrackChartProps>(\n function DopplerTrackChart({\n predicted = [], measured = [], carrierFrequency: _carrierFrequency, passInfo, showResiduals = false, \n showElevation = true, title, width = '100%', height = 300, loading = false, \n className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const tooltipStyle = useChartTooltipStyle();\n \n const chartTitle = title || (passInfo ? `Doppler Track – ${passInfo.name}` : 'Doppler Track');\n \n const echartsOptions = useMemo(() => {\n const series: any[] = [];\n \n // Predicted Doppler\n if (predicted.length > 0) {\n series.push({\n name: 'Predicted',\n type: 'line',\n data: predicted.map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.dopplerShift];\n }),\n lineStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[0], width: 2 },\n symbol: 'none',\n smooth: true,\n });\n }\n \n // Measured Doppler\n if (measured.length > 0) {\n series.push({\n name: 'Measured',\n type: 'scatter',\n data: measured.map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.dopplerShift];\n }),\n itemStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[2] },\n symbolSize: 4,\n });\n }\n \n // Elevation overlay\n if (showElevation && predicted.some(p => p.elevation !== undefined)) {\n series.push({\n name: 'Elevation',\n type: 'line',\n yAxisIndex: 1,\n data: predicted.filter(p => p.elevation !== undefined).map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.elevation];\n }),\n lineStyle: { color: SOFT_STATUS_COLORS.normal, width: 1, type: 'dashed' },\n symbol: 'none',\n areaStyle: { color: `${STATUS_COLORS.normal}20` },\n });\n }\n \n return {\n tooltip: {\n show: true,\n trigger: 'axis',\n ...tooltipStyle,\n formatter: (params: unknown): string => {\n if (!Array.isArray(params) || params.length === 0) return '';\n const firstParam = params[0] as any;\n const time = new Date(firstParam.data[0]).toLocaleTimeString();\n let html = `<div style=\"font-weight:600;margin-bottom:4px\">${time}</div>`;\n params.forEach((p: any) => {\n const value = p.seriesName === 'Elevation' \n ? `${p.data[1]?.toFixed(1)}°` \n : `${(p.data[1] / 1000).toFixed(2)} kHz`;\n html += `<div>${p.marker} ${p.seriesName}: ${value}</div>`;\n });\n return html;\n },\n },\n legend: { show: true, top: 10 },\n grid: { left: 60, right: 60, top: 50, bottom: 40 },\n xAxis: { type: 'time', name: 'Time' },\n yAxis: [\n { type: 'value', name: 'Doppler (kHz)', axisLabel: { formatter: (v: number) => (v / 1000).toFixed(1) } },\n { type: 'value', name: 'Elevation (°)', position: 'right', min: 0, max: 90, show: showElevation },\n ],\n series,\n };\n }, [predicted, measured, showResiduals, showElevation, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={chartTitle}\n series={[]}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// LinkMarginChart - Link Budget Margin Analysis\n// =============================================================================\n\nexport interface LinkMarginChartProps extends CommonChartProps {\n /** Link margin data points */\n data: LinkMarginPoint[];\n /** Minimum acceptable margin (dB) */\n minMargin: number;\n /** Show uplink, downlink, or both */\n mode?: 'uplink' | 'downlink' | 'both';\n /** Show rain fade overlay */\n showRainFade?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * LinkMarginChart - Link budget margin visualization\n * \n * USE CASES:\n * - Link budget analysis\n * - Fade margin planning\n * - Antenna sizing decisions\n * - Coverage boundary analysis\n */\nexport const LinkMarginChart = memo(forwardRef<AstroChartHandle, LinkMarginChartProps>(\n function LinkMarginChart({\n data = [], minMargin, mode = 'both', showRainFade: _showRainFade = false, title = 'Link Margin vs Elevation',\n width = '100%', height = 250, loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const series: SeriesData[] = [];\n \n if ((mode === 'uplink' || mode === 'both') && data.some(d => d.uplinkMargin !== undefined)) {\n series.push({\n id: 'uplink',\n name: 'Uplink Margin',\n data: data.filter(d => d.uplinkMargin !== undefined).map(d => ({ x: d.elevation, y: d.uplinkMargin! })),\n color: ASTRO_DATA_VIZ_COLORS.mixed[0],\n });\n }\n \n if ((mode === 'downlink' || mode === 'both') && data.some(d => d.downlinkMargin !== undefined)) {\n series.push({\n id: 'downlink',\n name: 'Downlink Margin',\n data: data.filter(d => d.downlinkMargin !== undefined).map(d => ({ x: d.elevation, y: d.downlinkMargin! })),\n color: ASTRO_DATA_VIZ_COLORS.mixed[2],\n });\n }\n \n const annotations: AnnotationOptions = {\n markLines: {\n data: [{\n yAxis: minMargin,\n label: `Min Margin (${minMargin} dB)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n }],\n },\n markAreas: {\n data: [[\n { yAxis: 0, name: 'Insufficient Margin' },\n { yAxis: minMargin },\n ]],\n itemStyle: { color: `${STATUS_COLORS.critical}15` },\n },\n };\n \n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'value', name: 'Elevation (°)', min: 0, max: 90 }}\n yAxis={{ type: 'value', name: 'Margin (dB)' }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: mode === 'both', position: 'bottom' }}\n annotations={annotations}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// ConstellationCoverageChart - Global Coverage Heatmap\n// =============================================================================\n\nexport interface ConstellationCoverageChartProps extends CommonChartProps {\n /** Coverage grid data (lat × lon) */\n data: CoverageGridData;\n /** Chart title */\n title?: string;\n /** Coverage metric label */\n metricLabel?: string;\n /** Coverage metric unit */\n metricUnit?: string;\n /** Color map: viridis, jet, plasma, thermal */\n colorMap?: 'viridis' | 'jet' | 'plasma' | 'thermal';\n /** Value range [min, max] */\n valueRange?: [number, number];\n /** Show satellite positions */\n satellites?: Array<{ name: string; lat: number; lon: number; color?: string }>;\n /** Show ground stations */\n groundStations?: Array<{ name: string; lat: number; lon: number }>;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConstellationCoverageChart - Global constellation coverage visualization\n * \n * USE CASES:\n * - Revisit time analysis\n * - Coverage gap identification\n * - Link budget mapping\n * - Latency analysis for LEO constellations\n * - Service availability assessment\n */\nexport const ConstellationCoverageChart = memo(forwardRef<AstroChartHandle, ConstellationCoverageChartProps>(\n function ConstellationCoverageChart({\n data = { coverage: [], latitudes: [], longitudes: [] }, title = 'Constellation Coverage', metricLabel = 'Coverage', metricUnit = '%',\n colorMap = 'viridis', valueRange, satellites = [], groundStations = [],\n width = '100%', height = 400, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n \n const colorMaps: Record<string, string[]> = {\n viridis: ['#440154', '#482777', '#3e4989', '#31688e', '#26828e', '#1f9e89', '#35b779', '#6ece58', '#b5de2b', '#fde725'],\n jet: ['#00007f', '#0000ff', '#007fff', '#00ffff', '#7fff7f', '#ffff00', '#ff7f00', '#ff0000', '#7f0000'],\n plasma: ['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'],\n thermal: ['#000000', '#1a0a2e', '#3d1551', '#6b1d6a', '#a12568', '#d3405c', '#eb6841', '#f5a623', '#f7dc6f', '#ffffff'],\n };\n \n const echartsOptions = useMemo(() => {\n if (!data.coverage.length || !data.latitudes.length || !data.longitudes.length) return {};\n \n // Build heatmap data: [lonIdx, latIdx, value]\n const heatmapData: [number, number, number][] = [];\n let minVal = Infinity;\n let maxVal = -Infinity;\n \n data.latitudes.forEach((_, latIdx) => {\n data.longitudes.forEach((_, lonIdx) => {\n const val = data.coverage[latIdx]?.[lonIdx] ?? 0;\n heatmapData.push([lonIdx, latIdx, val]);\n if (val < minVal) minVal = val;\n if (val > maxVal) maxVal = val;\n });\n });\n \n const range = valueRange || [minVal, maxVal];\n \n const lonLabels = data.longitudes.map(v => `${v.toFixed(0)}°`);\n const latLabels = data.latitudes.map(v => `${v.toFixed(0)}°`);\n \n const seriesArray: any[] = [\n {\n type: 'heatmap',\n data: heatmapData,\n emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 1 } },\n progressive: 5000,\n },\n ];\n \n // Overlay satellite positions as scatter\n if (satellites.length > 0) {\n seriesArray.push({\n type: 'scatter',\n name: 'Satellites',\n coordinateSystem: 'cartesian2d',\n data: satellites.map(sat => {\n const lonIdx = data.longitudes.findIndex(v => Math.abs(v - sat.lon) < (data.longitudes[1] - data.longitudes[0]));\n const latIdx = data.latitudes.findIndex(v => Math.abs(v - sat.lat) < (data.latitudes[1] - data.latitudes[0]));\n return { value: [lonIdx >= 0 ? lonIdx : 0, latIdx >= 0 ? latIdx : 0], name: sat.name, itemStyle: { color: sat.color || '#fff' } };\n }),\n symbolSize: 8,\n symbol: 'triangle',\n z: 10,\n label: { show: true, formatter: (p: any) => p.data?.name || '', position: 'top', color: labelPrimary, fontSize: 9 },\n });\n }\n \n // Overlay ground stations\n if (groundStations.length > 0) {\n seriesArray.push({\n type: 'scatter',\n name: 'Ground Stations',\n coordinateSystem: 'cartesian2d',\n data: groundStations.map(gs => {\n const lonIdx = data.longitudes.findIndex(v => Math.abs(v - gs.lon) < (data.longitudes[1] - data.longitudes[0]));\n const latIdx = data.latitudes.findIndex(v => Math.abs(v - gs.lat) < (data.latitudes[1] - data.latitudes[0]));\n return { value: [lonIdx >= 0 ? lonIdx : 0, latIdx >= 0 ? latIdx : 0], name: gs.name };\n }),\n symbolSize: 10,\n symbol: 'diamond',\n itemStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[2] },\n z: 10,\n label: { show: true, formatter: (p: any) => p.data?.name || '', position: 'bottom', color: labelSecondary, fontSize: 9 },\n });\n }\n \n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: (params: any): string => {\n if (Array.isArray(params)) return '';\n const d = params.data;\n if (params.seriesType === 'scatter') return `<div style=\"font-weight:600\">${d?.name || ''}</div>`;\n const [lonIdx, latIdx, val] = d || [];\n const lon = data.longitudes[lonIdx] ?? 'N/A';\n const lat = data.latitudes[latIdx] ?? 'N/A';\n return `<div style=\"font-weight:600\">${metricLabel}</div>\n <div>Lat: ${typeof lat === 'number' ? lat.toFixed(1) : lat}°</div>\n <div>Lon: ${typeof lon === 'number' ? lon.toFixed(1) : lon}°</div>\n <div>${metricLabel}: ${val?.toFixed(1) ?? 'N/A'} ${metricUnit}</div>`;\n },\n },\n grid: { left: 60, right: 50, top: 40, bottom: 80 },\n xAxis: { type: 'category', data: lonLabels, name: 'Longitude', nameLocation: 'middle', nameGap: 30, axisLabel: { interval: Math.floor(lonLabels.length / 12) } },\n yAxis: { type: 'category', data: latLabels, name: 'Latitude', nameLocation: 'middle', nameGap: 40, axisLabel: { interval: Math.floor(latLabels.length / 6) } },\n visualMap: {\n min: range[0],\n max: range[1],\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n hoverLink: true,\n outOfRange: { color: 'rgba(128, 128, 128, 0.12)', opacity: 0.15 },\n inRange: { color: colorMaps[colorMap] || colorMaps.viridis },\n text: [`${range[1]} ${metricUnit}`, `${range[0]} ${metricUnit}`],\n textStyle: { color: labelSecondary },\n },\n series: seriesArray,\n };\n }, [data, satellites, groundStations, colorMap, valueRange, metricLabel, metricUnit, tooltipStyle, labelPrimary, labelSecondary]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// ConjunctionChart - 2D Close Approach Assessment\n// =============================================================================\n\nexport interface ConjunctionChartProps extends CommonChartProps {\n /** Conjunction events */\n events: ConjunctionEvent[];\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Miss distance threshold for warning (km) */\n warningThreshold?: number;\n /** Miss distance threshold for critical (km) */\n criticalThreshold?: number;\n /** Minimum probability to display */\n minProbability?: number;\n /** Show probability on secondary axis */\n showProbability?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConjunctionChart - 2D conjunction/collision assessment timeline\n * \n * USE CASES:\n * - Conjunction screening timeline\n * - Collision avoidance decision support\n * - Debris close approach history\n * - Maneuver planning trigger assessment\n */\nexport const ConjunctionChart = memo(forwardRef<AstroChartHandle, ConjunctionChartProps>(\n function ConjunctionChart({\n events = [], timeRange, warningThreshold = 5, criticalThreshold = 1,\n minProbability: _minProbability, showProbability = true,\n title = 'Conjunction Assessment', width = '100%', height = 350,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const tooltipStyle = useChartTooltipStyle();\n \n const echartsOptions = useMemo(() => {\n if (!events.length) return {};\n \n // Sort by TCA\n const sorted = [...events].sort((a, b) => a.tca - b.tca);\n \n // Miss distance scatter\n const missData = sorted.map(evt => {\n const color = evt.missDistance < criticalThreshold ? STATUS_COLORS.critical\n : evt.missDistance < warningThreshold ? STATUS_COLORS.caution\n : STATUS_COLORS.normal;\n return {\n value: [evt.tca, evt.missDistance],\n itemStyle: { color },\n symbolSize: Math.max(6, Math.min(20, 22 - evt.missDistance * 2)),\n ...evt,\n };\n });\n \n const seriesArray: any[] = [\n {\n name: 'Miss Distance',\n type: 'scatter',\n data: missData,\n symbolSize: (val: any) => val.symbolSize || 10,\n z: 10,\n },\n ];\n \n // Probability bars on secondary axis\n if (showProbability && sorted.some(e => e.probability !== undefined)) {\n seriesArray.push({\n name: 'Probability (Pc)',\n type: 'bar',\n yAxisIndex: 1,\n data: sorted.map(evt => ({\n value: [evt.tca, evt.probability ?? 0],\n itemStyle: {\n color: (evt.probability ?? 0) > 1e-4 ? `${STATUS_COLORS.critical}99`\n : (evt.probability ?? 0) > 1e-6 ? `${STATUS_COLORS.caution}99`\n : `${STATUS_COLORS.normal}60`,\n },\n })),\n barWidth: 8,\n z: 5,\n });\n }\n \n return {\n tooltip: {\n show: true,\n trigger: 'item',\n ...tooltipStyle,\n formatter: (params: any): string => {\n const d = params.data || {};\n if (params.seriesName === 'Probability (Pc)') {\n return `<div>Pc: ${(d.value?.[1] ?? 0).toExponential(2)}</div>`;\n }\n const mdColor = d.missDistance < criticalThreshold ? STATUS_COLORS.critical\n : d.missDistance < warningThreshold ? STATUS_COLORS.caution\n : STATUS_COLORS.normal;\n const tca = new Date(d.value?.[0] ?? d.tca);\n return `<div style=\"font-weight:600;margin-bottom:4px\">${d.primary} × ${d.secondary}</div>\n <div>TCA: ${tca.toLocaleString()}</div>\n <div style=\"color:${mdColor}\">Miss Distance: ${d.missDistance?.toFixed(3)} km</div>\n ${d.probability !== undefined ? `<div>Pc: ${(d.probability * 100).toExponential(2)}%</div>` : ''}\n ${d.relativeVelocity ? `<div>Rel. Velocity: ${d.relativeVelocity.toFixed(2)} km/s</div>` : ''}`;\n },\n },\n legend: { show: showProbability, top: 10 },\n grid: { left: 60, right: showProbability ? 80 : 40, top: 50, bottom: 40 },\n xAxis: {\n type: 'time',\n name: 'Time of Closest Approach',\n ...(timeRange ? { min: timeRange[0], max: timeRange[1] } : {}),\n },\n yAxis: [\n {\n type: 'value',\n name: 'Miss Distance (km)',\n min: 0,\n splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n },\n {\n type: 'log',\n name: showProbability ? 'Probability' : undefined,\n position: 'right',\n show: showProbability,\n min: 1e-10,\n max: 1,\n axisLabel: { formatter: (v: number) => v.toExponential(0) },\n splitLine: { show: false },\n },\n ],\n // Threshold marklines\n series: seriesArray.map((s, i) => ({\n ...s,\n ...(i === 0 ? {\n markLine: {\n silent: true,\n data: [\n { yAxis: criticalThreshold, label: { formatter: `Critical (${criticalThreshold} km)`, color: STATUS_COLORS.critical }, lineStyle: { color: SOFT_STATUS_COLORS.critical, type: 'dashed', width: 1 } },\n { yAxis: warningThreshold, label: { formatter: `Warning (${warningThreshold} km)`, color: STATUS_COLORS.caution }, lineStyle: { color: SOFT_STATUS_COLORS.caution, type: 'dashed', width: 1 } },\n ],\n },\n markArea: {\n silent: true,\n data: [[{ yAxis: 0 }, { yAxis: criticalThreshold }]],\n itemStyle: { color: `${STATUS_COLORS.critical}10` },\n },\n } : {}),\n })),\n };\n }, [events, timeRange, warningThreshold, criticalThreshold, showProbability, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n"],"names":["PowerChart","AttitudeChart","ThermalHeatmapChart","timeLabels","LinkBudgetChart","SubsystemGauge","OrbitChart","ContactWindowChart","height","SpectrumChart","ManeuverBudgetChart","EclipseTimelineChart","RoseDiagram","HeliocentricOrbitPlot","Scatter3DChart","Bar3DChart","Surface3DChart","Lines3DChart","SphericalRadar3DChart","TransferOrbit3DChart","AttitudeHistory3DChart","ConjunctionAssessment3DChart","LaunchCorridor3DChart","AntennaPattern3DChart","WaterfallChart","DopplerTrackChart","LinkMarginChart","ConstellationCoverageChart","_","ConjunctionChart"],"mappings":"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"}