@zendir/ui 0.5.0 → 0.6.1
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.
- package/CHANGELOG.md +419 -386
- package/README.md +640 -631
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/index.js +17 -221
- package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
- package/dist/react/3d/CesiumCaptureSource.js +364 -283
- package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
- package/dist/react/3d/ZenSpace3D.d.ts +2 -3
- package/dist/react/3d/ZenSpace3D.js +1681 -1237
- package/dist/react/3d/ZenSpace3D.js.map +1 -1
- package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DCesium.js +513 -560
- package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
- package/dist/react/3d/ZenSpace3DShaders.js +61 -66
- package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
- package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
- package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DUtils.js +37 -24
- package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
- package/dist/react/3d/capturePngAnalysis.js +42 -36
- package/dist/react/3d/capturePngAnalysis.js.map +1 -1
- package/dist/react/3d/index.d.ts +3 -3
- package/dist/react/3d/index.js +5 -53
- package/dist/react/3d/threeLoader.d.ts +1 -1
- package/dist/react/3d/threeLoader.js +23 -18
- package/dist/react/3d/threeLoader.js.map +1 -1
- package/dist/react/astro/ClassificationBanner.d.ts +2 -3
- package/dist/react/astro/ClassificationBanner.js +95 -79
- package/dist/react/astro/ClassificationBanner.js.map +1 -1
- package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
- package/dist/react/astro/GlobalStatusBar.js +157 -163
- package/dist/react/astro/GlobalStatusBar.js.map +1 -1
- package/dist/react/astro/MissionClock.d.ts +7 -8
- package/dist/react/astro/MissionClock.js +377 -400
- package/dist/react/astro/MissionClock.js.map +1 -1
- package/dist/react/astro/MonitoringIcon.d.ts +1 -2
- package/dist/react/astro/MonitoringIcon.js +422 -358
- package/dist/react/astro/MonitoringIcon.js.map +1 -1
- package/dist/react/astro/Notification.d.ts +1 -2
- package/dist/react/astro/Notification.js +229 -126
- package/dist/react/astro/Notification.js.map +1 -1
- package/dist/react/astro/Progress.d.ts +0 -1
- package/dist/react/astro/Progress.js +199 -141
- package/dist/react/astro/Progress.js.map +1 -1
- package/dist/react/astro/SimulationControls.d.ts +3 -4
- package/dist/react/astro/SimulationControls.js +596 -650
- package/dist/react/astro/SimulationControls.js.map +1 -1
- package/dist/react/astro/StatusIndicator.d.ts +0 -1
- package/dist/react/astro/StatusIndicator.js +236 -170
- package/dist/react/astro/StatusIndicator.js.map +1 -1
- package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
- package/dist/react/astro/UnifiedTimeline.js +2345 -2392
- package/dist/react/astro/UnifiedTimeline.js.map +1 -1
- package/dist/react/astro/index.d.ts +5 -5
- package/dist/react/astro/index.js +1 -25
- package/dist/react/cards/AccessCard.d.ts +0 -1
- package/dist/react/cards/AccessCard.js +471 -405
- package/dist/react/cards/AccessCard.js.map +1 -1
- package/dist/react/cards/OrbitCard.d.ts +0 -1
- package/dist/react/cards/OrbitCard.js +487 -364
- package/dist/react/cards/OrbitCard.js.map +1 -1
- package/dist/react/cards/SpacecraftCard.d.ts +0 -1
- package/dist/react/cards/SpacecraftCard.js +813 -925
- package/dist/react/cards/SpacecraftCard.js.map +1 -1
- package/dist/react/cards/TelemetryCard.d.ts +0 -1
- package/dist/react/cards/TelemetryCard.js +1055 -732
- package/dist/react/cards/TelemetryCard.js.map +1 -1
- package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
- package/dist/react/cards/TelemetryStreamCard.js +323 -297
- package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
- package/dist/react/cards/index.d.ts +1 -1
- package/dist/react/cards/index.js +1 -8
- package/dist/react/charts/GroundTrackMap.d.ts +6 -7
- package/dist/react/charts/GroundTrackMap.js +1377 -1256
- package/dist/react/charts/GroundTrackMap.js.map +1 -1
- package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
- package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
- package/dist/react/charts/index.d.ts +1 -1
- package/dist/react/charts/index.js +7 -100
- package/dist/react/charts/unified/AstroChart.d.ts +1 -2
- package/dist/react/charts/unified/AstroChart.js +1331 -1411
- package/dist/react/charts/unified/AstroChart.js.map +1 -1
- package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
- package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
- package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
- package/dist/react/charts/unified/domain.d.ts +12 -13
- package/dist/react/charts/unified/domain.js +3999 -3145
- package/dist/react/charts/unified/domain.js.map +1 -1
- package/dist/react/charts/unified/generators.d.ts +3 -4
- package/dist/react/charts/unified/generators.js +561 -498
- package/dist/react/charts/unified/generators.js.map +1 -1
- package/dist/react/charts/unified/index.d.ts +1 -1
- package/dist/react/charts/unified/presets.d.ts +14 -15
- package/dist/react/charts/unified/presets.js +857 -994
- package/dist/react/charts/unified/presets.js.map +1 -1
- package/dist/react/charts/unified/sync.d.ts +2 -3
- package/dist/react/charts/unified/sync.js +229 -195
- package/dist/react/charts/unified/sync.js.map +1 -1
- package/dist/react/charts/unified/theme.d.ts +11 -12
- package/dist/react/charts/unified/theme.js +606 -642
- package/dist/react/charts/unified/theme.js.map +1 -1
- package/dist/react/charts/unified/types.d.ts +32 -33
- package/dist/react/charts/unified/useChartStream.d.ts +1 -2
- package/dist/react/charts/unified/useChartStream.js +203 -216
- package/dist/react/charts/unified/useChartStream.js.map +1 -1
- package/dist/react/chatgpt/AppCard.d.ts +1 -2
- package/dist/react/chatgpt/index.d.ts +7 -7
- package/dist/react/chatgpt/index.js +160 -139
- package/dist/react/chatgpt/index.js.map +1 -1
- package/dist/react/context/CategoryContext.d.ts +0 -1
- package/dist/react/context/CategoryContext.js +78 -29
- package/dist/react/context/CategoryContext.js.map +1 -1
- package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
- package/dist/react/context/DisplaySettingsContext.js +205 -156
- package/dist/react/context/DisplaySettingsContext.js.map +1 -1
- package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
- package/dist/react/context/SpatialSelectionContext.js +36 -7
- package/dist/react/context/SpatialSelectionContext.js.map +1 -1
- package/dist/react/core/data/DataTable.d.ts +3 -4
- package/dist/react/core/data/DataTable.js +473 -440
- package/dist/react/core/data/DataTable.js.map +1 -1
- package/dist/react/core/data/DataValue.d.ts +4 -5
- package/dist/react/core/data/DataValue.js +605 -571
- package/dist/react/core/data/DataValue.js.map +1 -1
- package/dist/react/core/data/propertyConfig.d.ts +1 -2
- package/dist/react/core/data/propertyConfig.js +446 -382
- package/dist/react/core/data/propertyConfig.js.map +1 -1
- package/dist/react/core/display/AstroIcon.d.ts +4 -5
- package/dist/react/core/display/AstroIcon.js +339 -429
- package/dist/react/core/display/AstroIcon.js.map +1 -1
- package/dist/react/core/display/Badge.d.ts +2 -3
- package/dist/react/core/display/Badge.js +131 -131
- package/dist/react/core/display/Badge.js.map +1 -1
- package/dist/react/core/display/CardHeader.d.ts +0 -1
- package/dist/react/core/display/CardHeader.js +398 -311
- package/dist/react/core/display/CardHeader.js.map +1 -1
- package/dist/react/core/display/Container.d.ts +2 -3
- package/dist/react/core/display/Container.js +640 -668
- package/dist/react/core/display/Container.js.map +1 -1
- package/dist/react/core/display/CopyButton.d.ts +1 -2
- package/dist/react/core/display/CopyButton.js +158 -101
- package/dist/react/core/display/CopyButton.js.map +1 -1
- package/dist/react/core/display/GlassCard.d.ts +3 -4
- package/dist/react/core/display/GlassCard.js +416 -369
- package/dist/react/core/display/GlassCard.js.map +1 -1
- package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
- package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
- package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
- package/dist/react/core/display/Icon.d.ts +2 -3
- package/dist/react/core/display/Icon.js +172 -143
- package/dist/react/core/display/Icon.js.map +1 -1
- package/dist/react/core/display/Typography.d.ts +24 -25
- package/dist/react/core/display/Typography.js +360 -178
- package/dist/react/core/display/Typography.js.map +1 -1
- package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
- package/dist/react/core/feedback/ConfirmDialog.js +343 -304
- package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
- package/dist/react/core/feedback/Dialog.d.ts +2 -3
- package/dist/react/core/feedback/Dialog.js +189 -197
- package/dist/react/core/feedback/Dialog.js.map +1 -1
- package/dist/react/core/feedback/Toast.d.ts +2 -3
- package/dist/react/core/feedback/Toast.js +346 -207
- package/dist/react/core/feedback/Toast.js.map +1 -1
- package/dist/react/core/index.d.ts +26 -26
- package/dist/react/core/index.js +7 -119
- package/dist/react/core/inputs/Button.d.ts +2 -3
- package/dist/react/core/inputs/Button.js +281 -304
- package/dist/react/core/inputs/Button.js.map +1 -1
- package/dist/react/core/inputs/Checkbox.d.ts +2 -3
- package/dist/react/core/inputs/Checkbox.js +139 -127
- package/dist/react/core/inputs/Checkbox.js.map +1 -1
- package/dist/react/core/inputs/Input.d.ts +3 -4
- package/dist/react/core/inputs/Input.js +277 -285
- package/dist/react/core/inputs/Input.js.map +1 -1
- package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
- package/dist/react/core/inputs/LimitsBar.js +271 -196
- package/dist/react/core/inputs/LimitsBar.js.map +1 -1
- package/dist/react/core/inputs/NumberInput.d.ts +2 -3
- package/dist/react/core/inputs/NumberInput.js +531 -503
- package/dist/react/core/inputs/NumberInput.js.map +1 -1
- package/dist/react/core/inputs/PinInput.d.ts +2 -3
- package/dist/react/core/inputs/PinInput.js +224 -207
- package/dist/react/core/inputs/PinInput.js.map +1 -1
- package/dist/react/core/inputs/Select.d.ts +1 -2
- package/dist/react/core/inputs/Select.js +298 -299
- package/dist/react/core/inputs/Select.js.map +1 -1
- package/dist/react/core/inputs/Toggle.d.ts +2 -3
- package/dist/react/core/inputs/Toggle.js +142 -148
- package/dist/react/core/inputs/Toggle.js.map +1 -1
- package/dist/react/core/layout/Box.d.ts +3 -4
- package/dist/react/core/layout/Box.js +118 -122
- package/dist/react/core/layout/Box.js.map +1 -1
- package/dist/react/core/layout/Center.d.ts +0 -1
- package/dist/react/core/layout/Center.js +45 -32
- package/dist/react/core/layout/Center.js.map +1 -1
- package/dist/react/core/layout/Divider.d.ts +1 -2
- package/dist/react/core/layout/Divider.js +112 -106
- package/dist/react/core/layout/Divider.js.map +1 -1
- package/dist/react/core/layout/Flex.d.ts +4 -5
- package/dist/react/core/layout/Flex.js +120 -124
- package/dist/react/core/layout/Flex.js.map +1 -1
- package/dist/react/core/layout/Grid.d.ts +5 -6
- package/dist/react/core/layout/Grid.js +131 -138
- package/dist/react/core/layout/Grid.js.map +1 -1
- package/dist/react/core/layout/Spacer.d.ts +0 -1
- package/dist/react/core/layout/Spacer.js +36 -29
- package/dist/react/core/layout/Spacer.js.map +1 -1
- package/dist/react/core/layout/Stack.d.ts +4 -5
- package/dist/react/core/layout/Stack.js +127 -70
- package/dist/react/core/layout/Stack.js.map +1 -1
- package/dist/react/core/layout/responsive.d.ts +1 -2
- package/dist/react/core/layout/responsive.js +25 -19
- package/dist/react/core/layout/responsive.js.map +1 -1
- package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
- package/dist/react/core/layout/useBreakpoint.js +119 -66
- package/dist/react/core/layout/useBreakpoint.js.map +1 -1
- package/dist/react/core/navigation/AppBar.d.ts +1 -2
- package/dist/react/core/navigation/AppBar.js +827 -805
- package/dist/react/core/navigation/AppBar.js.map +1 -1
- package/dist/react/core/navigation/Pagination.d.ts +2 -3
- package/dist/react/core/navigation/Pagination.js +207 -187
- package/dist/react/core/navigation/Pagination.js.map +1 -1
- package/dist/react/core/navigation/SideNav.d.ts +5 -6
- package/dist/react/core/navigation/SideNav.js +855 -629
- package/dist/react/core/navigation/SideNav.js.map +1 -1
- package/dist/react/core/navigation/Tabs.d.ts +0 -1
- package/dist/react/core/navigation/Tabs.js +113 -119
- package/dist/react/core/navigation/Tabs.js.map +1 -1
- package/dist/react/core/overlays/Popover.d.ts +2 -3
- package/dist/react/core/overlays/Popover.js +303 -282
- package/dist/react/core/overlays/Popover.js.map +1 -1
- package/dist/react/core/overlays/SidePanel.d.ts +1 -2
- package/dist/react/core/overlays/SidePanel.js +217 -212
- package/dist/react/core/overlays/SidePanel.js.map +1 -1
- package/dist/react/core/overlays/Tooltip.d.ts +1 -2
- package/dist/react/core/overlays/Tooltip.js +170 -176
- package/dist/react/core/overlays/Tooltip.js.map +1 -1
- package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
- package/dist/react/core/widgets/ActivityPlanner.js +855 -517
- package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
- package/dist/react/core/widgets/Capture.d.ts +2 -3
- package/dist/react/core/widgets/Capture.js +965 -779
- package/dist/react/core/widgets/Capture.js.map +1 -1
- package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
- package/dist/react/core/widgets/ChatPanel.js +1734 -1034
- package/dist/react/core/widgets/ChatPanel.js.map +1 -1
- package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
- package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
- package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
- package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
- package/dist/react/core/widgets/CommandBuilder.js +624 -516
- package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
- package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
- package/dist/react/core/widgets/ConnectionForm.js +528 -492
- package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
- package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
- package/dist/react/core/widgets/FileExplorer.js +617 -505
- package/dist/react/core/widgets/FileExplorer.js.map +1 -1
- package/dist/react/core/widgets/HexViewer.d.ts +2 -3
- package/dist/react/core/widgets/HexViewer.js +1353 -1091
- package/dist/react/core/widgets/HexViewer.js.map +1 -1
- package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
- package/dist/react/core/widgets/ImageFrame.js +230 -193
- package/dist/react/core/widgets/ImageFrame.js.map +1 -1
- package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
- package/dist/react/core/widgets/ImageGallery.js +380 -314
- package/dist/react/core/widgets/ImageGallery.js.map +1 -1
- package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
- package/dist/react/core/widgets/ImagePanel.js +110 -101
- package/dist/react/core/widgets/ImagePanel.js.map +1 -1
- package/dist/react/core/widgets/LogViewer.d.ts +2 -3
- package/dist/react/core/widgets/LogViewer.js +711 -607
- package/dist/react/core/widgets/LogViewer.js.map +1 -1
- package/dist/react/core/widgets/MessageStream.d.ts +3 -4
- package/dist/react/core/widgets/MessageStream.js +514 -444
- package/dist/react/core/widgets/MessageStream.js.map +1 -1
- package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
- package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
- package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
- package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
- package/dist/react/core/widgets/PacketViewer.js +550 -421
- package/dist/react/core/widgets/PacketViewer.js.map +1 -1
- package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
- package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
- package/dist/react/hooks/index.d.ts +5 -5
- package/dist/react/hooks/useAccessWindows.d.ts +0 -1
- package/dist/react/hooks/useCompactMode.d.ts +1 -1
- package/dist/react/hooks/useCompactMode.js +104 -58
- package/dist/react/hooks/useCompactMode.js.map +1 -1
- package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
- package/dist/react/hooks/useSimulationScene.d.ts +1 -2
- package/dist/react/hooks/useSimulationScene.js +481 -374
- package/dist/react/hooks/useSimulationScene.js.map +1 -1
- package/dist/react/index.d.ts +3 -3
- package/dist/react/panels/LayerControlPanel.d.ts +1 -2
- package/dist/react/panels/LayerControlPanel.js +223 -180
- package/dist/react/panels/LayerControlPanel.js.map +1 -1
- package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
- package/dist/react/panels/ObjectInventoryPanel.js +315 -250
- package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
- package/dist/react/panels/index.d.ts +1 -1
- package/dist/react/panels/index.js +1 -6
- package/dist/react/shared/ErrorBoundary.d.ts +1 -2
- package/dist/react/shared/ErrorBoundary.js +170 -139
- package/dist/react/shared/ErrorBoundary.js.map +1 -1
- package/dist/react/shared/Skeleton.d.ts +1 -2
- package/dist/react/shared/Skeleton.js +300 -301
- package/dist/react/shared/Skeleton.js.map +1 -1
- package/dist/react/theme/ThemeProvider.d.ts +2 -321
- package/dist/react/theme/ThemeProvider.js +313 -939
- package/dist/react/theme/ThemeProvider.js.map +1 -1
- package/dist/react/theme/cardAccent.d.ts +1 -2
- package/dist/react/theme/cardAccent.js +196 -126
- package/dist/react/theme/cardAccent.js.map +1 -1
- package/dist/react/theme/config.d.ts +0 -1
- package/dist/react/theme/config.js +47 -25
- package/dist/react/theme/config.js.map +1 -1
- package/dist/react/theme/index.d.ts +2 -2
- package/dist/react/theme/index.js +1 -16
- package/dist/react/theme/types.d.ts +332 -0
- package/dist/react/theme/types.js +39 -0
- package/dist/react/theme/types.js.map +1 -0
- package/dist/react/types.d.ts +8 -8
- package/dist/react/types.js +147 -47
- package/dist/react/types.js.map +1 -1
- package/dist/react/utils/categoryPalette.d.ts +0 -1
- package/dist/react/utils/categoryPalette.js +91 -102
- package/dist/react/utils/categoryPalette.js.map +1 -1
- package/dist/react/utils/index.d.ts +5 -5
- package/dist/react/utils/index.js +457 -371
- package/dist/react/utils/index.js.map +1 -1
- package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
- package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
- package/dist/react/visualizations/NavBallCard.d.ts +0 -1
- package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
- package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
- package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
- package/dist/react/visualizations/index.d.ts +3 -3
- package/dist/react.d.ts +2 -1
- package/dist/react.js +17 -221
- package/dist/shaders/atmosphere.frag.js +6 -5
- package/dist/shaders/atmosphere.frag.js.map +1 -1
- package/dist/shaders/atmosphere.vert.js +6 -5
- package/dist/shaders/atmosphere.vert.js.map +1 -1
- package/dist/shaders/stars.frag.js +6 -5
- package/dist/shaders/stars.frag.js.map +1 -1
- package/dist/shaders/stars.vert.js +6 -5
- package/dist/shaders/stars.vert.js.map +1 -1
- package/dist/style.css +26 -3
- package/dist/tokens/core.d.ts +159 -0
- package/dist/tokens/core.js +144 -0
- package/dist/tokens/core.js.map +1 -0
- package/dist/tokens/css-vars.d.ts +213 -2
- package/dist/tokens/css-vars.js +590 -227
- package/dist/tokens/css-vars.js.map +1 -1
- package/dist/tokens/index.d.ts +31 -228
- package/dist/tokens/index.js +281 -366
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/palettes/astro.d.ts +129 -0
- package/dist/tokens/palettes/astro.js +112 -0
- package/dist/tokens/palettes/astro.js.map +1 -0
- package/dist/tokens/palettes/index.d.ts +288 -0
- package/dist/tokens/palettes/index.js +35 -0
- package/dist/tokens/palettes/index.js.map +1 -0
- package/dist/tokens/palettes/tailwind.d.ts +324 -0
- package/dist/tokens/palettes/tailwind.js +201 -0
- package/dist/tokens/palettes/tailwind.js.map +1 -0
- package/dist/tokens/palettes/zendir.d.ts +126 -0
- package/dist/tokens/palettes/zendir.js +92 -0
- package/dist/tokens/palettes/zendir.js.map +1 -0
- package/dist/tokens/themes.d.ts +30 -0
- package/dist/tokens/themes.js +704 -0
- package/dist/tokens/themes.js.map +1 -0
- package/dist/tokens/tokens.css +533 -155
- package/dist/types/index.d.ts +2 -2
- package/package.json +310 -313
- package/dist/index.js.map +0 -1
- package/dist/react/3d/index.js.map +0 -1
- package/dist/react/astro/index.js.map +0 -1
- package/dist/react/cards/index.js.map +0 -1
- package/dist/react/charts/index.js.map +0 -1
- package/dist/react/core/index.js.map +0 -1
- package/dist/react/panels/index.js.map +0 -1
- package/dist/react/theme/astro-tokens.d.ts +0 -153
- package/dist/react/theme/index.js.map +0 -1
- package/dist/react.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PowerOverviewChart.js","sources":["../../../../src/react/charts/unified/PowerOverviewChart.tsx"],"sourcesContent":["/**\n * Power Overview Chart - Combined Timeline Visualization\n * \n * Award-winning UX combining:\n * - Power generation timeline\n * - State regions (Running, Safe, Shutdown)\n * - Mode indicators (Inertial, Sun, Nadir, Velocity, Ground)\n * - Eclipse periods\n * - Event markers with dots on timeline\n * - Interactive tooltips\n * - Status indicators\n * \n * @module @zendir/ui/charts/PowerOverviewChart\n */\n\nimport React, { useMemo } from 'react';\nimport { AstroChart } from './AstroChart';\nimport type { AstroChartProps, ChartStatus } from './types';\nimport { useTheme } from '../../theme';\n\n// =============================================================================\n// Status Shape SVGs - Astro UX compliant (color + shape for accessibility)\n// =============================================================================\n\nconst STATUS_BORDER_COLORS: Record<ChartStatus, string> = {\n off: '#3c3e42',\n standby: '#285766',\n normal: '#005a00',\n caution: '#645600',\n serious: '#664618',\n critical: '#661102',\n};\n\ninterface StatusShapeProps {\n status: ChartStatus;\n size: number;\n color: string;\n borderColor?: string;\n glow?: boolean;\n}\n\nconst StatusShape = ({ status, size, color, borderColor, glow = true }: StatusShapeProps): React.ReactElement => {\n const hasBorder = !!borderColor;\n const strokeWidth = hasBorder ? 1 : 0;\n const glowFilter = glow && !hasBorder ? `drop-shadow(0 0 4px ${color})` : undefined;\n \n const renderShape = () => {\n switch (status) {\n case 'off':\n return <circle cx=\"6\" cy=\"6\" r={hasBorder ? 2.5 : 3} fill={color} stroke={borderColor} strokeWidth={strokeWidth} />;\n case 'standby':\n return <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />;\n case 'normal':\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r={hasBorder ? 4.5 : 5}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'caution':\n return (\n <rect\n x={hasBorder ? 1.5 : 1}\n y={hasBorder ? 1.5 : 1}\n width={hasBorder ? 9 : 10}\n height={hasBorder ? 9 : 10}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'serious':\n return (\n <polygon\n points=\"6,1 11,6 6,11 1,6\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'critical':\n return (\n <polygon\n points=\"6,11 1,2 11,2\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n default:\n return null;\n }\n };\n \n return (\n <svg \n viewBox=\"0 0 12 12\" \n width={size} \n height={size}\n style={{ filter: glowFilter }}\n >\n {renderShape()}\n </svg>\n );\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type PowerState = 'running' | 'safe' | 'shutdown';\nexport type OperationalMode = 'none' | 'inertial' | 'sun' | 'nadir' | 'velocity' | 'ground';\nexport type EventType = 'scenario' | 'operator' | 'spacecraft' | 'ground';\n\nexport interface PowerTimelinePoint {\n /** Timestamp (Unix ms or Date) */\n time: number | Date;\n /** Power generated (W) */\n power: number;\n /** Battery percentage (0-100) */\n battery?: number;\n /** System state */\n state: PowerState;\n /** Operational mode */\n mode: OperationalMode;\n /** Eclipse flag */\n eclipse?: boolean;\n}\n\nexport interface PowerEvent {\n /** Event timestamp */\n time: number | Date;\n /** Event type */\n type: EventType;\n /** Event label */\n label: string;\n /** Optional metadata */\n meta?: Record<string, unknown>;\n}\n\nexport interface PowerOverviewChartProps {\n /** Timeline data points */\n data: PowerTimelinePoint[];\n /** Event markers */\n events?: PowerEvent[];\n /** Chart title */\n title?: string;\n /** Chart height */\n height?: number | string;\n /** Show battery as secondary series */\n showBattery?: boolean;\n /** Show legend */\n showLegend?: boolean;\n /** Enable export */\n enableExport?: boolean;\n /** Custom class name */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n /** Show event dots on timeline */\n showEventDots?: boolean;\n /** Show status indicator */\n showStatus?: boolean;\n /** Enable zoom controls */\n enableZoom?: boolean;\n}\n\n// =============================================================================\n// Color Schemes\n// =============================================================================\n\nconst STATE_COLORS: Record<PowerState, string> = {\n running: '#0d4d4d', // Deep teal\n safe: '#8b7355', // Brown/gold\n shutdown: '#1a1a1a', // Near black\n};\n\nconst MODE_COLORS: Record<OperationalMode, string> = {\n none: '#1a2332',\n inertial: '#1e3a5f',\n sun: '#8b7355',\n nadir: '#2d5a4d',\n velocity: '#2e4a7c',\n ground: '#4a3d6e',\n};\n\nconst EVENT_COLORS: Record<EventType, string> = {\n scenario: '#ffffff',\n operator: '#ff6b9d',\n spacecraft: '#a78bfa',\n ground: '#4ade80',\n};\n\nconst ECLIPSE_COLOR = 'rgba(10, 10, 15, 0.6)';\n\n// =============================================================================\n// PowerOverviewChart Component\n// =============================================================================\n\nexport function PowerOverviewChart(props: PowerOverviewChartProps) {\n const {\n data,\n events = [],\n title = 'Power - Power Generated',\n height = 300,\n showBattery = false,\n showLegend = false,\n enableExport = true,\n className,\n compact = false,\n showEventDots = true,\n showStatus = true,\n enableZoom = true,\n } = props;\n\n const { tokens, mode } = useTheme();\n\n // Calculate current status from latest data\n const currentStatus = useMemo(() => {\n if (!data || data.length === 0) return 'off';\n const latest = data[data.length - 1];\n if (latest.state === 'shutdown') return 'critical';\n if (latest.state === 'safe') return 'caution';\n if (latest.eclipse) return 'serious';\n return 'normal';\n }, [data]);\n\n const chartConfig = useMemo<AstroChartProps>(() => {\n if (!data || data.length === 0) {\n return {\n type: 'line',\n series: [],\n height,\n };\n }\n\n // Extract time range\n const times = data.map(d => typeof d.time === 'number' ? d.time : d.time.getTime());\n const minTime = Math.min(...times);\n const maxTime = Math.max(...times);\n\n // Build state regions with proper colors\n const stateRegions: Array<[{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]> = [];\n let currentState = data[0].state;\n let regionStart = minTime;\n\n data.forEach((point, idx) => {\n const pointTime = typeof point.time === 'number' ? point.time : point.time.getTime();\n \n if (point.state !== currentState || idx === data.length - 1) {\n const regionEnd = idx === data.length - 1 ? maxTime : pointTime;\n stateRegions.push([\n { \n xAxis: regionStart,\n itemStyle: { color: STATE_COLORS[currentState] }\n },\n { xAxis: regionEnd }\n ]);\n regionStart = pointTime;\n currentState = point.state;\n }\n });\n\n // Build eclipse regions (overlay on top of state regions)\n const eclipseRegions: Array<[{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]> = [];\n let inEclipse = false;\n let eclipseStart = minTime;\n\n data.forEach((point, _idx) => {\n const pointTime = typeof point.time === 'number' ? point.time : point.time.getTime();\n \n if (point.eclipse && !inEclipse) {\n eclipseStart = pointTime;\n inEclipse = true;\n } else if (!point.eclipse && inEclipse) {\n eclipseRegions.push([\n { \n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR }\n },\n { xAxis: pointTime }\n ]);\n inEclipse = false;\n }\n });\n\n // If still in eclipse at the end\n if (inEclipse) {\n eclipseRegions.push([\n { \n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR }\n },\n { xAxis: maxTime }\n ]);\n }\n\n // Build series\n const series: AstroChartProps['series'] = [\n {\n id: 'power',\n name: 'Power (W)',\n data: data.map(d => ({\n time: typeof d.time === 'number' ? d.time : d.time.getTime(),\n value: d.power,\n })),\n color: '#ffffff',\n lineStyle: { width: 2 },\n areaStyle: { opacity: 0.3, color: 'rgba(255, 255, 255, 0.2)' },\n smooth: true,\n yAxisIndex: 0,\n },\n ];\n\n if (showBattery) {\n series.push({\n id: 'battery',\n name: 'Battery %',\n data: data.map(d => ({\n time: typeof d.time === 'number' ? d.time : d.time.getTime(),\n value: d.battery ?? 0,\n })),\n color: '#4ade80',\n lineStyle: { width: 2, type: 'dashed' },\n smooth: true,\n yAxisIndex: 1,\n });\n }\n\n // Event markers - use dots for timeline, diamonds for emphasis\n const maxPower = Math.max(...data.map(d => d.power), 100);\n \n // Event dots positioned just above the chart area\n const eventDots = showEventDots ? events.map(event => ({\n coord: [\n typeof event.time === 'number' ? event.time : event.time.getTime(),\n maxPower * 0.95\n ] as [number, number],\n name: event.label,\n symbol: event.type === 'scenario' ? 'diamond' : 'circle',\n symbolSize: event.type === 'scenario' ? 10 : 8,\n itemStyle: {\n color: EVENT_COLORS[event.type],\n borderColor: tokens.colors.background.base,\n borderWidth: 2,\n shadowBlur: 4,\n shadowColor: EVENT_COLORS[event.type],\n },\n label: {\n show: false,\n },\n emphasis: {\n scale: true,\n itemStyle: {\n borderWidth: 3,\n shadowBlur: 8,\n },\n label: {\n show: true,\n fontSize: 12,\n color: tokens.colors.text.primary,\n backgroundColor: tokens.colors.background.surface,\n borderColor: EVENT_COLORS[event.type],\n borderWidth: 1,\n padding: [6, 10],\n borderRadius: 6,\n formatter: `{b}`,\n },\n },\n })) : [];\n\n // Dual axis config\n const yAxisConfig: AstroChartProps['yAxis'] = showBattery ? [\n {\n type: 'value',\n name: 'Power (W)',\n position: 'left',\n min: 0,\n splitLine: { show: true },\n },\n {\n type: 'value',\n name: 'Battery %',\n position: 'right',\n min: 0,\n max: 100,\n splitLine: { show: false },\n },\n ] : {\n type: 'value',\n name: 'Power (W)',\n min: 0,\n splitLine: { show: true },\n };\n\n return {\n type: 'area',\n title,\n subtitle: compact ? undefined : `System states, operational modes, eclipse periods, and events`,\n height,\n series,\n xAxis: {\n type: 'time',\n showGrid: true,\n splitLine: { show: true },\n },\n yAxis: yAxisConfig,\n tooltip: {\n enabled: true,\n trigger: 'axis',\n crosshair: 'both',\n formatter: (params: any) => {\n const param = Array.isArray(params) ? params[0] : params;\n if (!param) return '';\n \n const time = new Date(param.data[0]);\n const dataPoint = data.find(d => {\n const t = typeof d.time === 'number' ? d.time : d.time.getTime();\n return t === param.data[0];\n });\n \n let html = `<div style=\"font-size: 13px; min-width: 220px; font-family: ${tokens.typography.fontFamily.primary};\">`;\n html += `<div style=\"font-weight: 600; margin-bottom: 10px; color: ${tokens.colors.text.primary}; font-size: 14px;\">${time.toLocaleTimeString()}</div>`;\n \n // Power values\n if (Array.isArray(params)) {\n params.forEach((p: any) => {\n const value = p.data[1];\n const seriesName = p.seriesName;\n const color = p.color;\n html += `<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 6px;\">`;\n html += `<span style=\"width: 12px; height: 12px; background: ${color}; border-radius: 3px; box-shadow: 0 0 4px ${color};\"></span>`;\n html += `<span style=\"color: ${tokens.colors.text.secondary};\">${seriesName}: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)}</strong></span>`;\n html += `</div>`;\n });\n } else {\n const value = param.data[1];\n html += `<div style=\"margin-bottom: 6px; color: ${tokens.colors.text.secondary};\">Power: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)} W</strong></div>`;\n }\n \n // System info\n if (dataPoint) {\n html += `<div style=\"margin-top: 10px; padding-top: 10px; border-top: 1px solid ${tokens.colors.border.muted};\">`;\n html += `<div style=\"display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; font-size: 12px;\">`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">STATE</span>`;\n html += `<span style=\"color: ${STATE_COLORS[dataPoint.state]}; font-weight: 600;\">${dataPoint.state.toUpperCase()}</span>`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">MODE</span>`;\n html += `<span style=\"color: ${MODE_COLORS[dataPoint.mode]}; font-weight: 600;\">${dataPoint.mode.toUpperCase()}</span>`;\n if (dataPoint.battery !== undefined) {\n html += `<span style=\"color: ${tokens.colors.text.muted};\">BATTERY</span>`;\n html += `<span style=\"color: ${tokens.colors.text.primary}; font-weight: 600;\">${dataPoint.battery.toFixed(1)}%</span>`;\n }\n html += `</div>`;\n if (dataPoint.eclipse) {\n html += `<div style=\"color: ${tokens.colors.status.caution}; font-weight: 600; margin-top: 8px; font-size: 12px; display: flex; align-items: center; gap: 6px;\">`;\n html += `<span style=\"font-weight: 600;\">ECLIPSE</span>`;\n html += `</div>`;\n }\n html += `</div>`;\n }\n \n html += `</div>`;\n return html;\n },\n },\n legend: showLegend ? {\n show: true,\n position: 'top',\n orient: 'horizontal',\n } : { show: false },\n zoom: enableZoom ? {\n enabled: true,\n type: 'both',\n axis: 'x',\n start: 0,\n end: 100,\n } : undefined,\n annotations: {\n markAreas: {\n data: [...stateRegions, ...eclipseRegions],\n itemStyle: {\n opacity: 1,\n },\n },\n markPoints: eventDots,\n },\n export: enableExport ? {\n enabled: true,\n formats: ['png', 'svg', 'csv'],\n getExportFileName: () => `zendir-power-overview-${Date.now()}`,\n } : undefined,\n infoTooltip: compact ? undefined : {\n content: (\n <div style={{ fontSize: '13px', lineHeight: '1.6' }}>\n <div style={{ marginBottom: '8px', fontWeight: 500 }}>Interactive Power Timeline</div>\n <div style={{ marginBottom: '4px' }}>• Background colors show system states</div>\n <div style={{ marginBottom: '4px' }}>• Dark overlays indicate eclipse periods</div>\n <div style={{ marginBottom: '4px' }}>• Diamond markers show key events</div>\n <div>• Scroll to zoom, drag to pan</div>\n </div>\n ),\n },\n className,\n };\n }, [data, events, title, height, showBattery, showLegend, enableExport, className, compact, showEventDots, enableZoom, tokens]);\n\n return (\n <div style={{ position: 'relative', width: '100%' }}>\n {showStatus && (\n <div style={{\n position: 'absolute',\n top: 10,\n right: 60,\n zIndex: 10,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '6px 12px',\n background: tokens.colors.background.surface,\n border: `1px solid ${tokens.colors.border.default}`,\n borderRadius: tokens.borderRadius.md,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.primary,\n }}>\n <StatusShape\n status={currentStatus}\n size={10}\n color={tokens.colors.status[currentStatus] || tokens.colors.status.off}\n borderColor={mode === 'light' ? STATUS_BORDER_COLORS[currentStatus] : undefined}\n glow={mode !== 'light'}\n />\n <span style={{ \n color: tokens.colors.text.primary,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}>\n {currentStatus}\n </span>\n </div>\n )}\n <AstroChart {...chartConfig} />\n </div>\n );\n}\n\n// =============================================================================\n// Sample Data Generator\n// =============================================================================\n\nexport function generateSamplePowerData(durationSeconds = 3600): {\n data: PowerTimelinePoint[];\n events: PowerEvent[];\n} {\n const dataPoints: PowerTimelinePoint[] = [];\n const eventList: PowerEvent[] = [];\n \n const startTime = Date.now();\n const interval = 10;\n \n let currentState: PowerState = 'running';\n let currentMode: OperationalMode = 'inertial';\n let inEclipse = false;\n \n for (let i = 0; i <= durationSeconds; i += interval) {\n const time = startTime + i * 1000;\n \n // State transitions\n if (i === 300) currentState = 'safe';\n if (i === 600) currentState = 'running';\n if (i === 1800) currentState = 'shutdown';\n if (i === 2100) currentState = 'running';\n if (i === 2400) currentState = 'safe';\n if (i === 2700) currentState = 'running';\n \n // Mode transitions\n if (i === 200) currentMode = 'sun';\n if (i === 500) currentMode = 'inertial';\n if (i === 800) currentMode = 'nadir';\n if (i === 1100) currentMode = 'velocity';\n if (i === 1400) currentMode = 'ground';\n if (i === 1700) currentMode = 'sun';\n if (i === 2000) currentMode = 'inertial';\n if (i === 2300) currentMode = 'nadir';\n if (i === 2600) currentMode = 'velocity';\n if (i === 2900) currentMode = 'ground';\n if (i === 3200) currentMode = 'sun';\n \n // Eclipse periods\n if (i >= 1700 && i <= 2100) inEclipse = true;\n else if (i >= 2400 && i <= 2700) inEclipse = true;\n else inEclipse = false;\n \n // Battery\n let battery = 95;\n if (inEclipse) {\n battery = 95 - ((i - 1700) % 400) * 0.1;\n } else if (currentMode === 'sun') {\n battery = 70 + Math.sin(i * 0.01) * 15;\n } else {\n battery = 90 + Math.sin(i * 0.005) * 5;\n }\n battery = Math.max(10, Math.min(100, battery));\n \n // Power\n let power = 0;\n if (inEclipse) {\n power = 0;\n } else if (currentMode === 'sun') {\n power = 300 + Math.sin(i * 0.02) * 50;\n } else if (currentMode === 'ground' || currentMode === 'nadir') {\n power = 150 + Math.sin(i * 0.03) * 30;\n } else {\n power = 50 + Math.sin(i * 0.01) * 20;\n }\n \n if (currentState === 'safe') power *= 0.3;\n if (currentState === 'shutdown') power = 0;\n \n dataPoints.push({\n time,\n power,\n battery,\n state: currentState,\n mode: currentMode,\n eclipse: inEclipse,\n });\n }\n \n // Events\n const eventTimes = [250, 420, 550, 900, 1300, 1650, 1850, 2200, 2500, 2800, 3100, 3400];\n const eventTypes: EventType[] = ['scenario', 'operator', 'spacecraft', 'ground'];\n \n eventTimes.forEach((timeOffset, idx) => {\n eventList.push({\n time: startTime + timeOffset * 1000,\n type: eventTypes[idx % eventTypes.length],\n label: `Event ${idx + 1}`,\n });\n });\n \n return { data: dataPoints, events: eventList };\n}\n\nexport default PowerOverviewChart;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PowerOverviewChart.js","names":[],"sources":["../../../../src/react/charts/unified/PowerOverviewChart.tsx"],"sourcesContent":["/**\r\n * Power Overview Chart - Combined Timeline Visualization\r\n *\r\n * Award-winning UX combining:\r\n * - Power generation timeline\r\n * - State regions (Running, Safe, Shutdown)\r\n * - Mode indicators (Inertial, Sun, Nadir, Velocity, Ground)\r\n * - Eclipse periods\r\n * - Event markers with dots on timeline\r\n * - Interactive tooltips\r\n * - Status indicators\r\n *\r\n * @module @zendir/ui/charts/PowerOverviewChart\r\n */\r\n\r\nimport React, { useMemo } from \"react\";\r\nimport { AstroChart } from \"./AstroChart\";\r\nimport type { AstroChartProps, ChartStatus } from \"./types\";\r\nimport { useTheme } from \"../../theme\";\r\n\r\n// =============================================================================\r\n// Status Shape SVGs - Astro UX compliant (color + shape for accessibility)\r\n// =============================================================================\r\n\r\nconst STATUS_BORDER_COLORS: Record<ChartStatus, string> = {\r\n off: \"#3c3e42\",\r\n standby: \"#285766\",\r\n normal: \"#005a00\",\r\n caution: \"#645600\",\r\n serious: \"#664618\",\r\n critical: \"#661102\",\r\n};\r\n\r\ninterface StatusShapeProps {\r\n status: ChartStatus;\r\n size: number;\r\n color: string;\r\n borderColor?: string;\r\n glow?: boolean;\r\n}\r\n\r\nconst StatusShape = ({\r\n status,\r\n size,\r\n color,\r\n borderColor,\r\n glow = true,\r\n}: StatusShapeProps): React.ReactElement => {\r\n const hasBorder = !!borderColor;\r\n const strokeWidth = hasBorder ? 1 : 0;\r\n const glowFilter =\r\n glow && !hasBorder ? `drop-shadow(0 0 4px ${color})` : undefined;\r\n\r\n const renderShape = () => {\r\n switch (status) {\r\n case \"off\":\r\n return (\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r={hasBorder ? 2.5 : 3}\r\n fill={color}\r\n stroke={borderColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n );\r\n case \"standby\":\r\n return (\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3.5\"\r\n fill=\"none\"\r\n stroke={color}\r\n strokeWidth=\"2\"\r\n />\r\n );\r\n case \"normal\":\r\n return (\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r={hasBorder ? 4.5 : 5}\r\n fill={color}\r\n stroke={borderColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n );\r\n case \"caution\":\r\n return (\r\n <rect\r\n x={hasBorder ? 1.5 : 1}\r\n y={hasBorder ? 1.5 : 1}\r\n width={hasBorder ? 9 : 10}\r\n height={hasBorder ? 9 : 10}\r\n fill={color}\r\n stroke={borderColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n );\r\n case \"serious\":\r\n return (\r\n <polygon\r\n points=\"6,1 11,6 6,11 1,6\"\r\n fill={color}\r\n stroke={borderColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n );\r\n case \"critical\":\r\n return (\r\n <polygon\r\n points=\"6,11 1,2 11,2\"\r\n fill={color}\r\n stroke={borderColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n );\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return (\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n width={size}\r\n height={size}\r\n style={{ filter: glowFilter }}\r\n >\r\n {renderShape()}\r\n </svg>\r\n );\r\n};\r\n\r\n// =============================================================================\r\n// Types\r\n// =============================================================================\r\n\r\nexport type PowerState = \"running\" | \"safe\" | \"shutdown\";\r\nexport type OperationalMode =\r\n | \"none\"\r\n | \"inertial\"\r\n | \"sun\"\r\n | \"nadir\"\r\n | \"velocity\"\r\n | \"ground\";\r\nexport type EventType = \"scenario\" | \"operator\" | \"spacecraft\" | \"ground\";\r\n\r\nexport interface PowerTimelinePoint {\r\n /** Timestamp (Unix ms or Date) */\r\n time: number | Date;\r\n /** Power generated (W) */\r\n power: number;\r\n /** Battery percentage (0-100) */\r\n battery?: number;\r\n /** System state */\r\n state: PowerState;\r\n /** Operational mode */\r\n mode: OperationalMode;\r\n /** Eclipse flag */\r\n eclipse?: boolean;\r\n}\r\n\r\nexport interface PowerEvent {\r\n /** Event timestamp */\r\n time: number | Date;\r\n /** Event type */\r\n type: EventType;\r\n /** Event label */\r\n label: string;\r\n /** Optional metadata */\r\n meta?: Record<string, unknown>;\r\n}\r\n\r\nexport interface PowerOverviewChartProps {\r\n /** Timeline data points */\r\n data: PowerTimelinePoint[];\r\n /** Event markers */\r\n events?: PowerEvent[];\r\n /** Chart title */\r\n title?: string;\r\n /** Chart height */\r\n height?: number | string;\r\n /** Show battery as secondary series */\r\n showBattery?: boolean;\r\n /** Show legend */\r\n showLegend?: boolean;\r\n /** Enable export */\r\n enableExport?: boolean;\r\n /** Custom class name */\r\n className?: string;\r\n /** Compact mode */\r\n compact?: boolean;\r\n /** Show event dots on timeline */\r\n showEventDots?: boolean;\r\n /** Show status indicator */\r\n showStatus?: boolean;\r\n /** Enable zoom controls */\r\n enableZoom?: boolean;\r\n}\r\n\r\n// =============================================================================\r\n// Color Schemes\r\n// =============================================================================\r\n\r\nconst STATE_COLORS: Record<PowerState, string> = {\r\n running: \"#0d4d4d\", // Deep teal\r\n safe: \"#8b7355\", // Brown/gold\r\n shutdown: \"#1a1a1a\", // Near black\r\n};\r\n\r\nconst MODE_COLORS: Record<OperationalMode, string> = {\r\n none: \"#1a2332\",\r\n inertial: \"#1e3a5f\",\r\n sun: \"#8b7355\",\r\n nadir: \"#2d5a4d\",\r\n velocity: \"#2e4a7c\",\r\n ground: \"#4a3d6e\",\r\n};\r\n\r\nconst EVENT_COLORS: Record<EventType, string> = {\r\n scenario: \"#ffffff\",\r\n operator: \"#ff6b9d\",\r\n spacecraft: \"#a78bfa\",\r\n ground: \"#4ade80\",\r\n};\r\n\r\nconst ECLIPSE_COLOR = \"rgba(10, 10, 15, 0.6)\";\r\n\r\n// =============================================================================\r\n// PowerOverviewChart Component\r\n// =============================================================================\r\n\r\nexport function PowerOverviewChart(props: PowerOverviewChartProps) {\r\n const {\r\n data,\r\n events = [],\r\n title = \"Power - Power Generated\",\r\n height = 300,\r\n showBattery = false,\r\n showLegend = false,\r\n enableExport = true,\r\n className,\r\n compact = false,\r\n showEventDots = true,\r\n showStatus = true,\r\n enableZoom = true,\r\n } = props;\r\n\r\n const { tokens, mode } = useTheme();\r\n\r\n // Calculate current status from latest data\r\n const currentStatus = useMemo(() => {\r\n if (!data || data.length === 0) return \"off\";\r\n const latest = data[data.length - 1];\r\n if (latest.state === \"shutdown\") return \"critical\";\r\n if (latest.state === \"safe\") return \"caution\";\r\n if (latest.eclipse) return \"serious\";\r\n return \"normal\";\r\n }, [data]);\r\n\r\n const chartConfig = useMemo<AstroChartProps>(() => {\r\n if (!data || data.length === 0) {\r\n return {\r\n type: \"line\",\r\n series: [],\r\n height,\r\n };\r\n }\r\n\r\n // Extract time range\r\n const times = data.map((d) =>\r\n typeof d.time === \"number\" ? d.time : d.time.getTime(),\r\n );\r\n const minTime = Math.min(...times);\r\n const maxTime = Math.max(...times);\r\n\r\n // Build state regions with proper colors\r\n const stateRegions: Array<\r\n [{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]\r\n > = [];\r\n let currentState = data[0].state;\r\n let regionStart = minTime;\r\n\r\n data.forEach((point, idx) => {\r\n const pointTime =\r\n typeof point.time === \"number\" ? point.time : point.time.getTime();\r\n\r\n if (point.state !== currentState || idx === data.length - 1) {\r\n const regionEnd = idx === data.length - 1 ? maxTime : pointTime;\r\n stateRegions.push([\r\n {\r\n xAxis: regionStart,\r\n itemStyle: { color: STATE_COLORS[currentState] },\r\n },\r\n { xAxis: regionEnd },\r\n ]);\r\n regionStart = pointTime;\r\n currentState = point.state;\r\n }\r\n });\r\n\r\n // Build eclipse regions (overlay on top of state regions)\r\n const eclipseRegions: Array<\r\n [{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]\r\n > = [];\r\n let inEclipse = false;\r\n let eclipseStart = minTime;\r\n\r\n data.forEach((point, _idx) => {\r\n const pointTime =\r\n typeof point.time === \"number\" ? point.time : point.time.getTime();\r\n\r\n if (point.eclipse && !inEclipse) {\r\n eclipseStart = pointTime;\r\n inEclipse = true;\r\n } else if (!point.eclipse && inEclipse) {\r\n eclipseRegions.push([\r\n {\r\n xAxis: eclipseStart,\r\n itemStyle: { color: ECLIPSE_COLOR },\r\n },\r\n { xAxis: pointTime },\r\n ]);\r\n inEclipse = false;\r\n }\r\n });\r\n\r\n // If still in eclipse at the end\r\n if (inEclipse) {\r\n eclipseRegions.push([\r\n {\r\n xAxis: eclipseStart,\r\n itemStyle: { color: ECLIPSE_COLOR },\r\n },\r\n { xAxis: maxTime },\r\n ]);\r\n }\r\n\r\n // Build series\r\n const series: AstroChartProps[\"series\"] = [\r\n {\r\n id: \"power\",\r\n name: \"Power (W)\",\r\n data: data.map((d) => ({\r\n time: typeof d.time === \"number\" ? d.time : d.time.getTime(),\r\n value: d.power,\r\n })),\r\n color: \"#ffffff\",\r\n lineStyle: { width: 2 },\r\n areaStyle: { opacity: 0.3, color: \"rgba(255, 255, 255, 0.2)\" },\r\n smooth: true,\r\n yAxisIndex: 0,\r\n },\r\n ];\r\n\r\n if (showBattery) {\r\n series.push({\r\n id: \"battery\",\r\n name: \"Battery %\",\r\n data: data.map((d) => ({\r\n time: typeof d.time === \"number\" ? d.time : d.time.getTime(),\r\n value: d.battery ?? 0,\r\n })),\r\n color: \"#4ade80\",\r\n lineStyle: { width: 2, type: \"dashed\" },\r\n smooth: true,\r\n yAxisIndex: 1,\r\n });\r\n }\r\n\r\n // Event markers - use dots for timeline, diamonds for emphasis\r\n const maxPower = Math.max(...data.map((d) => d.power), 100);\r\n\r\n // Event dots positioned just above the chart area\r\n const eventDots = showEventDots\r\n ? events.map((event) => ({\r\n coord: [\r\n typeof event.time === \"number\" ? event.time : event.time.getTime(),\r\n maxPower * 0.95,\r\n ] as [number, number],\r\n name: event.label,\r\n symbol: event.type === \"scenario\" ? \"diamond\" : \"circle\",\r\n symbolSize: event.type === \"scenario\" ? 10 : 8,\r\n itemStyle: {\r\n color: EVENT_COLORS[event.type],\r\n borderColor: tokens.colors.background.base,\r\n borderWidth: 2,\r\n shadowBlur: 4,\r\n shadowColor: EVENT_COLORS[event.type],\r\n },\r\n label: {\r\n show: false,\r\n },\r\n emphasis: {\r\n scale: true,\r\n itemStyle: {\r\n borderWidth: 3,\r\n shadowBlur: 8,\r\n },\r\n label: {\r\n show: true,\r\n fontSize: 12,\r\n color: tokens.colors.text.primary,\r\n backgroundColor: tokens.colors.background.surface,\r\n borderColor: EVENT_COLORS[event.type],\r\n borderWidth: 1,\r\n padding: [6, 10],\r\n borderRadius: 6,\r\n formatter: `{b}`,\r\n },\r\n },\r\n }))\r\n : [];\r\n\r\n // Dual axis config\r\n const yAxisConfig: AstroChartProps[\"yAxis\"] = showBattery\r\n ? [\r\n {\r\n type: \"value\",\r\n name: \"Power (W)\",\r\n position: \"left\",\r\n min: 0,\r\n splitLine: { show: true },\r\n },\r\n {\r\n type: \"value\",\r\n name: \"Battery %\",\r\n position: \"right\",\r\n min: 0,\r\n max: 100,\r\n splitLine: { show: false },\r\n },\r\n ]\r\n : {\r\n type: \"value\",\r\n name: \"Power (W)\",\r\n min: 0,\r\n splitLine: { show: true },\r\n };\r\n\r\n return {\r\n type: \"area\",\r\n title,\r\n subtitle: compact\r\n ? undefined\r\n : `System states, operational modes, eclipse periods, and events`,\r\n height,\r\n series,\r\n xAxis: {\r\n type: \"time\",\r\n showGrid: true,\r\n splitLine: { show: true },\r\n },\r\n yAxis: yAxisConfig,\r\n tooltip: {\r\n enabled: true,\r\n trigger: \"axis\",\r\n crosshair: \"both\",\r\n formatter: (params: any) => {\r\n const param = Array.isArray(params) ? params[0] : params;\r\n if (!param) return \"\";\r\n\r\n const time = new Date(param.data[0]);\r\n const dataPoint = data.find((d) => {\r\n const t = typeof d.time === \"number\" ? d.time : d.time.getTime();\r\n return t === param.data[0];\r\n });\r\n\r\n let html = `<div style=\"font-size: 13px; min-width: 220px; font-family: ${tokens.typography.fontFamily.primary};\">`;\r\n html += `<div style=\"font-weight: 600; margin-bottom: 10px; color: ${tokens.colors.text.primary}; font-size: 14px;\">${time.toLocaleTimeString()}</div>`;\r\n\r\n // Power values\r\n if (Array.isArray(params)) {\r\n params.forEach((p: any) => {\r\n const value = p.data[1];\r\n const seriesName = p.seriesName;\r\n const color = p.color;\r\n html += `<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 6px;\">`;\r\n html += `<span style=\"width: 12px; height: 12px; background: ${color}; border-radius: 3px; box-shadow: 0 0 4px ${color};\"></span>`;\r\n html += `<span style=\"color: ${tokens.colors.text.secondary};\">${seriesName}: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)}</strong></span>`;\r\n html += `</div>`;\r\n });\r\n } else {\r\n const value = param.data[1];\r\n html += `<div style=\"margin-bottom: 6px; color: ${tokens.colors.text.secondary};\">Power: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)} W</strong></div>`;\r\n }\r\n\r\n // System info\r\n if (dataPoint) {\r\n html += `<div style=\"margin-top: 10px; padding-top: 10px; border-top: 1px solid ${tokens.colors.border.muted};\">`;\r\n html += `<div style=\"display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; font-size: 12px;\">`;\r\n html += `<span style=\"color: ${tokens.colors.text.muted};\">STATE</span>`;\r\n html += `<span style=\"color: ${STATE_COLORS[dataPoint.state]}; font-weight: 600;\">${dataPoint.state.toUpperCase()}</span>`;\r\n html += `<span style=\"color: ${tokens.colors.text.muted};\">MODE</span>`;\r\n html += `<span style=\"color: ${MODE_COLORS[dataPoint.mode]}; font-weight: 600;\">${dataPoint.mode.toUpperCase()}</span>`;\r\n if (dataPoint.battery !== undefined) {\r\n html += `<span style=\"color: ${tokens.colors.text.muted};\">BATTERY</span>`;\r\n html += `<span style=\"color: ${tokens.colors.text.primary}; font-weight: 600;\">${dataPoint.battery.toFixed(1)}%</span>`;\r\n }\r\n html += `</div>`;\r\n if (dataPoint.eclipse) {\r\n html += `<div style=\"color: ${tokens.colors.status.caution}; font-weight: 600; margin-top: 8px; font-size: 12px; display: flex; align-items: center; gap: 6px;\">`;\r\n html += `<span style=\"font-weight: 600;\">ECLIPSE</span>`;\r\n html += `</div>`;\r\n }\r\n html += `</div>`;\r\n }\r\n\r\n html += `</div>`;\r\n return html;\r\n },\r\n },\r\n legend: showLegend\r\n ? {\r\n show: true,\r\n position: \"top\",\r\n orient: \"horizontal\",\r\n }\r\n : { show: false },\r\n zoom: enableZoom\r\n ? {\r\n enabled: true,\r\n type: \"both\",\r\n axis: \"x\",\r\n start: 0,\r\n end: 100,\r\n }\r\n : undefined,\r\n annotations: {\r\n markAreas: {\r\n data: [...stateRegions, ...eclipseRegions],\r\n itemStyle: {\r\n opacity: 1,\r\n },\r\n },\r\n markPoints: eventDots,\r\n },\r\n export: enableExport\r\n ? {\r\n enabled: true,\r\n formats: [\"png\", \"svg\", \"csv\"],\r\n getExportFileName: () => `zendir-power-overview-${Date.now()}`,\r\n }\r\n : undefined,\r\n infoTooltip: compact\r\n ? undefined\r\n : {\r\n content: (\r\n <div style={{ fontSize: \"13px\", lineHeight: \"1.6\" }}>\r\n <div style={{ marginBottom: \"8px\", fontWeight: 500 }}>\r\n Interactive Power Timeline\r\n </div>\r\n <div style={{ marginBottom: \"4px\" }}>\r\n • Background colors show system states\r\n </div>\r\n <div style={{ marginBottom: \"4px\" }}>\r\n • Dark overlays indicate eclipse periods\r\n </div>\r\n <div style={{ marginBottom: \"4px\" }}>\r\n • Diamond markers show key events\r\n </div>\r\n <div>• Scroll to zoom, drag to pan</div>\r\n </div>\r\n ),\r\n },\r\n className,\r\n };\r\n }, [\r\n data,\r\n events,\r\n title,\r\n height,\r\n showBattery,\r\n showLegend,\r\n enableExport,\r\n className,\r\n compact,\r\n showEventDots,\r\n enableZoom,\r\n tokens,\r\n ]);\r\n\r\n return (\r\n <div style={{ position: \"relative\", width: \"100%\" }}>\r\n {showStatus && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n top: 10,\r\n right: 60,\r\n zIndex: 10,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: 8,\r\n padding: \"6px 12px\",\r\n background: tokens.colors.background.surface,\r\n border: `1px solid ${tokens.colors.border.default}`,\r\n borderRadius: tokens.borderRadius.md,\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontFamily: tokens.typography.fontFamily.primary,\r\n }}\r\n >\r\n <StatusShape\r\n status={currentStatus}\r\n size={10}\r\n color={\r\n tokens.colors.status[currentStatus] || tokens.colors.status.off\r\n }\r\n borderColor={\r\n mode === \"light\" ? STATUS_BORDER_COLORS[currentStatus] : undefined\r\n }\r\n glow={mode !== \"light\"}\r\n />\r\n <span\r\n style={{\r\n color: tokens.colors.text.primary,\r\n fontWeight: 500,\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.5px\",\r\n }}\r\n >\r\n {currentStatus}\r\n </span>\r\n </div>\r\n )}\r\n <AstroChart {...chartConfig} />\r\n </div>\r\n );\r\n}\r\n\r\n// =============================================================================\r\n// Sample Data Generator\r\n// =============================================================================\r\n\r\nexport function generateSamplePowerData(durationSeconds = 3600): {\r\n data: PowerTimelinePoint[];\r\n events: PowerEvent[];\r\n} {\r\n const dataPoints: PowerTimelinePoint[] = [];\r\n const eventList: PowerEvent[] = [];\r\n\r\n const startTime = Date.now();\r\n const interval = 10;\r\n\r\n let currentState: PowerState = \"running\";\r\n let currentMode: OperationalMode = \"inertial\";\r\n let inEclipse = false;\r\n\r\n for (let i = 0; i <= durationSeconds; i += interval) {\r\n const time = startTime + i * 1000;\r\n\r\n // State transitions\r\n if (i === 300) currentState = \"safe\";\r\n if (i === 600) currentState = \"running\";\r\n if (i === 1800) currentState = \"shutdown\";\r\n if (i === 2100) currentState = \"running\";\r\n if (i === 2400) currentState = \"safe\";\r\n if (i === 2700) currentState = \"running\";\r\n\r\n // Mode transitions\r\n if (i === 200) currentMode = \"sun\";\r\n if (i === 500) currentMode = \"inertial\";\r\n if (i === 800) currentMode = \"nadir\";\r\n if (i === 1100) currentMode = \"velocity\";\r\n if (i === 1400) currentMode = \"ground\";\r\n if (i === 1700) currentMode = \"sun\";\r\n if (i === 2000) currentMode = \"inertial\";\r\n if (i === 2300) currentMode = \"nadir\";\r\n if (i === 2600) currentMode = \"velocity\";\r\n if (i === 2900) currentMode = \"ground\";\r\n if (i === 3200) currentMode = \"sun\";\r\n\r\n // Eclipse periods\r\n if (i >= 1700 && i <= 2100) inEclipse = true;\r\n else if (i >= 2400 && i <= 2700) inEclipse = true;\r\n else inEclipse = false;\r\n\r\n // Battery\r\n let battery = 95;\r\n if (inEclipse) {\r\n battery = 95 - ((i - 1700) % 400) * 0.1;\r\n } else if (currentMode === \"sun\") {\r\n battery = 70 + Math.sin(i * 0.01) * 15;\r\n } else {\r\n battery = 90 + Math.sin(i * 0.005) * 5;\r\n }\r\n battery = Math.max(10, Math.min(100, battery));\r\n\r\n // Power\r\n let power = 0;\r\n if (inEclipse) {\r\n power = 0;\r\n } else if (currentMode === \"sun\") {\r\n power = 300 + Math.sin(i * 0.02) * 50;\r\n } else if (currentMode === \"ground\" || currentMode === \"nadir\") {\r\n power = 150 + Math.sin(i * 0.03) * 30;\r\n } else {\r\n power = 50 + Math.sin(i * 0.01) * 20;\r\n }\r\n\r\n if (currentState === \"safe\") power *= 0.3;\r\n if (currentState === \"shutdown\") power = 0;\r\n\r\n dataPoints.push({\r\n time,\r\n power,\r\n battery,\r\n state: currentState,\r\n mode: currentMode,\r\n eclipse: inEclipse,\r\n });\r\n }\r\n\r\n // Events\r\n const eventTimes = [\r\n 250, 420, 550, 900, 1300, 1650, 1850, 2200, 2500, 2800, 3100, 3400,\r\n ];\r\n const eventTypes: EventType[] = [\r\n \"scenario\",\r\n \"operator\",\r\n \"spacecraft\",\r\n \"ground\",\r\n ];\r\n\r\n eventTimes.forEach((timeOffset, idx) => {\r\n eventList.push({\r\n time: startTime + timeOffset * 1000,\r\n type: eventTypes[idx % eventTypes.length],\r\n label: `Event ${idx + 1}`,\r\n });\r\n });\r\n\r\n return { data: dataPoints, events: eventList };\r\n}\r\n\r\nexport default PowerOverviewChart;\r\n"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { AstroChartHandle } from './AstroChart';
|
|
3
3
|
import { PowerChartData, AttitudeChartData, ThermalChartData, LinkBudgetChartData, ContactWindowData, SpectrumDataPoint, ManeuverBudgetData, EclipseTimelineData, ExportOptions, InfoTooltipOptions, CoverageGridData, WaterfallDataPoint, WaterfallSignalMarker, DopplerTrackPoint, SatellitePassInfo, LinkMarginPoint } from './types';
|
|
4
|
-
|
|
5
4
|
interface CommonChartProps {
|
|
6
5
|
/** Export options */
|
|
7
6
|
export?: ExportOptions;
|
|
@@ -16,7 +15,7 @@ interface CommonChartProps {
|
|
|
16
15
|
* Status for the header icon (shows as colored dot)
|
|
17
16
|
* Uses AstroUXDS status colors
|
|
18
17
|
*/
|
|
19
|
-
iconStatus?:
|
|
18
|
+
iconStatus?: "off" | "standby" | "normal" | "caution" | "serious" | "critical";
|
|
20
19
|
/**
|
|
21
20
|
* Status message shown on hover over the status icon
|
|
22
21
|
*/
|
|
@@ -256,7 +255,7 @@ export interface HeliocentricOrbitProps extends CommonChartProps {
|
|
|
256
255
|
/** Show labels on bodies */
|
|
257
256
|
showLabels?: boolean;
|
|
258
257
|
/** Visualization mode: 2D or 3D */
|
|
259
|
-
mode?:
|
|
258
|
+
mode?: "2d" | "3d";
|
|
260
259
|
/** Loading state */
|
|
261
260
|
loading?: boolean;
|
|
262
261
|
/** Custom className */
|
|
@@ -329,7 +328,7 @@ export interface Bar3DChartProps extends CommonChartProps {
|
|
|
329
328
|
/** Z-axis label */
|
|
330
329
|
zAxisLabel?: string;
|
|
331
330
|
/** Bar shading style */
|
|
332
|
-
shading?:
|
|
331
|
+
shading?: "color" | "lambert" | "realistic";
|
|
333
332
|
/** Auto rotate */
|
|
334
333
|
autoRotate?: boolean;
|
|
335
334
|
/** Loading state */
|
|
@@ -363,7 +362,7 @@ export interface Surface3DChartProps extends CommonChartProps {
|
|
|
363
362
|
/** Z-axis label */
|
|
364
363
|
zAxisLabel?: string;
|
|
365
364
|
/** Surface shading style */
|
|
366
|
-
shading?:
|
|
365
|
+
shading?: "color" | "lambert" | "realistic";
|
|
367
366
|
/** Auto rotate */
|
|
368
367
|
autoRotate?: boolean;
|
|
369
368
|
/** Loading state */
|
|
@@ -429,7 +428,7 @@ export interface SphericalRadar3DData {
|
|
|
429
428
|
/** Range/distance */
|
|
430
429
|
range: number;
|
|
431
430
|
/** Object category */
|
|
432
|
-
category?:
|
|
431
|
+
category?: "satellite" | "debris" | "unknown" | "friendly" | "hostile";
|
|
433
432
|
/** Color override */
|
|
434
433
|
color?: string;
|
|
435
434
|
/** Size override */
|
|
@@ -474,7 +473,7 @@ export interface TransferOrbitSegment {
|
|
|
474
473
|
y: number;
|
|
475
474
|
z: number;
|
|
476
475
|
}>;
|
|
477
|
-
type:
|
|
476
|
+
type: "coast" | "burn" | "gravity-assist" | "spiral";
|
|
478
477
|
deltaV?: number;
|
|
479
478
|
color?: string;
|
|
480
479
|
}
|
|
@@ -485,7 +484,7 @@ export interface TransferOrbitWaypoint {
|
|
|
485
484
|
y: number;
|
|
486
485
|
z: number;
|
|
487
486
|
};
|
|
488
|
-
type:
|
|
487
|
+
type: "departure" | "arrival" | "flyby" | "node" | "burn";
|
|
489
488
|
deltaV?: number;
|
|
490
489
|
tof?: number;
|
|
491
490
|
}
|
|
@@ -535,7 +534,7 @@ export interface AttitudeHistory3DChartProps extends CommonChartProps {
|
|
|
535
534
|
title?: string;
|
|
536
535
|
width?: number | string;
|
|
537
536
|
height?: number;
|
|
538
|
-
mode?:
|
|
537
|
+
mode?: "euler" | "pointing-error";
|
|
539
538
|
showModeTransitions?: boolean;
|
|
540
539
|
autoRotate?: boolean;
|
|
541
540
|
loading?: boolean;
|
|
@@ -603,7 +602,7 @@ export interface LaunchCorridorData {
|
|
|
603
602
|
corridors: Array<{
|
|
604
603
|
id: string;
|
|
605
604
|
name: string;
|
|
606
|
-
type:
|
|
605
|
+
type: "nominal" | "abort" | "safety" | "exclusion";
|
|
607
606
|
groundFootprint: Array<{
|
|
608
607
|
lat: number;
|
|
609
608
|
lon: number;
|
|
@@ -693,7 +692,7 @@ export interface WaterfallChartProps extends CommonChartProps {
|
|
|
693
692
|
/** FFT bins */
|
|
694
693
|
fftBins?: number;
|
|
695
694
|
/** Color map: viridis, plasma, inferno, magma */
|
|
696
|
-
colorMap?:
|
|
695
|
+
colorMap?: "viridis" | "plasma" | "inferno" | "magma";
|
|
697
696
|
/** Power range [min, max] in dBm */
|
|
698
697
|
powerRange?: [number, number];
|
|
699
698
|
/** Time window in seconds */
|
|
@@ -752,7 +751,7 @@ export interface LinkMarginChartProps extends CommonChartProps {
|
|
|
752
751
|
/** Minimum acceptable margin (dB) */
|
|
753
752
|
minMargin: number;
|
|
754
753
|
/** Show uplink, downlink, or both */
|
|
755
|
-
mode?:
|
|
754
|
+
mode?: "uplink" | "downlink" | "both";
|
|
756
755
|
/** Show rain fade overlay */
|
|
757
756
|
showRainFade?: boolean;
|
|
758
757
|
title?: string;
|
|
@@ -781,7 +780,7 @@ export interface ConstellationCoverageChartProps extends CommonChartProps {
|
|
|
781
780
|
/** Coverage metric unit */
|
|
782
781
|
metricUnit?: string;
|
|
783
782
|
/** Color map: viridis, jet, plasma, thermal */
|
|
784
|
-
colorMap?:
|
|
783
|
+
colorMap?: "viridis" | "jet" | "plasma" | "thermal";
|
|
785
784
|
/** Value range [min, max] */
|
|
786
785
|
valueRange?: [number, number];
|
|
787
786
|
/** Show satellite positions */
|