@zendir/ui 0.4.1 → 0.6.0
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 +34 -0
- 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 -538
- 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 +11 -5
- package/dist/react/core/navigation/SideNav.js +857 -602
- 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 +312 -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 +217 -194
- 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 +419 -41
- 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":"ObjectInventoryPanel.js","sources":["../../../src/react/panels/ObjectInventoryPanel.tsx"],"sourcesContent":["/**\n * @zendir/ui - ObjectInventoryPanel\n *\n * Themed list of simulation objects, grouped by `kind` (spacecraft /\n * ground stations / celestial bodies). Pair with `useSimulationScene`:\n *\n * ```tsx\n * const scene = useSimulationScene({ client, containerId, simulationId });\n * <ObjectInventoryPanel\n * objects={scene.objects}\n * onSelect={(obj) => zenRef.current?.focusOn(obj.id, {\n * zoom: recommendedFlyDistance(obj.kind),\n * })}\n * />\n * ```\n *\n * The panel renders the toggle UI only — it has no opinion about WHAT\n * happens on select. The consumer wires `onSelect` to its 3D viewer's\n * imperative handle (or anywhere else — the panel is reusable in any\n * dashboard or debug context).\n */\n\nimport { memo, useCallback, useState } from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useThemeTokens } from '../theme/ThemeProvider';\nimport { useSpatialSelection } from '../context/SpatialSelectionContext';\nimport type { SimulationSceneObject, StructureDiag, PositionTickDiag } from '../hooks/useSimulationScene';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ObjectInventoryKind = SimulationSceneObject['kind'];\n\nexport interface ObjectInventoryPanelProps {\n /** Objects to list. Typically `useSimulationScene().objects`. */\n objects: SimulationSceneObject[];\n /** Click handler — fires with the clicked object. Pure forward; the\n * panel does not navigate, focus, or fly anywhere itself. */\n onSelect?: (object: SimulationSceneObject) => void;\n /** Currently selected object id (highlights the row). Pass `null` for none. */\n selectedId?: string | null;\n\n /** Where to anchor the panel on its parent. Default: `top-left`. */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n /** Pixel offsets from the anchor. Defaults to (16, 56) so a top bar fits above. */\n offset?: { x?: number; y?: number };\n /** Hide the panel without unmounting (preserves `selectedId` state). */\n hidden?: boolean;\n /** Width in pixels. Default 330. */\n width?: number;\n /** Maximum height (CSS value). Default `'50vh'`. */\n maxHeight?: string | number;\n\n /** Allow the user to collapse / expand the panel. Default true. */\n collapsible?: boolean;\n /** Initial collapsed state. Default false. */\n defaultCollapsed?: boolean;\n\n /** Optional title override. Default: `\"API Objects · N\"`. */\n title?: ReactNode;\n\n /**\n * Optional structure diagnostic block (raw keys + counts from\n * getSimulationStructure). Useful in dev / debug builds; omit in\n * production for a cleaner look.\n */\n structureDiag?: StructureDiag | null;\n /** Optional position-tick diagnostic block. */\n positionTickDiag?: PositionTickDiag | null;\n\n /** Custom labels per kind (defaults: \"Spacecraft\", \"Ground Stations\", \"Celestial Bodies\"). */\n kindLabels?: Partial<Record<ObjectInventoryKind, string>>;\n\n /** Inline style override on the outer container. */\n style?: CSSProperties;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Stable short-form of a GUID for inline display. */\nfunction shortId(id: string): string {\n return id.length <= 8 ? id : id.slice(0, 8);\n}\n\nconst DEFAULT_KIND_LABELS: Record<ObjectInventoryKind, string> = {\n spacecraft: 'Spacecraft',\n groundStation: 'Ground Stations',\n celestialBody: 'Celestial Bodies',\n};\n\nconst KIND_ORDER: ObjectInventoryKind[] = ['spacecraft', 'groundStation', 'celestialBody'];\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport const ObjectInventoryPanel = memo(function ObjectInventoryPanel({\n objects,\n onSelect,\n selectedId,\n position = 'top-left',\n offset,\n hidden = false,\n width = 330,\n maxHeight = '50vh',\n collapsible = true,\n defaultCollapsed = false,\n title,\n structureDiag,\n positionTickDiag,\n kindLabels,\n style,\n}: ObjectInventoryPanelProps) {\n const tokens = useThemeTokens();\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n // Optional <SpatialSelectionProvider> integration. When present, the\n // panel uses the shared selection state so other components (3D\n // viewer, GroundTrackMap, etc.) stay synchronised. Explicit props\n // always win — consumers can still override per-instance.\n const ctx = useSpatialSelection();\n const effectiveSelectedId = selectedId !== undefined ? selectedId : ctx?.selectedId ?? null;\n const effectiveOnSelect = useCallback(\n (obj: SimulationSceneObject) => {\n onSelect?.(obj);\n // Also push into the shared context if no explicit onSelect wins it.\n if (!onSelect) ctx?.setSelectedId(obj.id);\n },\n [onSelect, ctx],\n );\n\n const labels = { ...DEFAULT_KIND_LABELS, ...kindLabels };\n const entries = Array.isArray(objects) ? objects : [];\n\n // Position anchor — translate the prop into top/left/right/bottom CSS.\n const offX = offset?.x ?? 16;\n const offY = offset?.y ?? 56;\n const anchor: CSSProperties = (() => {\n switch (position) {\n case 'top-right': return { top: offY, right: offX };\n case 'bottom-left': return { bottom: offY, left: offX };\n case 'bottom-right': return { bottom: offY, right: offX };\n case 'top-left':\n default: return { top: offY, left: offX };\n }\n })();\n\n if (hidden) return null;\n\n const dim: CSSProperties = { opacity: 0.55, fontSize: '0.9em' };\n\n return (\n <div\n data-testid=\"zendir-object-inventory\"\n style={{\n position: 'absolute',\n zIndex: 2,\n width,\n maxHeight,\n overflow: 'auto',\n padding: tokens.spacing.sm,\n borderRadius: tokens.borderRadius?.md ?? 6,\n border: '1px solid rgba(255,255,255,0.12)',\n background: 'rgba(0,0,0,0.72)',\n color: tokens.colors.text.primary,\n fontSize: tokens.typography.fontSize.xs,\n lineHeight: 1.35,\n ...anchor,\n ...style,\n }}\n >\n <PanelHeader\n title={title ?? `API Objects · ${entries.length}`}\n collapsible={collapsible}\n collapsed={collapsed}\n onToggle={() => setCollapsed((c) => !c)}\n />\n\n {!collapsed && (\n <>\n {KIND_ORDER.map((kind) => {\n const items = entries.filter((o) => o.kind === kind);\n return (\n <ObjectInventoryGroup\n key={kind}\n title={`${labels[kind]} (${items.length})`}\n items={items}\n selectedId={effectiveSelectedId}\n onSelect={onSelect != null ? onSelect : (ctx ? effectiveOnSelect : undefined)}\n />\n );\n })}\n\n {structureDiag !== undefined && (\n <StructureDiagBlock diag={structureDiag} dim={dim} />\n )}\n\n {positionTickDiag !== undefined && (\n <PositionTickDiagBlock diag={positionTickDiag} dim={dim} />\n )}\n </>\n )}\n </div>\n );\n});\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\n\nconst PanelHeader = ({\n title,\n collapsible,\n collapsed,\n onToggle,\n}: {\n title: ReactNode;\n collapsible: boolean;\n collapsed: boolean;\n onToggle: () => void;\n}) => {\n if (!collapsible) {\n return <div style={{ marginBottom: 6, fontWeight: 600 }}>{title}</div>;\n }\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={!collapsed}\n style={{\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginBottom: 6,\n padding: 0,\n background: 'none',\n border: 'none',\n color: 'inherit',\n font: 'inherit',\n fontWeight: 600,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span>{title}</span>\n <span aria-hidden style={{ opacity: 0.7, fontSize: '0.85em' }}>\n {collapsed ? '▸' : '▾'}\n </span>\n </button>\n );\n};\n\nconst ObjectInventoryGroup = ({\n title,\n items,\n selectedId,\n onSelect,\n}: {\n title: string;\n items: SimulationSceneObject[];\n selectedId: string | null;\n onSelect?: (obj: SimulationSceneObject) => void;\n}) => (\n <div style={{ marginBottom: 6 }}>\n <div style={{ opacity: 0.85 }}>{title}</div>\n {items.length === 0 ? (\n <div style={{ opacity: 0.6 }}>—</div>\n ) : (\n items.map((item) => (\n <ObjectRow\n key={item.id}\n object={item}\n selected={item.id === selectedId}\n onSelect={onSelect}\n />\n ))\n )}\n </div>\n);\n\nconst ObjectRow = ({\n object,\n selected,\n onSelect,\n}: {\n object: SimulationSceneObject;\n selected: boolean;\n onSelect?: (obj: SimulationSceneObject) => void;\n}) => {\n const handleClick = useCallback(() => onSelect?.(object), [onSelect, object]);\n const interactive = onSelect != null;\n return (\n <div\n role={interactive ? 'button' : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={interactive ? handleClick : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleClick();\n }\n }\n : undefined\n }\n style={{\n opacity: 0.95,\n padding: '1px 4px',\n borderRadius: 3,\n cursor: interactive ? 'pointer' : 'default',\n background: selected ? 'rgba(255,255,255,0.12)' : 'transparent',\n }}\n >\n {object.name} <span style={{ opacity: 0.6 }}>({shortId(object.id)})</span>\n </div>\n );\n};\n\nconst StructureDiagBlock = ({\n diag,\n dim,\n}: {\n diag: StructureDiag | null | undefined;\n dim: CSSProperties;\n}) => (\n <div style={{ marginTop: 8, borderTop: '1px solid rgba(255,255,255,0.1)', paddingTop: 6 }}>\n {diag ? (\n <>\n <div style={{ ...dim, marginBottom: 2 }}>Raw structure keys:</div>\n <div style={dim}>{diag.topLevelKeys.join(', ') || '—'}</div>\n <div style={{ ...dim, marginTop: 2 }}>\n Objects[]: {diag.rawObjectCount < 0 ? 'absent' : diag.rawObjectCount}\n {' · '}\n Systems[]: {diag.rawSystemCount < 0 ? 'absent' : diag.rawSystemCount}\n </div>\n </>\n ) : (\n <div style={{ ...dim, marginTop: 4 }}>Waiting for structure…</div>\n )}\n </div>\n);\n\nconst PositionTickDiagBlock = ({\n diag,\n dim,\n}: {\n diag: PositionTickDiag | null | undefined;\n dim: CSSProperties;\n}) => {\n if (!diag) return null;\n return (\n <div style={{ marginTop: 8, borderTop: '1px solid rgba(255,255,255,0.1)', paddingTop: 6 }}>\n <div style={{ ...dim, marginBottom: 2 }}>Last position tick:</div>\n <div style={dim}>\n ok {diag.parsedOk}/{diag.requested}\n {diag.parseFailed > 0 && ` · parseFail ${diag.parseFailed}`}\n {diag.requestFailed > 0 && ` · reqFail ${diag.requestFailed}`}\n </div>\n <div style={dim}>\n asked for:{' '}\n {diag.requestedProps\n ? diag.requestedProps.join(', ')\n : 'getAllProperties (fallback)'}\n </div>\n {diag.firstResponseKeys.length > 0 && (\n <div style={{ ...dim, wordBreak: 'break-all' }}>\n got keys: {diag.firstResponseKeys.slice(0, 12).join(', ')}\n {diag.firstResponseKeys.length > 12 && ' …'}\n </div>\n )}\n {diag.firstResponseSample && (\n <div style={{ ...dim, wordBreak: 'break-all' }}>{diag.firstResponseSample}</div>\n )}\n </div>\n );\n};\n\n// ─── Companion helper ─────────────────────────────────────────────────────────\n\n/**\n * Sensible default fly-to distance per object kind, for use with\n * `<ZenSpace3D />`'s imperative `focusOn(id, { zoom })` handle.\n *\n * spacecraft: 2 000 000 m (≈ 2 000 km — close orbital view)\n * groundStation: 1 500 000 m (≈ 1 500 km — high-altitude angled view)\n * celestialBody: 50 000 000 m (≈ 50 000 km — full-planet view)\n *\n * Override per call if the consumer wants tighter/looser framing.\n */\nexport function recommendedFlyDistance(kind: ObjectInventoryKind): number {\n switch (kind) {\n case 'spacecraft': return 2_000_000;\n case 'groundStation': return 1_500_000;\n case 'celestialBody': return 50_000_000;\n }\n}\n\nexport default ObjectInventoryPanel;\n"],"names":["ObjectInventoryPanel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ObjectInventoryPanel.js","names":[],"sources":["../../../src/react/panels/ObjectInventoryPanel.tsx"],"sourcesContent":["/**\n * @zendir/ui - ObjectInventoryPanel\n *\n * Themed list of simulation objects, grouped by `kind` (spacecraft /\n * ground stations / celestial bodies). Pair with `useSimulationScene`:\n *\n * ```tsx\n * const scene = useSimulationScene({ client, containerId, simulationId });\n * <ObjectInventoryPanel\n * objects={scene.objects}\n * onSelect={(obj) => zenRef.current?.focusOn(obj.id, {\n * zoom: recommendedFlyDistance(obj.kind),\n * })}\n * />\n * ```\n *\n * The panel renders the toggle UI only — it has no opinion about WHAT\n * happens on select. The consumer wires `onSelect` to its 3D viewer's\n * imperative handle (or anywhere else — the panel is reusable in any\n * dashboard or debug context).\n */\n\nimport { memo, useCallback, useState } from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { useThemeTokens } from \"../theme/ThemeProvider\";\nimport { useSpatialSelection } from \"../context/SpatialSelectionContext\";\nimport type {\n SimulationSceneObject,\n StructureDiag,\n PositionTickDiag,\n} from \"../hooks/useSimulationScene\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type ObjectInventoryKind = SimulationSceneObject[\"kind\"];\n\nexport interface ObjectInventoryPanelProps {\n /** Objects to list. Typically `useSimulationScene().objects`. */\n objects: SimulationSceneObject[];\n /** Click handler — fires with the clicked object. Pure forward; the\n * panel does not navigate, focus, or fly anywhere itself. */\n onSelect?: (object: SimulationSceneObject) => void;\n /** Currently selected object id (highlights the row). Pass `null` for none. */\n selectedId?: string | null;\n\n /** Where to anchor the panel on its parent. Default: `top-left`. */\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\";\n /** Pixel offsets from the anchor. Defaults to (16, 56) so a top bar fits above. */\n offset?: { x?: number; y?: number };\n /** Hide the panel without unmounting (preserves `selectedId` state). */\n hidden?: boolean;\n /** Width in pixels. Default 330. */\n width?: number;\n /** Maximum height (CSS value). Default `'50vh'`. */\n maxHeight?: string | number;\n\n /** Allow the user to collapse / expand the panel. Default true. */\n collapsible?: boolean;\n /** Initial collapsed state. Default false. */\n defaultCollapsed?: boolean;\n\n /** Optional title override. Default: `\"API Objects · N\"`. */\n title?: ReactNode;\n\n /**\n * Optional structure diagnostic block (raw keys + counts from\n * getSimulationStructure). Useful in dev / debug builds; omit in\n * production for a cleaner look.\n */\n structureDiag?: StructureDiag | null;\n /** Optional position-tick diagnostic block. */\n positionTickDiag?: PositionTickDiag | null;\n\n /** Custom labels per kind (defaults: \"Spacecraft\", \"Ground Stations\", \"Celestial Bodies\"). */\n kindLabels?: Partial<Record<ObjectInventoryKind, string>>;\n\n /** Inline style override on the outer container. */\n style?: CSSProperties;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Stable short-form of a GUID for inline display. */\nfunction shortId(id: string): string {\n return id.length <= 8 ? id : id.slice(0, 8);\n}\n\nconst DEFAULT_KIND_LABELS: Record<ObjectInventoryKind, string> = {\n spacecraft: \"Spacecraft\",\n groundStation: \"Ground Stations\",\n celestialBody: \"Celestial Bodies\",\n};\n\nconst KIND_ORDER: ObjectInventoryKind[] = [\n \"spacecraft\",\n \"groundStation\",\n \"celestialBody\",\n];\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport const ObjectInventoryPanel = memo(function ObjectInventoryPanel({\n objects,\n onSelect,\n selectedId,\n position = \"top-left\",\n offset,\n hidden = false,\n width = 330,\n maxHeight = \"50vh\",\n collapsible = true,\n defaultCollapsed = false,\n title,\n structureDiag,\n positionTickDiag,\n kindLabels,\n style,\n}: ObjectInventoryPanelProps) {\n const tokens = useThemeTokens();\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n\n // Optional <SpatialSelectionProvider> integration. When present, the\n // panel uses the shared selection state so other components (3D\n // viewer, GroundTrackMap, etc.) stay synchronised. Explicit props\n // always win — consumers can still override per-instance.\n const ctx = useSpatialSelection();\n const effectiveSelectedId =\n selectedId !== undefined ? selectedId : (ctx?.selectedId ?? null);\n const effectiveOnSelect = useCallback(\n (obj: SimulationSceneObject) => {\n onSelect?.(obj);\n // Also push into the shared context if no explicit onSelect wins it.\n if (!onSelect) ctx?.setSelectedId(obj.id);\n },\n [onSelect, ctx],\n );\n\n const labels = { ...DEFAULT_KIND_LABELS, ...kindLabels };\n const entries = Array.isArray(objects) ? objects : [];\n\n // Position anchor — translate the prop into top/left/right/bottom CSS.\n const offX = offset?.x ?? 16;\n const offY = offset?.y ?? 56;\n const anchor: CSSProperties = (() => {\n switch (position) {\n case \"top-right\":\n return { top: offY, right: offX };\n case \"bottom-left\":\n return { bottom: offY, left: offX };\n case \"bottom-right\":\n return { bottom: offY, right: offX };\n case \"top-left\":\n default:\n return { top: offY, left: offX };\n }\n })();\n\n if (hidden) return null;\n\n const dim: CSSProperties = { opacity: 0.55, fontSize: \"0.9em\" };\n\n return (\n <div\n data-testid=\"zendir-object-inventory\"\n style={{\n position: \"absolute\",\n zIndex: 2,\n width,\n maxHeight,\n overflow: \"auto\",\n padding: tokens.spacing.sm,\n borderRadius: tokens.borderRadius?.md ?? 6,\n border: \"1px solid rgba(255,255,255,0.12)\",\n background: \"rgba(0,0,0,0.72)\",\n color: tokens.colors.text.primary,\n fontSize: tokens.typography.fontSize.xs,\n lineHeight: 1.35,\n ...anchor,\n ...style,\n }}\n >\n <PanelHeader\n title={title ?? `API Objects · ${entries.length}`}\n collapsible={collapsible}\n collapsed={collapsed}\n onToggle={() => setCollapsed((c) => !c)}\n />\n\n {!collapsed && (\n <>\n {KIND_ORDER.map((kind) => {\n const items = entries.filter((o) => o.kind === kind);\n return (\n <ObjectInventoryGroup\n key={kind}\n title={`${labels[kind]} (${items.length})`}\n items={items}\n selectedId={effectiveSelectedId}\n onSelect={\n onSelect != null\n ? onSelect\n : ctx\n ? effectiveOnSelect\n : undefined\n }\n />\n );\n })}\n\n {structureDiag !== undefined && (\n <StructureDiagBlock diag={structureDiag} dim={dim} />\n )}\n\n {positionTickDiag !== undefined && (\n <PositionTickDiagBlock diag={positionTickDiag} dim={dim} />\n )}\n </>\n )}\n </div>\n );\n});\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\n\nconst PanelHeader = ({\n title,\n collapsible,\n collapsed,\n onToggle,\n}: {\n title: ReactNode;\n collapsible: boolean;\n collapsed: boolean;\n onToggle: () => void;\n}) => {\n if (!collapsible) {\n return <div style={{ marginBottom: 6, fontWeight: 600 }}>{title}</div>;\n }\n return (\n <button\n type=\"button\"\n onClick={onToggle}\n aria-expanded={!collapsed}\n style={{\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginBottom: 6,\n padding: 0,\n background: \"none\",\n border: \"none\",\n color: \"inherit\",\n font: \"inherit\",\n fontWeight: 600,\n cursor: \"pointer\",\n textAlign: \"left\",\n }}\n >\n <span>{title}</span>\n <span aria-hidden style={{ opacity: 0.7, fontSize: \"0.85em\" }}>\n {collapsed ? \"▸\" : \"▾\"}\n </span>\n </button>\n );\n};\n\nconst ObjectInventoryGroup = ({\n title,\n items,\n selectedId,\n onSelect,\n}: {\n title: string;\n items: SimulationSceneObject[];\n selectedId: string | null;\n onSelect?: (obj: SimulationSceneObject) => void;\n}) => (\n <div style={{ marginBottom: 6 }}>\n <div style={{ opacity: 0.85 }}>{title}</div>\n {items.length === 0 ? (\n <div style={{ opacity: 0.6 }}>—</div>\n ) : (\n items.map((item) => (\n <ObjectRow\n key={item.id}\n object={item}\n selected={item.id === selectedId}\n onSelect={onSelect}\n />\n ))\n )}\n </div>\n);\n\nconst ObjectRow = ({\n object,\n selected,\n onSelect,\n}: {\n object: SimulationSceneObject;\n selected: boolean;\n onSelect?: (obj: SimulationSceneObject) => void;\n}) => {\n const handleClick = useCallback(() => onSelect?.(object), [onSelect, object]);\n const interactive = onSelect != null;\n return (\n <div\n role={interactive ? \"button\" : undefined}\n tabIndex={interactive ? 0 : undefined}\n onClick={interactive ? handleClick : undefined}\n onKeyDown={\n interactive\n ? (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }\n : undefined\n }\n style={{\n opacity: 0.95,\n padding: \"1px 4px\",\n borderRadius: 3,\n cursor: interactive ? \"pointer\" : \"default\",\n background: selected ? \"rgba(255,255,255,0.12)\" : \"transparent\",\n }}\n >\n {object.name} <span style={{ opacity: 0.6 }}>({shortId(object.id)})</span>\n </div>\n );\n};\n\nconst StructureDiagBlock = ({\n diag,\n dim,\n}: {\n diag: StructureDiag | null | undefined;\n dim: CSSProperties;\n}) => (\n <div\n style={{\n marginTop: 8,\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n paddingTop: 6,\n }}\n >\n {diag ? (\n <>\n <div style={{ ...dim, marginBottom: 2 }}>Raw structure keys:</div>\n <div style={dim}>{diag.topLevelKeys.join(\", \") || \"—\"}</div>\n <div style={{ ...dim, marginTop: 2 }}>\n Objects[]: {diag.rawObjectCount < 0 ? \"absent\" : diag.rawObjectCount}\n {\" · \"}\n Systems[]: {diag.rawSystemCount < 0 ? \"absent\" : diag.rawSystemCount}\n </div>\n </>\n ) : (\n <div style={{ ...dim, marginTop: 4 }}>Waiting for structure…</div>\n )}\n </div>\n);\n\nconst PositionTickDiagBlock = ({\n diag,\n dim,\n}: {\n diag: PositionTickDiag | null | undefined;\n dim: CSSProperties;\n}) => {\n if (!diag) return null;\n return (\n <div\n style={{\n marginTop: 8,\n borderTop: \"1px solid rgba(255,255,255,0.1)\",\n paddingTop: 6,\n }}\n >\n <div style={{ ...dim, marginBottom: 2 }}>Last position tick:</div>\n <div style={dim}>\n ok {diag.parsedOk}/{diag.requested}\n {diag.parseFailed > 0 && ` · parseFail ${diag.parseFailed}`}\n {diag.requestFailed > 0 && ` · reqFail ${diag.requestFailed}`}\n </div>\n <div style={dim}>\n asked for:{\" \"}\n {diag.requestedProps\n ? diag.requestedProps.join(\", \")\n : \"getAllProperties (fallback)\"}\n </div>\n {diag.firstResponseKeys.length > 0 && (\n <div style={{ ...dim, wordBreak: \"break-all\" }}>\n got keys: {diag.firstResponseKeys.slice(0, 12).join(\", \")}\n {diag.firstResponseKeys.length > 12 && \" …\"}\n </div>\n )}\n {diag.firstResponseSample && (\n <div style={{ ...dim, wordBreak: \"break-all\" }}>\n {diag.firstResponseSample}\n </div>\n )}\n </div>\n );\n};\n\n// ─── Companion helper ─────────────────────────────────────────────────────────\n\n/**\n * Sensible default fly-to distance per object kind, for use with\n * `<ZenSpace3D />`'s imperative `focusOn(id, { zoom })` handle.\n *\n * spacecraft: 2 000 000 m (≈ 2 000 km — close orbital view)\n * groundStation: 1 500 000 m (≈ 1 500 km — high-altitude angled view)\n * celestialBody: 50 000 000 m (≈ 50 000 km — full-planet view)\n *\n * Override per call if the consumer wants tighter/looser framing.\n */\nexport function recommendedFlyDistance(kind: ObjectInventoryKind): number {\n switch (kind) {\n case \"spacecraft\":\n return 2_000_000;\n case \"groundStation\":\n return 1_500_000;\n case \"celestialBody\":\n return 50_000_000;\n }\n}\n\nexport default ObjectInventoryPanel;\n"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* handle and props. Same separation of concerns as `<GroundTrackMap />`'s
|
|
10
10
|
* `MapLayerDef` pattern — UI here, rendering there.
|
|
11
11
|
*/
|
|
12
|
-
export { ObjectInventoryPanel, recommendedFlyDistance } from './ObjectInventoryPanel';
|
|
12
|
+
export { ObjectInventoryPanel, recommendedFlyDistance, } from './ObjectInventoryPanel';
|
|
13
13
|
export type { ObjectInventoryPanelProps, ObjectInventoryKind, } from './ObjectInventoryPanel';
|
|
14
14
|
export { LayerControlPanel } from './LayerControlPanel';
|
|
15
15
|
export type { LayerControlPanelProps, RenderLayers, GroupVisibility, GroupCounts, } from './LayerControlPanel';
|
|
@@ -1,8 +1,3 @@
|
|
|
1
1
|
import { ObjectInventoryPanel, recommendedFlyDistance } from "./ObjectInventoryPanel.js";
|
|
2
2
|
import { LayerControlPanel } from "./LayerControlPanel.js";
|
|
3
|
-
export {
|
|
4
|
-
LayerControlPanel,
|
|
5
|
-
ObjectInventoryPanel,
|
|
6
|
-
recommendedFlyDistance
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
3
|
+
export { LayerControlPanel, ObjectInventoryPanel, recommendedFlyDistance };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { default as React, Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
-
|
|
3
2
|
export interface ErrorBoundaryProps {
|
|
4
3
|
/** Custom fallback UI or render function */
|
|
5
4
|
fallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);
|
|
@@ -59,5 +58,5 @@ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBo
|
|
|
59
58
|
* });
|
|
60
59
|
* ```
|
|
61
60
|
*/
|
|
62
|
-
export declare function withErrorBoundary<P extends object>(Component: React.ComponentType<P>, options?: Omit<ErrorBoundaryProps,
|
|
61
|
+
export declare function withErrorBoundary<P extends object>(Component: React.ComponentType<P>, options?: Omit<ErrorBoundaryProps, "children">): React.FC<P>;
|
|
63
62
|
export {};
|
|
@@ -1,142 +1,173 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { Component } from "react";
|
|
6
1
|
import { getStatusColor } from "../utils/index.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
2
|
+
import { Component } from "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
//#region src/react/shared/ErrorBoundary.tsx
|
|
5
|
+
/**
|
|
6
|
+
* @zendir/ui - ErrorBoundary Component
|
|
7
|
+
*
|
|
8
|
+
* React error boundary that catches JavaScript errors in child components.
|
|
9
|
+
* Prevents white screen of death and displays graceful fallback UI.
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Customizable fallback UI
|
|
13
|
+
* - Error callback for logging/reporting
|
|
14
|
+
* - Retry functionality
|
|
15
|
+
* - Accessible error display
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* ErrorBoundary - Catches and handles component errors gracefully
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <ErrorBoundary
|
|
23
|
+
* fallback={<ErrorCard message="Failed to load" />}
|
|
24
|
+
* onError={(error) => logError(error)}
|
|
25
|
+
* >
|
|
26
|
+
* <SpacecraftCard {...props} />
|
|
27
|
+
* </ErrorBoundary>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* <ErrorBoundary
|
|
33
|
+
* fallback={(error, retry) => (
|
|
34
|
+
* <div>
|
|
35
|
+
* <p>Error: {error.message}</p>
|
|
36
|
+
* <button onClick={retry}>Retry</button>
|
|
37
|
+
* </div>
|
|
38
|
+
* )}
|
|
39
|
+
* >
|
|
40
|
+
* <TelemetryCard {...props} />
|
|
41
|
+
* </ErrorBoundary>
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
var ErrorBoundary = class extends Component {
|
|
45
|
+
constructor(props) {
|
|
46
|
+
super(props);
|
|
47
|
+
this.state = {
|
|
48
|
+
hasError: false,
|
|
49
|
+
error: null
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
static getDerivedStateFromError(error) {
|
|
53
|
+
return {
|
|
54
|
+
hasError: true,
|
|
55
|
+
error
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
componentDidCatch(error, errorInfo) {
|
|
59
|
+
this.props.onError?.(error, errorInfo);
|
|
60
|
+
if (process.env.NODE_ENV === "development") console.error("ErrorBoundary caught an error:", error, errorInfo);
|
|
61
|
+
}
|
|
62
|
+
handleRetry = () => {
|
|
63
|
+
this.setState({
|
|
64
|
+
hasError: false,
|
|
65
|
+
error: null
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
render() {
|
|
69
|
+
if (this.state.hasError) {
|
|
70
|
+
const { fallback, componentName } = this.props;
|
|
71
|
+
const { error } = this.state;
|
|
72
|
+
if (typeof fallback === "function" && error) return fallback(error, this.handleRetry);
|
|
73
|
+
if (fallback && typeof fallback !== "function") return fallback;
|
|
74
|
+
return /* @__PURE__ */ jsx(DefaultErrorFallback, {
|
|
75
|
+
error,
|
|
76
|
+
componentName,
|
|
77
|
+
onRetry: this.handleRetry
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return this.props.children;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
function DefaultErrorFallback({ error, componentName, onRetry }) {
|
|
84
|
+
const criticalColor = getStatusColor("critical");
|
|
85
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
86
|
+
role: "alert",
|
|
87
|
+
style: {
|
|
88
|
+
display: "flex",
|
|
89
|
+
flexDirection: "column",
|
|
90
|
+
alignItems: "center",
|
|
91
|
+
justifyContent: "center",
|
|
92
|
+
padding: 24,
|
|
93
|
+
minHeight: 120,
|
|
94
|
+
backgroundColor: "var(--zendir-bg-surface, #1b2d3e)",
|
|
95
|
+
borderRadius: 8,
|
|
96
|
+
border: `1px solid ${criticalColor}40`,
|
|
97
|
+
textAlign: "center"
|
|
98
|
+
},
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ jsx("svg", {
|
|
101
|
+
viewBox: "0 0 24 24",
|
|
102
|
+
fill: criticalColor,
|
|
103
|
+
width: "32",
|
|
104
|
+
height: "32",
|
|
105
|
+
style: {
|
|
106
|
+
marginBottom: 12,
|
|
107
|
+
opacity: .8
|
|
108
|
+
},
|
|
109
|
+
children: /* @__PURE__ */ jsx("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" })
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ jsx("h3", {
|
|
112
|
+
style: {
|
|
113
|
+
margin: 0,
|
|
114
|
+
marginBottom: 8,
|
|
115
|
+
fontSize: "0.875rem",
|
|
116
|
+
fontWeight: 500,
|
|
117
|
+
color: "var(--zendir-text-primary, #ffffff)"
|
|
118
|
+
},
|
|
119
|
+
children: componentName ? `${componentName} Error` : "Something went wrong"
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ jsx("p", {
|
|
122
|
+
style: {
|
|
123
|
+
margin: 0,
|
|
124
|
+
marginBottom: 16,
|
|
125
|
+
fontSize: 12,
|
|
126
|
+
color: "var(--zendir-text-secondary, #a4abb6)",
|
|
127
|
+
maxWidth: 280
|
|
128
|
+
},
|
|
129
|
+
children: error?.message ?? "An unexpected error occurred"
|
|
130
|
+
}),
|
|
131
|
+
/* @__PURE__ */ jsx("button", {
|
|
132
|
+
onClick: onRetry,
|
|
133
|
+
style: {
|
|
134
|
+
padding: "8px 16px",
|
|
135
|
+
fontSize: 12,
|
|
136
|
+
fontWeight: 500,
|
|
137
|
+
color: "#ffffff",
|
|
138
|
+
backgroundColor: "var(--zendir-accent-primary, #4dacff)",
|
|
139
|
+
border: "none",
|
|
140
|
+
borderRadius: 4,
|
|
141
|
+
cursor: "pointer",
|
|
142
|
+
transition: "background-color 150ms ease"
|
|
143
|
+
},
|
|
144
|
+
onMouseEnter: (e) => e.currentTarget.style.backgroundColor = "var(--zendir-accent-secondary, #92cbff)",
|
|
145
|
+
onMouseLeave: (e) => e.currentTarget.style.backgroundColor = "var(--zendir-accent-primary, #4dacff)",
|
|
146
|
+
children: "Try Again"
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
});
|
|
132
150
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
151
|
+
/**
|
|
152
|
+
* Wraps a component with an ErrorBoundary
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```tsx
|
|
156
|
+
* const SafeSpacecraftCard = withErrorBoundary(SpacecraftCard, {
|
|
157
|
+
* componentName: 'SpacecraftCard',
|
|
158
|
+
* onError: (error) => logError(error),
|
|
159
|
+
* });
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
function withErrorBoundary(Component, options = {}) {
|
|
163
|
+
const WrappedComponent = (props) => /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
164
|
+
...options,
|
|
165
|
+
children: /* @__PURE__ */ jsx(Component, { ...props })
|
|
166
|
+
});
|
|
167
|
+
WrappedComponent.displayName = `WithErrorBoundary(${Component.displayName ?? Component.name ?? "Component"})`;
|
|
168
|
+
return WrappedComponent;
|
|
137
169
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
//# sourceMappingURL=ErrorBoundary.js.map
|
|
170
|
+
//#endregion
|
|
171
|
+
export { ErrorBoundary, withErrorBoundary };
|
|
172
|
+
|
|
173
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBoundary.js","sources":["../../../src/react/shared/ErrorBoundary.tsx"],"sourcesContent":["/**\n * @zendir/ui - ErrorBoundary Component\n
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../../src/react/shared/ErrorBoundary.tsx"],"sourcesContent":["/**\n * @zendir/ui - ErrorBoundary Component\n *\n * React error boundary that catches JavaScript errors in child components.\n * Prevents white screen of death and displays graceful fallback UI.\n *\n * Features:\n * - Customizable fallback UI\n * - Error callback for logging/reporting\n * - Retry functionality\n * - Accessible error display\n */\n\nimport React, { Component, ErrorInfo, ReactNode } from \"react\";\nimport { getStatusColor } from \"../utils\";\n\nexport interface ErrorBoundaryProps {\n /** Custom fallback UI or render function */\n fallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);\n /** Callback when error is caught */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n /** Children to render */\n children: ReactNode;\n /** Component name for error context */\n componentName?: string;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\n/**\n * ErrorBoundary - Catches and handles component errors gracefully\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={<ErrorCard message=\"Failed to load\" />}\n * onError={(error) => logError(error)}\n * >\n * <SpacecraftCard {...props} />\n * </ErrorBoundary>\n * ```\n *\n * @example\n * ```tsx\n * <ErrorBoundary\n * fallback={(error, retry) => (\n * <div>\n * <p>Error: {error.message}</p>\n * <button onClick={retry}>Retry</button>\n * </div>\n * )}\n * >\n * <TelemetryCard {...props} />\n * </ErrorBoundary>\n * ```\n */\nexport class ErrorBoundary extends Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n this.props.onError?.(error, errorInfo);\n\n // Log to console in development\n if (process.env.NODE_ENV === \"development\") {\n console.error(\"ErrorBoundary caught an error:\", error, errorInfo);\n }\n }\n\n handleRetry = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { fallback, componentName } = this.props;\n const { error } = this.state;\n\n // Custom fallback render function\n if (typeof fallback === \"function\" && error) {\n return fallback(error, this.handleRetry);\n }\n\n // Custom fallback element (exclude function - already handled above)\n if (fallback && typeof fallback !== \"function\") {\n return fallback;\n }\n\n // Default fallback UI\n return (\n <DefaultErrorFallback\n error={error}\n componentName={componentName}\n onRetry={this.handleRetry}\n />\n );\n }\n\n return this.props.children;\n }\n}\n\n// ============================================================================\n// Default Error Fallback\n// ============================================================================\n\ninterface DefaultErrorFallbackProps {\n error: Error | null;\n componentName?: string;\n onRetry: () => void;\n}\n\nfunction DefaultErrorFallback({\n error,\n componentName,\n onRetry,\n}: DefaultErrorFallbackProps): React.ReactElement {\n const criticalColor = getStatusColor(\"critical\");\n\n return (\n <div\n role=\"alert\"\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: 24,\n minHeight: 120,\n backgroundColor: \"var(--zendir-bg-surface, #1b2d3e)\",\n borderRadius: 8,\n border: `1px solid ${criticalColor}40`,\n textAlign: \"center\",\n }}\n >\n {/* Error icon */}\n <svg\n viewBox=\"0 0 24 24\"\n fill={criticalColor}\n width=\"32\"\n height=\"32\"\n style={{ marginBottom: 12, opacity: 0.8 }}\n >\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z\" />\n </svg>\n\n {/* Error message */}\n <h3\n style={{\n margin: 0,\n marginBottom: 8,\n fontSize: \"0.875rem\", // 14px in rem\n fontWeight: 500, // AstroUXDS medium\n color: \"var(--zendir-text-primary, #ffffff)\",\n }}\n >\n {componentName ? `${componentName} Error` : \"Something went wrong\"}\n </h3>\n\n <p\n style={{\n margin: 0,\n marginBottom: 16,\n fontSize: 12,\n color: \"var(--zendir-text-secondary, #a4abb6)\",\n maxWidth: 280,\n }}\n >\n {error?.message ?? \"An unexpected error occurred\"}\n </p>\n\n {/* Retry button */}\n <button\n onClick={onRetry}\n style={{\n padding: \"8px 16px\",\n fontSize: 12,\n fontWeight: 500,\n color: \"#ffffff\",\n backgroundColor: \"var(--zendir-accent-primary, #4dacff)\",\n border: \"none\",\n borderRadius: 4,\n cursor: \"pointer\",\n transition: \"background-color 150ms ease\",\n }}\n onMouseEnter={(e) =>\n (e.currentTarget.style.backgroundColor =\n \"var(--zendir-accent-secondary, #92cbff)\")\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor =\n \"var(--zendir-accent-primary, #4dacff)\")\n }\n >\n Try Again\n </button>\n </div>\n );\n}\n\n// ============================================================================\n// Higher-Order Component for Error Boundaries\n// ============================================================================\n\n/**\n * Wraps a component with an ErrorBoundary\n *\n * @example\n * ```tsx\n * const SafeSpacecraftCard = withErrorBoundary(SpacecraftCard, {\n * componentName: 'SpacecraftCard',\n * onError: (error) => logError(error),\n * });\n * ```\n */\nexport function withErrorBoundary<P extends object>(\n Component: React.ComponentType<P>,\n options: Omit<ErrorBoundaryProps, \"children\"> = {},\n): React.FC<P> {\n const WrappedComponent: React.FC<P> = (props) => (\n <ErrorBoundary {...options}>\n <Component {...props} />\n </ErrorBoundary>\n );\n\n WrappedComponent.displayName = `WithErrorBoundary(${Component.displayName ?? Component.name ?? \"Component\"})`;\n\n return WrappedComponent;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,IAAa,gBAAb,cAAmC,UAGjC;CACA,YAAY,OAA2B;EACrC,MAAM,KAAK;EACX,KAAK,QAAQ;GAAE,UAAU;GAAO,OAAO;EAAK;CAC9C;CAEA,OAAO,yBAAyB,OAAkC;EAChE,OAAO;GAAE,UAAU;GAAM;EAAM;CACjC;CAEA,kBAAkB,OAAc,WAA4B;EAC1D,KAAK,MAAM,UAAU,OAAO,SAAS;EAGrC,IAAA,QAAA,IAAA,aAA6B,eAC3B,QAAQ,MAAM,kCAAkC,OAAO,SAAS;CAEpE;CAEA,oBAA0B;EACxB,KAAK,SAAS;GAAE,UAAU;GAAO,OAAO;EAAK,CAAC;CAChD;CAEA,SAAoB;EAClB,IAAI,KAAK,MAAM,UAAU;GACvB,MAAM,EAAE,UAAU,kBAAkB,KAAK;GACzC,MAAM,EAAE,UAAU,KAAK;GAGvB,IAAI,OAAO,aAAa,cAAc,OACpC,OAAO,SAAS,OAAO,KAAK,WAAW;GAIzC,IAAI,YAAY,OAAO,aAAa,YAClC,OAAO;GAIT,OACE,oBAAC,sBAAD;IACS;IACQ;IACf,SAAS,KAAK;GACf,CAAA;EAEL;EAEA,OAAO,KAAK,MAAM;CACpB;AACF;AAYA,SAAS,qBAAqB,EAC5B,OACA,eACA,WACgD;CAChD,MAAM,gBAAgB,eAAe,UAAU;CAE/C,OACE,qBAAC,OAAD;EACE,MAAK;EACL,OAAO;GACL,SAAS;GACT,eAAe;GACf,YAAY;GACZ,gBAAgB;GAChB,SAAS;GACT,WAAW;GACX,iBAAiB;GACjB,cAAc;GACd,QAAQ,aAAa,cAAc;GACnC,WAAW;EACb;YAbF;GAgBE,oBAAC,OAAD;IACE,SAAQ;IACR,MAAM;IACN,OAAM;IACN,QAAO;IACP,OAAO;KAAE,cAAc;KAAI,SAAS;IAAI;cAExC,oBAAC,QAAD,EAAM,GAAE,mGAAoG,CAAA;GACzG,CAAA;GAGL,oBAAC,MAAD;IACE,OAAO;KACL,QAAQ;KACR,cAAc;KACd,UAAU;KACV,YAAY;KACZ,OAAO;IACT;cAEC,gBAAgB,GAAG,cAAc,UAAU;GAC1C,CAAA;GAEJ,oBAAC,KAAD;IACE,OAAO;KACL,QAAQ;KACR,cAAc;KACd,UAAU;KACV,OAAO;KACP,UAAU;IACZ;cAEC,OAAO,WAAW;GAClB,CAAA;GAGH,oBAAC,UAAD;IACE,SAAS;IACT,OAAO;KACL,SAAS;KACT,UAAU;KACV,YAAY;KACZ,OAAO;KACP,iBAAiB;KACjB,QAAQ;KACR,cAAc;KACd,QAAQ;KACR,YAAY;IACd;IACA,eAAe,MACZ,EAAE,cAAc,MAAM,kBACrB;IAEJ,eAAe,MACZ,EAAE,cAAc,MAAM,kBACrB;cAEL;GAEO,CAAA;EACL;;AAET;;;;;;;;;;;;AAiBA,SAAgB,kBACd,WACA,UAAgD,CAAC,GACpC;CACb,MAAM,oBAAiC,UACrC,oBAAC,eAAD;EAAe,GAAI;YACjB,oBAAC,WAAD,EAAW,GAAI,MAAQ,CAAA;CACV,CAAA;CAGjB,iBAAiB,cAAc,qBAAqB,UAAU,eAAe,UAAU,QAAQ,YAAY;CAE3G,OAAO;AACT"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
3
2
|
export interface SkeletonTextProps {
|
|
4
3
|
/** Number of lines to render */
|
|
5
4
|
lines?: number;
|
|
@@ -80,7 +79,7 @@ export interface SkeletonChartProps {
|
|
|
80
79
|
/** Chart height */
|
|
81
80
|
height?: number;
|
|
82
81
|
/** Chart type visualization */
|
|
83
|
-
type?:
|
|
82
|
+
type?: "line" | "bar" | "area";
|
|
84
83
|
/** Custom className */
|
|
85
84
|
className?: string;
|
|
86
85
|
}
|