@zendir/ui 0.1.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 +19 -0
- package/LICENSE +21 -0
- package/README.md +589 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +421 -0
- package/dist/index.js.map +1 -0
- package/dist/react/3d/EarthViewer.d.ts +46 -0
- package/dist/react/3d/EarthViewer.js +836 -0
- package/dist/react/3d/EarthViewer.js.map +1 -0
- package/dist/react/3d/SolarSystemViewer.d.ts +43 -0
- package/dist/react/3d/SolarSystemViewer.js +372 -0
- package/dist/react/3d/SolarSystemViewer.js.map +1 -0
- package/dist/react/3d/ZenSpace3D.d.ts +16 -0
- package/dist/react/3d/ZenSpace3D.js +1253 -0
- package/dist/react/3d/ZenSpace3D.js.map +1 -0
- package/dist/react/3d/ZenSpace3DCesium.d.ts +9 -0
- package/dist/react/3d/ZenSpace3DCesium.js +186 -0
- package/dist/react/3d/ZenSpace3DCesium.js.map +1 -0
- package/dist/react/3d/ZenSpace3DShaders.d.ts +78 -0
- package/dist/react/3d/ZenSpace3DShaders.js +94 -0
- package/dist/react/3d/ZenSpace3DShaders.js.map +1 -0
- package/dist/react/3d/ZenSpace3DTypes.d.ts +614 -0
- package/dist/react/3d/ZenSpace3DUtils.d.ts +183 -0
- package/dist/react/3d/ZenSpace3DUtils.js +213 -0
- package/dist/react/3d/ZenSpace3DUtils.js.map +1 -0
- package/dist/react/3d/index.d.ts +23 -0
- package/dist/react/3d/threeLoader.d.ts +22 -0
- package/dist/react/3d/threeLoader.js +18 -0
- package/dist/react/3d/threeLoader.js.map +1 -0
- package/dist/react/astro/ClassificationBanner.d.ts +25 -0
- package/dist/react/astro/ClassificationBanner.js +83 -0
- package/dist/react/astro/ClassificationBanner.js.map +1 -0
- package/dist/react/astro/GlobalStatusBar.d.ts +42 -0
- package/dist/react/astro/GlobalStatusBar.js +165 -0
- package/dist/react/astro/GlobalStatusBar.js.map +1 -0
- package/dist/react/astro/MissionClock.d.ts +169 -0
- package/dist/react/astro/MissionClock.js +411 -0
- package/dist/react/astro/MissionClock.js.map +1 -0
- package/dist/react/astro/MonitoringIcon.d.ts +60 -0
- package/dist/react/astro/MonitoringIcon.js +369 -0
- package/dist/react/astro/MonitoringIcon.js.map +1 -0
- package/dist/react/astro/Notification.d.ts +42 -0
- package/dist/react/astro/Notification.js +156 -0
- package/dist/react/astro/Notification.js.map +1 -0
- package/dist/react/astro/Progress.d.ts +39 -0
- package/dist/react/astro/Progress.js +149 -0
- package/dist/react/astro/Progress.js.map +1 -0
- package/dist/react/astro/SimulationControls.d.ts +136 -0
- package/dist/react/astro/SimulationControls.js +668 -0
- package/dist/react/astro/SimulationControls.js.map +1 -0
- package/dist/react/astro/StatusIndicator.d.ts +34 -0
- package/dist/react/astro/StatusIndicator.js +189 -0
- package/dist/react/astro/StatusIndicator.js.map +1 -0
- package/dist/react/astro/UnifiedTimeline.d.ts +106 -0
- package/dist/react/astro/UnifiedTimeline.js +1768 -0
- package/dist/react/astro/UnifiedTimeline.js.map +1 -0
- package/dist/react/astro/index.d.ts +63 -0
- package/dist/react/cards/AccessCard.d.ts +37 -0
- package/dist/react/cards/AccessCard.js +410 -0
- package/dist/react/cards/AccessCard.js.map +1 -0
- package/dist/react/cards/OrbitCard.d.ts +31 -0
- package/dist/react/cards/OrbitCard.js +372 -0
- package/dist/react/cards/OrbitCard.js.map +1 -0
- package/dist/react/cards/SpacecraftCard.d.ts +54 -0
- package/dist/react/cards/SpacecraftCard.js +941 -0
- package/dist/react/cards/SpacecraftCard.js.map +1 -0
- package/dist/react/cards/TelemetryCard.d.ts +40 -0
- package/dist/react/cards/TelemetryCard.js +742 -0
- package/dist/react/cards/TelemetryCard.js.map +1 -0
- package/dist/react/cards/TelemetryStreamCard.d.ts +59 -0
- package/dist/react/cards/TelemetryStreamCard.js +309 -0
- package/dist/react/cards/TelemetryStreamCard.js.map +1 -0
- package/dist/react/cards/index.d.ts +13 -0
- package/dist/react/charts/GroundTrackMap.d.ts +112 -0
- package/dist/react/charts/GroundTrackMap.js +1123 -0
- package/dist/react/charts/GroundTrackMap.js.map +1 -0
- package/dist/react/charts/GroundTrackMapLeaflet.d.ts +26 -0
- package/dist/react/charts/GroundTrackMapLeaflet.js +571 -0
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.d.ts +22 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.js +11 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.d.ts +24 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.js +109 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -0
- package/dist/react/charts/index.d.ts +10 -0
- package/dist/react/charts/unified/AstroChart.d.ts +24 -0
- package/dist/react/charts/unified/AstroChart.js +1405 -0
- package/dist/react/charts/unified/AstroChart.js.map +1 -0
- package/dist/react/charts/unified/PowerOverviewChart.d.ts +73 -0
- package/dist/react/charts/unified/PowerOverviewChart.js +488 -0
- package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -0
- package/dist/react/charts/unified/domain.d.ts +845 -0
- package/dist/react/charts/unified/domain.js +3168 -0
- package/dist/react/charts/unified/domain.js.map +1 -0
- package/dist/react/charts/unified/generators.d.ts +276 -0
- package/dist/react/charts/unified/generators.js +518 -0
- package/dist/react/charts/unified/generators.js.map +1 -0
- package/dist/react/charts/unified/index.d.ts +55 -0
- package/dist/react/charts/unified/presets.d.ts +290 -0
- package/dist/react/charts/unified/presets.js +999 -0
- package/dist/react/charts/unified/presets.js.map +1 -0
- package/dist/react/charts/unified/sync.d.ts +69 -0
- package/dist/react/charts/unified/sync.js +219 -0
- package/dist/react/charts/unified/sync.js.map +1 -0
- package/dist/react/charts/unified/theme.d.ts +447 -0
- package/dist/react/charts/unified/theme.js +562 -0
- package/dist/react/charts/unified/theme.js.map +1 -0
- package/dist/react/charts/unified/types.d.ts +826 -0
- package/dist/react/charts/unified/useChartStream.d.ts +58 -0
- package/dist/react/charts/unified/useChartStream.js +226 -0
- package/dist/react/charts/unified/useChartStream.js.map +1 -0
- package/dist/react/chatgpt/AppCard.d.ts +59 -0
- package/dist/react/chatgpt/AppCard.js +306 -0
- package/dist/react/chatgpt/AppCard.js.map +1 -0
- package/dist/react/chatgpt/ChatGPTCard.d.ts +6 -0
- package/dist/react/chatgpt/index.d.ts +167 -0
- package/dist/react/chatgpt/index.js +166 -0
- package/dist/react/chatgpt/index.js.map +1 -0
- package/dist/react/context/DisplaySettingsContext.d.ts +107 -0
- package/dist/react/context/DisplaySettingsContext.js +169 -0
- package/dist/react/context/DisplaySettingsContext.js.map +1 -0
- package/dist/react/context/index.d.ts +5 -0
- package/dist/react/core/ActivityPlanner.d.ts +45 -0
- package/dist/react/core/ActivityPlanner.js +532 -0
- package/dist/react/core/ActivityPlanner.js.map +1 -0
- package/dist/react/core/AppBar.d.ts +71 -0
- package/dist/react/core/AppBar.js +817 -0
- package/dist/react/core/AppBar.js.map +1 -0
- package/dist/react/core/AstroIcon.d.ts +84 -0
- package/dist/react/core/AstroIcon.js +1243 -0
- package/dist/react/core/AstroIcon.js.map +1 -0
- package/dist/react/core/Badge.d.ts +27 -0
- package/dist/react/core/Badge.js +134 -0
- package/dist/react/core/Badge.js.map +1 -0
- package/dist/react/core/Button.d.ts +26 -0
- package/dist/react/core/Button.js +306 -0
- package/dist/react/core/Button.js.map +1 -0
- package/dist/react/core/CardHeader.d.ts +34 -0
- package/dist/react/core/CardHeader.js +316 -0
- package/dist/react/core/CardHeader.js.map +1 -0
- package/dist/react/core/ChatPanel.d.ts +627 -0
- package/dist/react/core/ChatPanel.js +1144 -0
- package/dist/react/core/ChatPanel.js.map +1 -0
- package/dist/react/core/Checkbox.d.ts +26 -0
- package/dist/react/core/Checkbox.js +130 -0
- package/dist/react/core/Checkbox.js.map +1 -0
- package/dist/react/core/ColorPickerPanel.d.ts +25 -0
- package/dist/react/core/ColorPickerPanel.js +293 -0
- package/dist/react/core/ColorPickerPanel.js.map +1 -0
- package/dist/react/core/CommandBuilder.d.ts +74 -0
- package/dist/react/core/CommandBuilder.js +518 -0
- package/dist/react/core/CommandBuilder.js.map +1 -0
- package/dist/react/core/ConfirmDialog.d.ts +45 -0
- package/dist/react/core/ConfirmDialog.js +315 -0
- package/dist/react/core/ConfirmDialog.js.map +1 -0
- package/dist/react/core/ConnectionForm.d.ts +57 -0
- package/dist/react/core/ConnectionForm.js +496 -0
- package/dist/react/core/ConnectionForm.js.map +1 -0
- package/dist/react/core/Container.d.ts +51 -0
- package/dist/react/core/Container.js +670 -0
- package/dist/react/core/Container.js.map +1 -0
- package/dist/react/core/CopyButton.d.ts +39 -0
- package/dist/react/core/CopyButton.js +105 -0
- package/dist/react/core/CopyButton.js.map +1 -0
- package/dist/react/core/DataTable.d.ts +113 -0
- package/dist/react/core/DataTable.js +446 -0
- package/dist/react/core/DataTable.js.map +1 -0
- package/dist/react/core/DataValue.d.ts +64 -0
- package/dist/react/core/DataValue.js +545 -0
- package/dist/react/core/DataValue.js.map +1 -0
- package/dist/react/core/Dialog.d.ts +32 -0
- package/dist/react/core/Dialog.js +201 -0
- package/dist/react/core/Dialog.js.map +1 -0
- package/dist/react/core/FileExplorer.d.ts +65 -0
- package/dist/react/core/FileExplorer.js +520 -0
- package/dist/react/core/FileExplorer.js.map +1 -0
- package/dist/react/core/GlassCard.d.ts +129 -0
- package/dist/react/core/GlassCard.js +375 -0
- package/dist/react/core/GlassCard.js.map +1 -0
- package/dist/react/core/HeaderIconWithStatus.d.ts +39 -0
- package/dist/react/core/HeaderIconWithStatus.js +157 -0
- package/dist/react/core/HeaderIconWithStatus.js.map +1 -0
- package/dist/react/core/HexViewer.d.ts +143 -0
- package/dist/react/core/HexViewer.js +1106 -0
- package/dist/react/core/HexViewer.js.map +1 -0
- package/dist/react/core/Icon.d.ts +32 -0
- package/dist/react/core/Icon.js +142 -0
- package/dist/react/core/Icon.js.map +1 -0
- package/dist/react/core/ImageGallery.d.ts +41 -0
- package/dist/react/core/ImageGallery.js +320 -0
- package/dist/react/core/ImageGallery.js.map +1 -0
- package/dist/react/core/Input.d.ts +38 -0
- package/dist/react/core/Input.js +288 -0
- package/dist/react/core/Input.js.map +1 -0
- package/dist/react/core/LimitsBar.d.ts +51 -0
- package/dist/react/core/LimitsBar.js +200 -0
- package/dist/react/core/LimitsBar.js.map +1 -0
- package/dist/react/core/LogViewer.d.ts +61 -0
- package/dist/react/core/LogViewer.js +599 -0
- package/dist/react/core/LogViewer.js.map +1 -0
- package/dist/react/core/MessageStream.d.ts +58 -0
- package/dist/react/core/MessageStream.js +455 -0
- package/dist/react/core/MessageStream.js.map +1 -0
- package/dist/react/core/MissionCalendar.d.ts +81 -0
- package/dist/react/core/MissionCalendar.js +1049 -0
- package/dist/react/core/MissionCalendar.js.map +1 -0
- package/dist/react/core/NumberInput.d.ts +85 -0
- package/dist/react/core/NumberInput.js +507 -0
- package/dist/react/core/NumberInput.js.map +1 -0
- package/dist/react/core/PacketViewer.d.ts +73 -0
- package/dist/react/core/PacketViewer.js +431 -0
- package/dist/react/core/PacketViewer.js.map +1 -0
- package/dist/react/core/Pagination.d.ts +30 -0
- package/dist/react/core/Pagination.js +190 -0
- package/dist/react/core/Pagination.js.map +1 -0
- package/dist/react/core/PinInput.d.ts +41 -0
- package/dist/react/core/PinInput.js +210 -0
- package/dist/react/core/PinInput.js.map +1 -0
- package/dist/react/core/Popover.d.ts +55 -0
- package/dist/react/core/Popover.js +288 -0
- package/dist/react/core/Popover.js.map +1 -0
- package/dist/react/core/Select.d.ts +42 -0
- package/dist/react/core/Select.js +303 -0
- package/dist/react/core/Select.js.map +1 -0
- package/dist/react/core/SideNav.d.ts +103 -0
- package/dist/react/core/SideNav.js +551 -0
- package/dist/react/core/SideNav.js.map +1 -0
- package/dist/react/core/SidePanel.d.ts +33 -0
- package/dist/react/core/SidePanel.js +199 -0
- package/dist/react/core/SidePanel.js.map +1 -0
- package/dist/react/core/Tabs.d.ts +47 -0
- package/dist/react/core/Tabs.js +129 -0
- package/dist/react/core/Tabs.js.map +1 -0
- package/dist/react/core/Toast.d.ts +56 -0
- package/dist/react/core/Toast.js +229 -0
- package/dist/react/core/Toast.js.map +1 -0
- package/dist/react/core/Toggle.d.ts +22 -0
- package/dist/react/core/Toggle.js +151 -0
- package/dist/react/core/Toggle.js.map +1 -0
- package/dist/react/core/Tooltip.d.ts +19 -0
- package/dist/react/core/Tooltip.js +179 -0
- package/dist/react/core/Tooltip.js.map +1 -0
- package/dist/react/core/Typography.d.ts +127 -0
- package/dist/react/core/Typography.js +187 -0
- package/dist/react/core/Typography.js.map +1 -0
- package/dist/react/core/index.d.ts +108 -0
- package/dist/react/core/layout/Box.d.ts +77 -0
- package/dist/react/core/layout/Box.js +126 -0
- package/dist/react/core/layout/Box.js.map +1 -0
- package/dist/react/core/layout/Center.d.ts +20 -0
- package/dist/react/core/layout/Center.js +34 -0
- package/dist/react/core/layout/Center.js.map +1 -0
- package/dist/react/core/layout/Divider.d.ts +16 -0
- package/dist/react/core/layout/Divider.js +108 -0
- package/dist/react/core/layout/Divider.js.map +1 -0
- package/dist/react/core/layout/Flex.d.ts +30 -0
- package/dist/react/core/layout/Flex.js +128 -0
- package/dist/react/core/layout/Flex.js.map +1 -0
- package/dist/react/core/layout/Grid.d.ts +36 -0
- package/dist/react/core/layout/Grid.js +142 -0
- package/dist/react/core/layout/Grid.js.map +1 -0
- package/dist/react/core/layout/Spacer.d.ts +8 -0
- package/dist/react/core/layout/Spacer.js +31 -0
- package/dist/react/core/layout/Spacer.js.map +1 -0
- package/dist/react/core/layout/Stack.d.ts +54 -0
- package/dist/react/core/layout/Stack.js +74 -0
- package/dist/react/core/layout/Stack.js.map +1 -0
- package/dist/react/core/layout/index.d.ts +38 -0
- package/dist/react/core/layout/responsive.d.ts +23 -0
- package/dist/react/core/layout/responsive.js +26 -0
- package/dist/react/core/layout/responsive.js.map +1 -0
- package/dist/react/core/layout/useBreakpoint.d.ts +77 -0
- package/dist/react/core/layout/useBreakpoint.js +73 -0
- package/dist/react/core/layout/useBreakpoint.js.map +1 -0
- package/dist/react/core/propertyConfig.d.ts +443 -0
- package/dist/react/core/propertyConfig.js +399 -0
- package/dist/react/core/propertyConfig.js.map +1 -0
- package/dist/react/hooks/index.d.ts +21 -0
- package/dist/react/hooks/useAccessWindows.d.ts +66 -0
- package/dist/react/hooks/useCompactMode.d.ts +82 -0
- package/dist/react/hooks/useCompactMode.js +62 -0
- package/dist/react/hooks/useCompactMode.js.map +1 -0
- package/dist/react/hooks/useLiveSelection.d.ts +57 -0
- package/dist/react/hooks/useSimulationPlayback.d.ts +97 -0
- package/dist/react/hooks/useSimulationTime.d.ts +61 -0
- package/dist/react/hooks/useSpacecraftPosition.d.ts +50 -0
- package/dist/react/hooks/useSpacecraftPosition.js +89 -0
- package/dist/react/hooks/useSpacecraftPosition.js.map +1 -0
- package/dist/react/hooks/useTelemetry.d.ts +55 -0
- package/dist/react/hooks/useTelemetry.js +73 -0
- package/dist/react/hooks/useTelemetry.js.map +1 -0
- package/dist/react/hooks/useZendirSession.d.ts +109 -0
- package/dist/react/hooks/useZendirSession.js +148 -0
- package/dist/react/hooks/useZendirSession.js.map +1 -0
- package/dist/react/index.d.ts +74 -0
- package/dist/react/shared/ErrorBoundary.d.ts +63 -0
- package/dist/react/shared/ErrorBoundary.js +142 -0
- package/dist/react/shared/ErrorBoundary.js.map +1 -0
- package/dist/react/shared/Skeleton.d.ts +110 -0
- package/dist/react/shared/Skeleton.js +324 -0
- package/dist/react/shared/Skeleton.js.map +1 -0
- package/dist/react/shared/index.d.ts +12 -0
- package/dist/react/theme/ThemeProvider.d.ts +385 -0
- package/dist/react/theme/ThemeProvider.js +1096 -0
- package/dist/react/theme/ThemeProvider.js.map +1 -0
- package/dist/react/theme/astro-tokens.d.ts +153 -0
- package/dist/react/theme/cardAccent.d.ts +75 -0
- package/dist/react/theme/cardAccent.js +137 -0
- package/dist/react/theme/cardAccent.js.map +1 -0
- package/dist/react/theme/config.d.ts +39 -0
- package/dist/react/theme/index.d.ts +9 -0
- package/dist/react/types.d.ts +360 -0
- package/dist/react/types.js +58 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/utils/index.d.ts +247 -0
- package/dist/react/utils/index.js +423 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/react/visualizations/EclipseTimerCard.d.ts +17 -0
- package/dist/react/visualizations/EclipseTimerCard.js +250 -0
- package/dist/react/visualizations/EclipseTimerCard.js.map +1 -0
- package/dist/react/visualizations/LinkBudgetCard.d.ts +50 -0
- package/dist/react/visualizations/LinkBudgetCard.js +444 -0
- package/dist/react/visualizations/LinkBudgetCard.js.map +1 -0
- package/dist/react/visualizations/NavBallCard.d.ts +17 -0
- package/dist/react/visualizations/NavBallCard.js +243 -0
- package/dist/react/visualizations/NavBallCard.js.map +1 -0
- package/dist/react/visualizations/PropulsionCard.d.ts +37 -0
- package/dist/react/visualizations/PropulsionCard.js +298 -0
- package/dist/react/visualizations/PropulsionCard.js.map +1 -0
- package/dist/react/visualizations/SensorFootprintCard.d.ts +33 -0
- package/dist/react/visualizations/SensorFootprintCard.js +326 -0
- package/dist/react/visualizations/SensorFootprintCard.js.map +1 -0
- package/dist/react/visualizations/ThermalHeatmapCard.d.ts +38 -0
- package/dist/react/visualizations/ThermalHeatmapCard.js +372 -0
- package/dist/react/visualizations/ThermalHeatmapCard.js.map +1 -0
- package/dist/react/visualizations/index.d.ts +17 -0
- package/dist/react.d.ts +1 -0
- package/dist/react.js +421 -0
- package/dist/react.js.map +1 -0
- package/dist/shaders/atmosphere.frag.js +5 -0
- package/dist/shaders/atmosphere.frag.js.map +1 -0
- package/dist/shaders/atmosphere.vert.js +5 -0
- package/dist/shaders/atmosphere.vert.js.map +1 -0
- package/dist/shaders/stars.frag.js +5 -0
- package/dist/shaders/stars.frag.js.map +1 -0
- package/dist/shaders/stars.vert.js +5 -0
- package/dist/shaders/stars.vert.js.map +1 -0
- package/dist/style.css +143 -0
- package/dist/tokens/index.d.ts +296 -0
- package/dist/tokens/index.js +263 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/tokens.css +155 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +220 -0
- package/sdk-stub.js +22 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { useState, useRef, useEffect, useCallback } from "react";
|
|
2
|
+
let loadState = "pending";
|
|
3
|
+
let sdkModule = null;
|
|
4
|
+
const subscribers = /* @__PURE__ */ new Set();
|
|
5
|
+
function subscribe(callback) {
|
|
6
|
+
subscribers.add(callback);
|
|
7
|
+
return () => subscribers.delete(callback);
|
|
8
|
+
}
|
|
9
|
+
function notifySubscribers() {
|
|
10
|
+
subscribers.forEach((cb) => cb());
|
|
11
|
+
}
|
|
12
|
+
async function loadZendirSDK() {
|
|
13
|
+
if (loadState === "loaded") {
|
|
14
|
+
return sdkModule;
|
|
15
|
+
}
|
|
16
|
+
if (loadState === "failed") {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (loadState === "loading") {
|
|
20
|
+
return new Promise((resolve) => {
|
|
21
|
+
const unsub = subscribe(() => {
|
|
22
|
+
unsub();
|
|
23
|
+
resolve(sdkModule);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
loadState = "loading";
|
|
28
|
+
try {
|
|
29
|
+
const mod = await import(
|
|
30
|
+
/* @vite-ignore */
|
|
31
|
+
"@zendir/sdk"
|
|
32
|
+
);
|
|
33
|
+
sdkModule = { getZendirClient: mod.getZendirClient };
|
|
34
|
+
loadState = "loaded";
|
|
35
|
+
notifySubscribers();
|
|
36
|
+
return sdkModule;
|
|
37
|
+
} catch (err) {
|
|
38
|
+
loadState = "failed";
|
|
39
|
+
notifySubscribers();
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function useZendirSession(options = {}) {
|
|
44
|
+
const { apiKey, baseUrl, autoConnect = false, debug = false } = options;
|
|
45
|
+
const [sdkLoaded, setSdkLoaded] = useState(loadState === "loaded");
|
|
46
|
+
const [sdkFailed, setSdkFailed] = useState(loadState === "failed");
|
|
47
|
+
const clientRef = useRef(null);
|
|
48
|
+
const [session, setSession] = useState(null);
|
|
49
|
+
const [simulation, setSimulation] = useState(null);
|
|
50
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
51
|
+
const [error, setError] = useState(null);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
let mounted = true;
|
|
54
|
+
const unsubscribe = subscribe(() => {
|
|
55
|
+
if (mounted) {
|
|
56
|
+
setSdkLoaded(loadState === "loaded");
|
|
57
|
+
setSdkFailed(loadState === "failed");
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
if (loadState === "pending") {
|
|
61
|
+
loadZendirSDK().then((mod) => {
|
|
62
|
+
if (mounted && mod) {
|
|
63
|
+
clientRef.current = mod.getZendirClient({ apiKey, baseUrl, debug });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
} else if (loadState === "loaded" && sdkModule) {
|
|
67
|
+
clientRef.current = sdkModule.getZendirClient({ apiKey, baseUrl, debug });
|
|
68
|
+
}
|
|
69
|
+
return () => {
|
|
70
|
+
mounted = false;
|
|
71
|
+
unsubscribe();
|
|
72
|
+
};
|
|
73
|
+
}, [apiKey, baseUrl, debug]);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (sdkFailed) {
|
|
76
|
+
setError("@zendir/sdk is not installed. Install with: npm install @zendir/sdk");
|
|
77
|
+
}
|
|
78
|
+
}, [sdkFailed]);
|
|
79
|
+
const connect = useCallback(async () => {
|
|
80
|
+
if (!clientRef.current) {
|
|
81
|
+
setError("@zendir/sdk is not available");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
setIsLoading(true);
|
|
85
|
+
setError(null);
|
|
86
|
+
try {
|
|
87
|
+
const sessionInfo = await clientRef.current.createSession();
|
|
88
|
+
setSession(sessionInfo);
|
|
89
|
+
} catch (err) {
|
|
90
|
+
const message = err instanceof Error ? err.message : "Failed to connect";
|
|
91
|
+
setError(message);
|
|
92
|
+
throw err;
|
|
93
|
+
} finally {
|
|
94
|
+
setIsLoading(false);
|
|
95
|
+
}
|
|
96
|
+
}, []);
|
|
97
|
+
const createSimulation = useCallback(async (params) => {
|
|
98
|
+
if (!clientRef.current) {
|
|
99
|
+
setError("@zendir/sdk is not available");
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setIsLoading(true);
|
|
103
|
+
setError(null);
|
|
104
|
+
try {
|
|
105
|
+
const simInfo = await clientRef.current.createSimulation({
|
|
106
|
+
name: params.name,
|
|
107
|
+
spacecraft: params.spacecraft
|
|
108
|
+
});
|
|
109
|
+
setSimulation(simInfo);
|
|
110
|
+
} catch (err) {
|
|
111
|
+
const message = err instanceof Error ? err.message : "Failed to create simulation";
|
|
112
|
+
setError(message);
|
|
113
|
+
throw err;
|
|
114
|
+
} finally {
|
|
115
|
+
setIsLoading(false);
|
|
116
|
+
}
|
|
117
|
+
}, []);
|
|
118
|
+
const disconnect = useCallback(() => {
|
|
119
|
+
if (clientRef.current) {
|
|
120
|
+
clientRef.current.clearSession();
|
|
121
|
+
}
|
|
122
|
+
setSession(null);
|
|
123
|
+
setSimulation(null);
|
|
124
|
+
setError(null);
|
|
125
|
+
}, []);
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
if (autoConnect && apiKey && sdkLoaded && clientRef.current) {
|
|
128
|
+
connect().catch(() => {
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}, [autoConnect, apiKey, sdkLoaded, connect]);
|
|
132
|
+
return {
|
|
133
|
+
session,
|
|
134
|
+
simulation,
|
|
135
|
+
isLoading,
|
|
136
|
+
error,
|
|
137
|
+
isConnected: !!session && session.status === "active",
|
|
138
|
+
isSdkAvailable: sdkLoaded && !sdkFailed,
|
|
139
|
+
client: clientRef.current,
|
|
140
|
+
connect,
|
|
141
|
+
createSimulation,
|
|
142
|
+
disconnect
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export {
|
|
146
|
+
useZendirSession
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=useZendirSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useZendirSession.js","sources":["../../../src/react/hooks/useZendirSession.ts"],"sourcesContent":["/**\n * @zendir/ui - useZendirSession Hook\n * \n * React hook for managing Zendir API session lifecycle.\n * \n * OPTIONAL DEPENDENCY: Requires @zendir/sdk to be installed.\n * If not installed, the hook returns an error state.\n * \n * @example\n * ```tsx\n * import { useZendirSession } from '@zendir/ui/react';\n * \n * function App() {\n * const { session, connect, isLoading, error } = useZendirSession({\n * apiKey: 'your-api-key',\n * autoConnect: true,\n * });\n * \n * if (error) return <div>Error: {error}</div>;\n * if (isLoading) return <div>Connecting...</div>;\n * if (!session) return <button onClick={connect}>Connect</button>;\n * \n * return <div>Connected: {session.id}</div>;\n * }\n * ```\n */\n\nimport { useState, useEffect, useCallback, useRef } from 'react';\n\n// ============================================================================\n// Types (defined locally to avoid hard dependency on @zendir/sdk)\n// ============================================================================\n\n/** Session info from Zendir API */\nexport interface SessionInfo {\n id: string;\n status: 'active' | 'expired' | 'error';\n createdAt?: string;\n expiresAt?: string;\n}\n\n/** Simulation info from Zendir API */\nexport interface SimulationInfo {\n id: string;\n name?: string;\n status: 'running' | 'paused' | 'stopped';\n spacecraftCount?: number;\n}\n\n/** Zendir client interface (matches @zendir/sdk) */\nexport interface ZendirClientInterface {\n createSession: () => Promise<SessionInfo>;\n createSimulation: (params: {\n name?: string;\n spacecraft: Array<{\n name: string;\n tle?: { line1: string; line2: string };\n catalogNumber?: number;\n }>;\n }) => Promise<SimulationInfo>;\n clearSession: () => void;\n}\n\n// ============================================================================\n// Dynamic SDK Loading\n// ============================================================================\n\ntype LoadState = 'pending' | 'loading' | 'loaded' | 'failed';\nlet loadState: LoadState = 'pending';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet sdkModule: { getZendirClient: (options?: any) => any } | null = null;\nconst subscribers = new Set<() => void>();\n\nfunction subscribe(callback: () => void) {\n subscribers.add(callback);\n return () => subscribers.delete(callback);\n}\n\nfunction notifySubscribers() {\n subscribers.forEach(cb => cb());\n}\n\n/**\n * Dynamically load @zendir/sdk\n * Returns null if not available\n */\nasync function loadZendirSDK(): Promise<typeof sdkModule> {\n if (loadState === 'loaded') {\n return sdkModule;\n }\n \n if (loadState === 'failed') {\n return null;\n }\n \n if (loadState === 'loading') {\n // Wait for the existing load to complete\n return new Promise(resolve => {\n const unsub = subscribe(() => {\n unsub();\n resolve(sdkModule);\n });\n });\n }\n \n loadState = 'loading';\n \n try {\n // @vite-ignore: optional peer — do not resolve at build time when SDK is not installed\n const mod = await import(/* @vite-ignore */ '@zendir/sdk');\n sdkModule = { getZendirClient: mod.getZendirClient };\n loadState = 'loaded';\n notifySubscribers();\n return sdkModule;\n } catch (err) {\n loadState = 'failed';\n notifySubscribers();\n return null;\n }\n}\n\n// ============================================================================\n// Hook Types\n// ============================================================================\n\nexport interface UseZendirSessionOptions {\n /** API key (optional - can be set via client) */\n apiKey?: string;\n /** Base URL override */\n baseUrl?: string;\n /** Auto-connect on mount */\n autoConnect?: boolean;\n /** Enable debug logging */\n debug?: boolean;\n}\n\nexport interface UseZendirSessionResult {\n /** Current session info */\n session: SessionInfo | null;\n /** Current simulation info */\n simulation: SimulationInfo | null;\n /** Loading state */\n isLoading: boolean;\n /** Error message */\n error: string | null;\n /** Connected status */\n isConnected: boolean;\n /** Whether SDK is available */\n isSdkAvailable: boolean;\n /** Zendir client instance (null if SDK not loaded) */\n client: ZendirClientInterface | null;\n /** Connect/create session */\n connect: () => Promise<void>;\n /** Create simulation */\n createSimulation: (params: {\n name?: string;\n spacecraft: Array<{\n name: string;\n tle?: { line1: string; line2: string };\n catalogNumber?: number;\n }>;\n }) => Promise<void>;\n /** Disconnect/clear session */\n disconnect: () => void;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nexport function useZendirSession(\n options: UseZendirSessionOptions = {}\n): UseZendirSessionResult {\n const { apiKey, baseUrl, autoConnect = false, debug = false } = options;\n\n const [sdkLoaded, setSdkLoaded] = useState(loadState === 'loaded');\n const [sdkFailed, setSdkFailed] = useState(loadState === 'failed');\n const clientRef = useRef<ZendirClientInterface | null>(null);\n \n const [session, setSession] = useState<SessionInfo | null>(null);\n const [simulation, setSimulation] = useState<SimulationInfo | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n // Load SDK on mount\n useEffect(() => {\n let mounted = true;\n \n const unsubscribe = subscribe(() => {\n if (mounted) {\n setSdkLoaded(loadState === 'loaded');\n setSdkFailed(loadState === 'failed');\n }\n });\n \n if (loadState === 'pending') {\n loadZendirSDK().then((mod) => {\n if (mounted && mod) {\n clientRef.current = mod.getZendirClient({ apiKey, baseUrl, debug });\n }\n });\n } else if (loadState === 'loaded' && sdkModule) {\n clientRef.current = sdkModule.getZendirClient({ apiKey, baseUrl, debug });\n }\n \n return () => {\n mounted = false;\n unsubscribe();\n };\n }, [apiKey, baseUrl, debug]);\n\n // Update error if SDK failed to load\n useEffect(() => {\n if (sdkFailed) {\n setError('@zendir/sdk is not installed. Install with: npm install @zendir/sdk');\n }\n }, [sdkFailed]);\n\n const connect = useCallback(async () => {\n if (!clientRef.current) {\n setError('@zendir/sdk is not available');\n return;\n }\n \n setIsLoading(true);\n setError(null);\n\n try {\n const sessionInfo = await clientRef.current.createSession();\n setSession(sessionInfo);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to connect';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const createSimulation = useCallback(async (params: {\n name?: string;\n spacecraft: Array<{\n name: string;\n tle?: { line1: string; line2: string };\n catalogNumber?: number;\n }>;\n }) => {\n if (!clientRef.current) {\n setError('@zendir/sdk is not available');\n return;\n }\n \n setIsLoading(true);\n setError(null);\n\n try {\n const simInfo = await clientRef.current.createSimulation({\n name: params.name,\n spacecraft: params.spacecraft,\n });\n setSimulation(simInfo);\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to create simulation';\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n const disconnect = useCallback(() => {\n if (clientRef.current) {\n clientRef.current.clearSession();\n }\n setSession(null);\n setSimulation(null);\n setError(null);\n }, []);\n\n // Auto-connect on mount if enabled and SDK is loaded\n useEffect(() => {\n if (autoConnect && apiKey && sdkLoaded && clientRef.current) {\n connect().catch(() => {\n // Error already set in state\n });\n }\n }, [autoConnect, apiKey, sdkLoaded, connect]);\n\n return {\n session,\n simulation,\n isLoading,\n error,\n isConnected: !!session && session.status === 'active',\n isSdkAvailable: sdkLoaded && !sdkFailed,\n client: clientRef.current,\n connect,\n createSimulation,\n disconnect,\n };\n}\n\n/**\n * Check if @zendir/sdk is available\n */\nexport function isZendirSdkAvailable(): boolean {\n return loadState === 'loaded' && sdkModule !== null;\n}\n\n/**\n * Preload the @zendir/sdk module\n * Call this early in your app to ensure SDK is ready\n */\nexport async function preloadZendirSdk(): Promise<boolean> {\n const mod = await loadZendirSDK();\n return mod !== null;\n}\n\nexport default useZendirSession;\n"],"names":[],"mappings":";AAoEA,IAAI,YAAuB;AAE3B,IAAI,YAAgE;AACpE,MAAM,kCAAkB,IAAA;AAExB,SAAS,UAAU,UAAsB;AACvC,cAAY,IAAI,QAAQ;AACxB,SAAO,MAAM,YAAY,OAAO,QAAQ;AAC1C;AAEA,SAAS,oBAAoB;AAC3B,cAAY,QAAQ,CAAA,OAAM,GAAA,CAAI;AAChC;AAMA,eAAe,gBAA2C;AACxD,MAAI,cAAc,UAAU;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,UAAU;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,cAAc,WAAW;AAE3B,WAAO,IAAI,QAAQ,CAAA,YAAW;AAC5B,YAAM,QAAQ,UAAU,MAAM;AAC5B,cAAA;AACA,gBAAQ,SAAS;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,cAAY;AAEZ,MAAI;AAEF,UAAM,MAAM,MAAM;AAAA;AAAA,MAA0B;AAAA,IAAA;AAC5C,gBAAY,EAAE,iBAAiB,IAAI,gBAAA;AACnC,gBAAY;AACZ,sBAAA;AACA,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,gBAAY;AACZ,sBAAA;AACA,WAAO;AAAA,EACT;AACF;AAmDO,SAAS,iBACd,UAAmC,IACX;AACxB,QAAM,EAAE,QAAQ,SAAS,cAAc,OAAO,QAAQ,UAAU;AAEhE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,cAAc,QAAQ;AACjE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,cAAc,QAAQ;AACjE,QAAM,YAAY,OAAqC,IAAI;AAE3D,QAAM,CAAC,SAAS,UAAU,IAAI,SAA6B,IAAI;AAC/D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAgC,IAAI;AACxE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAGtD,YAAU,MAAM;AACd,QAAI,UAAU;AAEd,UAAM,cAAc,UAAU,MAAM;AAClC,UAAI,SAAS;AACX,qBAAa,cAAc,QAAQ;AACnC,qBAAa,cAAc,QAAQ;AAAA,MACrC;AAAA,IACF,CAAC;AAED,QAAI,cAAc,WAAW;AAC3B,oBAAA,EAAgB,KAAK,CAAC,QAAQ;AAC5B,YAAI,WAAW,KAAK;AAClB,oBAAU,UAAU,IAAI,gBAAgB,EAAE,QAAQ,SAAS,OAAO;AAAA,QACpE;AAAA,MACF,CAAC;AAAA,IACH,WAAW,cAAc,YAAY,WAAW;AAC9C,gBAAU,UAAU,UAAU,gBAAgB,EAAE,QAAQ,SAAS,OAAO;AAAA,IAC1E;AAEA,WAAO,MAAM;AACX,gBAAU;AACV,kBAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,SAAS,KAAK,CAAC;AAG3B,YAAU,MAAM;AACd,QAAI,WAAW;AACb,eAAS,qEAAqE;AAAA,IAChF;AAAA,EACF,GAAG,CAAC,SAAS,CAAC;AAEd,QAAM,UAAU,YAAY,YAAY;AACtC,QAAI,CAAC,UAAU,SAAS;AACtB,eAAS,8BAA8B;AACvC;AAAA,IACF;AAEA,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,cAAc,MAAM,UAAU,QAAQ,cAAA;AAC5C,iBAAW,WAAW;AAAA,IACxB,SAAS,KAAK;AACZ,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AACrD,eAAS,OAAO;AAChB,YAAM;AAAA,IACR,UAAA;AACE,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,mBAAmB,YAAY,OAAO,WAOtC;AACJ,QAAI,CAAC,UAAU,SAAS;AACtB,eAAS,8BAA8B;AACvC;AAAA,IACF;AAEA,iBAAa,IAAI;AACjB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,UAAU,MAAM,UAAU,QAAQ,iBAAiB;AAAA,QACvD,MAAM,OAAO;AAAA,QACb,YAAY,OAAO;AAAA,MAAA,CACpB;AACD,oBAAc,OAAO;AAAA,IACvB,SAAS,KAAK;AACZ,YAAM,UAAU,eAAe,QAAQ,IAAI,UAAU;AACrD,eAAS,OAAO;AAChB,YAAM;AAAA,IACR,UAAA;AACE,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ,aAAA;AAAA,IACpB;AACA,eAAW,IAAI;AACf,kBAAc,IAAI;AAClB,aAAS,IAAI;AAAA,EACf,GAAG,CAAA,CAAE;AAGL,YAAU,MAAM;AACd,QAAI,eAAe,UAAU,aAAa,UAAU,SAAS;AAC3D,cAAA,EAAU,MAAM,MAAM;AAAA,MAEtB,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,aAAa,QAAQ,WAAW,OAAO,CAAC;AAE5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,CAAC,CAAC,WAAW,QAAQ,WAAW;AAAA,IAC7C,gBAAgB,aAAa,CAAC;AAAA,IAC9B,QAAQ,UAAU;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zendir/ui - React Components
|
|
3
|
+
*
|
|
4
|
+
* Enterprise-grade React components for Zendir space simulation applications.
|
|
5
|
+
* Designed for use in ChatGPT Apps, Next.js, and standard React applications.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Full TypeScript support (works with or without @zendir/sdk)
|
|
9
|
+
* - WCAG 2.1 AA accessibility
|
|
10
|
+
* - Astro UX Design System compliance
|
|
11
|
+
* - Reduced motion support
|
|
12
|
+
* - Error boundaries and loading states
|
|
13
|
+
*
|
|
14
|
+
* Note: @zendir/sdk is optional. All types are provided locally.
|
|
15
|
+
* Install @zendir/sdk for API client functionality.
|
|
16
|
+
*/
|
|
17
|
+
export { Icon, getIconNames, isValidIconName, AstroIcon, isAstroIconsAvailable, preloadAstroIcons, getIconAliases, isIconAlias, getAstroIconNames, getAllIconNames, ASTRO_ICON_NAMES, Button, Input, Select, Toggle, Checkbox, Tooltip, Dialog, Badge, Container, Tabs, Pagination, GlassCard, GLASS_COLOR_OVERLAYS, DataValue, DataValueGroup, MessageStream, AppBar, ColorPickerPanel, getPropertyConfig, formatPropertyLabel, deriveStatus, deriveBatteryStatus, formatPropertyValue, createPropertyConfig, getPropertiesByCategory, PROPERTY_PRESETS, CATEGORY_ICONS, CATEGORY_LABELS, NumberInput, SideNav, ToastProvider, useToast, useToastManager, Popover, Menu, Box, Flex, Grid, Stack, HStack, VStack, Center, Spacer, Divider, useBreakpoint, BREAKPOINTS, resolveResponsive, resolveSpacing, ConfirmDialog, ConfirmProvider, useConfirm, PinInput, CopyButton, useCopyToClipboard, DataTable, DataTableRowDetail, ImageGallery, ChatPanel, parseChatResponse, createChatResponseParser, parseMcpToolResult, CHAT_RESPONSE_TOOL_SCHEMA, CHAT_RESPONSE_MCP_TOOL, CHAT_RESPONSE_JSON_PROMPT, CHAT_RESPONSE_YAML_PROMPT, CHAT_STATUS_RULES_PROMPT, ConnectionForm, SidePanel, HexViewer, REGION_COLORS, REGION_BORDER_COLORS, LimitsBar, LogViewer, PacketViewer, CommandBuilder, FileExplorer, MissionCalendar, ActivityPlanner, Typography, Display1, Display2, H1, H2, H3, H4, H5, H6, Body1, Body2, Body3, Compact, Micro, Mono, DataText, Label, FONT_FAMILY_PRIMARY, FONT_FAMILY_MONO, FONT_WEIGHTS, CardHeader, HeaderIconWithStatus, } from './core';
|
|
18
|
+
export type { NumberInputProps, NumberInputSize, SliderStatus, StatusThresholds, SideNavProps, SideNavHeaderProps, SideNavItemProps, SideNavSectionProps, SideNavFooterProps, ToastOptions, ToastStatus, ToastPosition, ToastProviderProps, PopoverProps, PopoverPlacement, MenuProps, MenuItemProps, BoxProps, FlexProps, GridProps, StackProps, CenterProps, SpacerProps, DividerProps, Breakpoint, ResponsiveValue, SpacingToken, ConfirmDialogProps, ConfirmOptions, ConfirmStatus, PinInputProps, CopyButtonProps, UseCopyToClipboardReturn, DataTableProps, DataTableColumn, DataTableRowDetailProps, DataTableRowDetailField, ImageGalleryProps, GalleryImage, ChatPanelProps, ChatMessage, ChatBlock, ChatBlockEvent, ChatBlockAlert, ChatBlockTelemetry, ChatBlockProgress, ChatBlockTable, ChatBlockActions, ChatBlockChoice, ChatBlockConfirm, ChatBlockCommand, ChatBlockKV, ChatResponseFormat, ChatResponsePayload, ChatResponseParserOptions, McpToolContent, McpToolResult, ConnectionFormProps, ConnectionConfig, SidePanelProps, SidePanelPosition, HexViewerProps, HexHighlight, HexRegion, DecodedField, PacketHeaderEntry, ByteGrouping, OffsetBase, Endianness, LimitsBarProps, LimitsState, LogViewerProps, LogEntry, LogSeverity, PacketViewerProps, PacketItem, PacketItemLimits, PacketItemLimitsState, PacketViewMode, CommandBuilderProps, CommandParameter, CommandParamType, CommandHistoryEntry, FileExplorerProps, FileNode, FileViewMode, FileSortBy, MissionCalendarProps, CalendarEvent, CalendarTimeline, CalendarViewMode, ActivityStatus, ActivityType, ActivityPlannerProps, ActivityFormData, TypographyProps, TypographyVariant, TypographyElement, TypographyColor, CardHeaderProps, HeaderIconWithStatusProps, IconProps, IconName, AstroIconProps, AstroIconName, AstroIconSize, ButtonProps, ButtonVariant, ButtonSize, InputProps, InputSize, LabelPlacement, SelectProps, SelectOption, ToggleProps, CheckboxProps, TooltipProps, TooltipPlacement, DialogProps, DialogActionsProps, DialogSize, BadgeProps, BadgeVariant, BadgeSize, ContainerProps, ContainerVariant, ContainerPadding, TabsProps, TabsListProps, TabProps, TabsPanelProps, PaginationProps, GlassCardProps, GlassColorOverlay, DataValueProps, DataValueGroupProps, DataValueVariant, DataValueSize, MessageStreamProps, StreamMessage, AppBarProps, AppBarBranding, ColorPickerPanelProps, PropertyConfig, PropertyKey, PropertyCategory, GlassAccentPosition, } from './core';
|
|
19
|
+
export { ThemeProvider, useTheme, useThemeTokens, useScrollbarStyles, CardAccentProvider, useCardAccent, getSystemAccentColor, getAccentColorOptions, CARD_ACCENT_COLORS, SPACE_SYSTEM_COLORS, } from './theme';
|
|
20
|
+
export type { ThemeProviderProps, ThemeContextValue, ThemeVariant, ThemeMode, ThemeTokens, ThemeColors, ThemeAnimation, ThemeFocus, LayoutTokens, BorderTokens, CardAccentKey, CardAccentColor, CardAccentContextValue, CardAccentProviderProps, } from './theme';
|
|
21
|
+
export { DisplaySettingsProvider, useDisplaySettings, useDisplaySettingsOptional, getEffectiveCompactMode, PRESET_COLORS, GLASS_TINTS, } from './context';
|
|
22
|
+
export type { DisplaySettings, DisplaySettingsContextValue, DisplaySettingsProviderProps, ColorTarget, PresetColorKey, GlassTintKey, } from './context';
|
|
23
|
+
export { ErrorBoundary, withErrorBoundary } from './shared/ErrorBoundary';
|
|
24
|
+
export type { ErrorBoundaryProps } from './shared/ErrorBoundary';
|
|
25
|
+
export { SkeletonText, SkeletonBox, SkeletonCircle, SkeletonCard, SkeletonChart, Skeleton3D, } from './shared/Skeleton';
|
|
26
|
+
export type { SkeletonTextProps, SkeletonBoxProps, SkeletonCircleProps, SkeletonCardProps, SkeletonChartProps, Skeleton3DProps, } from './shared/Skeleton';
|
|
27
|
+
export { withNullSafety, safeNumber, isValidNumber, formatNumber, formatTabular, formatTemperature, formatDataRate, formatDistance, formatAltitude, formatVelocity, formatPercentage, formatPower, formatFrequency, formatDuration, formatCountdown, formatUTC, formatTime, formatCoordinate, formatLatLon, formatDegrees, formatDecibels, clamp, lerp, mapRange, STATUS_COLORS, getStatusColor, getStatusFromValue, normalizeStatus, isStatusLevel, getStatusSeverity, getWorstStatus, classNames, tabularNumsStyle, transitions, focusRingStyle, addAlpha, safeAccentText, } from './utils';
|
|
28
|
+
export type { StatusLevel, FormatNumberOptions } from './utils';
|
|
29
|
+
export { StatusIndicator, ClassificationBanner, GlobalStatusBar, MissionClock, MonitoringIcon, Progress, Notification, Timeline, SimulationControls, MiniSimulationControls, SimulationControlsWithClock, } from './astro';
|
|
30
|
+
export type { StatusIndicatorProps, StatusVariant, ClassificationBannerProps, ClassificationLevel, GlobalStatusBarProps, MissionClockProps, MonitoringIconProps, MonitoringStatus, ProgressProps, NotificationProps, NotificationStatus, TimelineProps, TimelineEvent, TimelineTrackDef, TimelineViewMode, TimeFormat, TimelineFilter, AstroStatus, AstroClassification, SimulationControlsProps, MiniSimulationControlsProps, SimulationControlsWithClockProps, } from './astro';
|
|
31
|
+
export { SpacecraftCard } from './cards/SpacecraftCard';
|
|
32
|
+
export type { SpacecraftCardProps } from './cards/SpacecraftCard';
|
|
33
|
+
export { TelemetryCard } from './cards/TelemetryCard';
|
|
34
|
+
export type { TelemetryCardProps } from './cards/TelemetryCard';
|
|
35
|
+
export { AccessCard } from './cards/AccessCard';
|
|
36
|
+
export type { AccessCardProps } from './cards/AccessCard';
|
|
37
|
+
export { OrbitCard } from './cards/OrbitCard';
|
|
38
|
+
export type { OrbitCardProps } from './cards/OrbitCard';
|
|
39
|
+
export { TelemetryStreamCard } from './cards/TelemetryStreamCard';
|
|
40
|
+
export type { TelemetryStreamCardProps, TelemetryMetric } from './cards/TelemetryStreamCard';
|
|
41
|
+
export { AstroChart, LineChart, AreaChart, BarChart, ScatterChart, PieChart, DonutChart, GaugeChart, RadarChart, HeatmapChart, TimeSeriesChart, DualAxisChart, StackedAreaChart, StackedBarChart, BubbleChart, HistogramChart, SankeyChart, TreemapChart, SunburstChart, ParallelChart, CandlestickChart, GraphChart, PowerChart, AttitudeChart, ThermalHeatmapChart, LinkBudgetChart, SubsystemGauge, OrbitChart, ContactWindowChart, SpectrumChart, ManeuverBudgetChart, EclipseTimelineChart, RoseDiagram, HeliocentricOrbitPlot, Scatter3DChart, Bar3DChart, Surface3DChart, Lines3DChart, SphericalRadar3DChart, TransferOrbit3DChart, AttitudeHistory3DChart, ConjunctionAssessment3DChart, LaunchCorridor3DChart, AntennaPattern3DChart, WaterfallChart, DopplerTrackChart, LinkMarginChart, ConstellationCoverageChart, ConjunctionChart, generatePowerData, generateAttitudeData, generateDopplerData, generateWaterfallData, generateContactWindows, generateHeliocentricOrbits, generateSpectrum, generateEclipseTimeline, generateConstellationCoverage, generateConjunctionEvents, PowerOverviewChart, generateSamplePowerData, createAstroEChartsTheme, ASTRO_DATA_VIZ_COLORS, STATUS_COLORS as CHART_STATUS_COLORS, getSeriesColor, createAreaGradient, formatTimeLabel, formatValueWithUnit, calculateAxisBounds, useChartStream, useWebSocketStream, useChartSync, dispatchToGroup, syncZoomRange, resetGroupZoom, showGroupTooltip, hideGroupTooltip, getGroupCharts, exportGroupAsImages, exportGroupAsCSV, GroundTrackMap, } from './charts';
|
|
42
|
+
export type { AstroChartHandle, AstroChartProps, ChartType, ChartTheme, DataPoint, TimeSeriesPoint, SeriesData, AxisOptions, ZoomOptions, TooltipOptions as ChartTooltipOptions, LegendOptions, AnnotationOptions, RealTimeOptions, ExportOptions, ChartEventParams, ZoomEventParams, PowerChartData, AttitudeChartData, ThermalChartData, LinkBudgetChartData, ContactWindowData, SpectrumDataPoint, ManeuverBudgetData, EclipseTimelineData, BubbleDataPoint, RoseDiagramData, HeliocentricOrbitData, Data3DPoint, Scatter3DData, Bar3DData, Surface3DData, Lines3DData, LineChartProps, AreaChartProps, BarChartProps, ScatterChartProps, PieChartProps, GaugeChartProps, RadarChartProps, HeatmapChartProps, TimeSeriesChartProps, DualAxisChartProps, BubbleChartProps, HistogramChartProps, SankeyChartProps, TreemapChartProps, TreemapDataNode, SunburstChartProps, SunburstDataNode, ParallelChartProps, ParallelAxisDef, CandlestickChartProps, CandlestickDataPoint, GraphChartProps, GraphNode, GraphLink, GraphCategory, PowerChartProps, AttitudeChartProps, ThermalHeatmapChartProps, LinkBudgetChartProps, SubsystemGaugeProps, OrbitChartProps, ContactWindowChartProps, SpectrumChartProps, ManeuverBudgetChartProps, EclipseTimelineChartProps, RoseDiagramProps, HeliocentricOrbitProps, Scatter3DChartProps, Bar3DChartProps, Surface3DChartProps, Lines3DChartProps, SphericalRadar3DChartProps, SphericalRadar3DData, TransferOrbit3DChartProps, TransferOrbitSegment, TransferOrbitWaypoint, AttitudeHistory3DChartProps, AttitudeHistoryPoint, ConjunctionAssessment3DChartProps, ConjunctionEvent, LaunchCorridor3DChartProps, LaunchCorridorData, AntennaPattern3DChartProps, AntennaPattern3DData, WaterfallChartProps, DopplerTrackChartProps, LinkMarginChartProps, WaterfallDataPoint, WaterfallSignalMarker, DopplerTrackPoint, SatellitePassInfo, LinkMarginPoint, CoverageGridData, PowerGeneratorConfig, AttitudeGeneratorConfig, DopplerGeneratorConfig, WaterfallGeneratorConfig, ContactGeneratorConfig, HeliocentricGeneratorConfig, SpectrumGeneratorConfig, EclipseGeneratorConfig, PowerOverviewChartProps, PowerTimelinePoint, PowerEvent, PowerState, OperationalMode, EventType, StreamOptions, StreamController, UseChartSyncOptions, EChartsTheme, GroundTrackMapProps, SatelliteTrack, GroundStationEnhanced, TeamPath, SROGroundStation, } from './charts';
|
|
43
|
+
export { EclipseTimerCard } from './visualizations/EclipseTimerCard';
|
|
44
|
+
export type { EclipseTimerCardProps } from './visualizations/EclipseTimerCard';
|
|
45
|
+
export { NavBallCard } from './visualizations/NavBallCard';
|
|
46
|
+
export type { NavBallCardProps } from './visualizations/NavBallCard';
|
|
47
|
+
export { LinkBudgetCard } from './visualizations/LinkBudgetCard';
|
|
48
|
+
export type { LinkBudgetCardProps, LinkBudgetData } from './visualizations/LinkBudgetCard';
|
|
49
|
+
export { ThermalHeatmapCard } from './visualizations/ThermalHeatmapCard';
|
|
50
|
+
export type { ThermalHeatmapCardProps, ComponentThermal } from './visualizations/ThermalHeatmapCard';
|
|
51
|
+
export { PropulsionCard } from './visualizations/PropulsionCard';
|
|
52
|
+
export type { PropulsionCardProps, PropulsionTankData, ManeuverFeasibility } from './visualizations/PropulsionCard';
|
|
53
|
+
export { SensorFootprintCard } from './visualizations/SensorFootprintCard';
|
|
54
|
+
export type { SensorFootprintCardProps, FootprintSensorConfig } from './visualizations/SensorFootprintCard';
|
|
55
|
+
export { ZenSpace3D, ZenSpace3DCesium, latLonAltToCartesian, cartesianToLatLonAlt, parseTLE, propagateSGP4Simple, propagateSatellite, generateOrbitPath, calculateVisibilityConeGeometry, generateHexGrid, atmosphereVertexShader, atmosphereFragmentShader, starsVertexShader, starsFragmentShader, EARTH_RADIUS_KM, SCENE_EARTH_RADIUS, KM_TO_SCENE, } from './3d';
|
|
56
|
+
export type { ZenSpace3DProps, ZenSpace3DHandle, ZenSpace3DCesiumProps, ViewMode, CameraMode, ObjectCategory, SpaceObject, Satellite as ZenSatellite, Debris, SpaceStation as ZenSpaceStation, Asteroid, TLEData, OrbitPath, ManeuverNode, VisibilityCone, CoverageRegion, CoverageHexGrid, OverpassInfo, TimeState, SelectionState, CameraState, LayerVisibility, ToolType, Vector3D, LatLonAlt, ZenSpace3DCallbacks, } from './3d';
|
|
57
|
+
export { EarthViewer } from './3d/EarthViewer';
|
|
58
|
+
export type { EarthViewerProps } from './3d/EarthViewer';
|
|
59
|
+
export { SolarSystemViewer } from './3d/SolarSystemViewer';
|
|
60
|
+
export type { SolarSystemViewerProps, PlanetPosition } from './3d/SolarSystemViewer';
|
|
61
|
+
export { useZendirSession } from './hooks/useZendirSession';
|
|
62
|
+
export type { UseZendirSessionOptions, UseZendirSessionResult } from './hooks/useZendirSession';
|
|
63
|
+
export { useTelemetry } from './hooks/useTelemetry';
|
|
64
|
+
export type { UseTelemetryOptions, UseTelemetryResult } from './hooks/useTelemetry';
|
|
65
|
+
export { useSpacecraftPosition } from './hooks/useSpacecraftPosition';
|
|
66
|
+
export type { UseSpacecraftPositionOptions, UseSpacecraftPositionResult } from './hooks/useSpacecraftPosition';
|
|
67
|
+
export { useCompactMode } from './hooks/useCompactMode';
|
|
68
|
+
export type { UseCompactModeOptions, UseCompactModeResult } from './hooks/useCompactMode';
|
|
69
|
+
export { useOpenAiGlobal, useWidgetState, useToolOutput, useToolInput, useChatGPTTheme, useLocale, useDisplayMode, useCallTool, useSendMessage, useIntrinsicHeight, useMaxHeight, useOpenExternal, isInChatGPT, } from './chatgpt/index';
|
|
70
|
+
export type { OpenAiGlobals, ThemeMode as ChatGPTThemeMode } from './chatgpt/index';
|
|
71
|
+
export { AppCard, ChatGPTCard } from './chatgpt/AppCard';
|
|
72
|
+
export type { AppCardProps, ChatGPTCardProps } from './chatgpt/AppCard';
|
|
73
|
+
export type { SpacecraftPosition, Spacecraft, GroundStation, GroundTrackPoint, AccessData, AccessWindow, TelemetryData, OrbitalElements, Quaternion, EulerAngles, AngularVelocity, AttitudeData, PointingMode, EclipseInfo, DetailedLinkBudget, ThermalZone, ThermalData, ThrusterStatus, PropulsionSummary, ReactionWheelData, LVLHVector, LVLHState, ThrusterFireEvent, PlanetId, PlanetInfo, } from './types';
|
|
74
|
+
export { estimateOrbitalPeriod, estimateOrbitalVelocity, auToKm, normalizePlanetName, getPlanet, PLANETS, } from './types';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { default as React, Component, ErrorInfo, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface ErrorBoundaryProps {
|
|
4
|
+
/** Custom fallback UI or render function */
|
|
5
|
+
fallback?: ReactNode | ((error: Error, retry: () => void) => ReactNode);
|
|
6
|
+
/** Callback when error is caught */
|
|
7
|
+
onError?: (error: Error, errorInfo: ErrorInfo) => void;
|
|
8
|
+
/** Children to render */
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
/** Component name for error context */
|
|
11
|
+
componentName?: string;
|
|
12
|
+
}
|
|
13
|
+
interface ErrorBoundaryState {
|
|
14
|
+
hasError: boolean;
|
|
15
|
+
error: Error | null;
|
|
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
|
+
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
45
|
+
constructor(props: ErrorBoundaryProps);
|
|
46
|
+
static getDerivedStateFromError(error: Error): ErrorBoundaryState;
|
|
47
|
+
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
48
|
+
handleRetry: () => void;
|
|
49
|
+
render(): ReactNode;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Wraps a component with an ErrorBoundary
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```tsx
|
|
56
|
+
* const SafeSpacecraftCard = withErrorBoundary(SpacecraftCard, {
|
|
57
|
+
* componentName: 'SpacecraftCard',
|
|
58
|
+
* onError: (error) => logError(error),
|
|
59
|
+
* });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function withErrorBoundary<P extends object>(Component: React.ComponentType<P>, options?: Omit<ErrorBoundaryProps, 'children'>): React.FC<P>;
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,142 @@
|
|
|
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
|
+
import { getStatusColor } from "../utils/index.js";
|
|
7
|
+
class ErrorBoundary extends Component {
|
|
8
|
+
constructor(props) {
|
|
9
|
+
super(props);
|
|
10
|
+
__publicField(this, "handleRetry", () => {
|
|
11
|
+
this.setState({ hasError: false, error: null });
|
|
12
|
+
});
|
|
13
|
+
this.state = { hasError: false, error: null };
|
|
14
|
+
}
|
|
15
|
+
static getDerivedStateFromError(error) {
|
|
16
|
+
return { hasError: true, error };
|
|
17
|
+
}
|
|
18
|
+
componentDidCatch(error, errorInfo) {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
(_b = (_a = this.props).onError) == null ? void 0 : _b.call(_a, error, errorInfo);
|
|
21
|
+
if (process.env.NODE_ENV === "development") {
|
|
22
|
+
console.error("ErrorBoundary caught an error:", error, errorInfo);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
render() {
|
|
26
|
+
if (this.state.hasError) {
|
|
27
|
+
const { fallback, componentName } = this.props;
|
|
28
|
+
const { error } = this.state;
|
|
29
|
+
if (typeof fallback === "function" && error) {
|
|
30
|
+
return fallback(error, this.handleRetry);
|
|
31
|
+
}
|
|
32
|
+
if (fallback && typeof fallback !== "function") {
|
|
33
|
+
return fallback;
|
|
34
|
+
}
|
|
35
|
+
return /* @__PURE__ */ jsx(
|
|
36
|
+
DefaultErrorFallback,
|
|
37
|
+
{
|
|
38
|
+
error,
|
|
39
|
+
componentName,
|
|
40
|
+
onRetry: this.handleRetry
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return this.props.children;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function DefaultErrorFallback({
|
|
48
|
+
error,
|
|
49
|
+
componentName,
|
|
50
|
+
onRetry
|
|
51
|
+
}) {
|
|
52
|
+
const criticalColor = getStatusColor("critical");
|
|
53
|
+
return /* @__PURE__ */ jsxs(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
role: "alert",
|
|
57
|
+
style: {
|
|
58
|
+
display: "flex",
|
|
59
|
+
flexDirection: "column",
|
|
60
|
+
alignItems: "center",
|
|
61
|
+
justifyContent: "center",
|
|
62
|
+
padding: 24,
|
|
63
|
+
minHeight: 120,
|
|
64
|
+
backgroundColor: "var(--color-background-surface, #1b2d3e)",
|
|
65
|
+
borderRadius: 8,
|
|
66
|
+
border: `1px solid ${criticalColor}40`,
|
|
67
|
+
textAlign: "center"
|
|
68
|
+
},
|
|
69
|
+
children: [
|
|
70
|
+
/* @__PURE__ */ jsx(
|
|
71
|
+
"svg",
|
|
72
|
+
{
|
|
73
|
+
viewBox: "0 0 24 24",
|
|
74
|
+
fill: criticalColor,
|
|
75
|
+
width: "32",
|
|
76
|
+
height: "32",
|
|
77
|
+
style: { marginBottom: 12, opacity: 0.8 },
|
|
78
|
+
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" })
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
"h3",
|
|
83
|
+
{
|
|
84
|
+
style: {
|
|
85
|
+
margin: 0,
|
|
86
|
+
marginBottom: 8,
|
|
87
|
+
fontSize: "0.875rem",
|
|
88
|
+
// 14px in rem
|
|
89
|
+
fontWeight: 500,
|
|
90
|
+
// AstroUXDS medium
|
|
91
|
+
color: "var(--color-text-primary, #ffffff)"
|
|
92
|
+
},
|
|
93
|
+
children: componentName ? `${componentName} Error` : "Something went wrong"
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
"p",
|
|
98
|
+
{
|
|
99
|
+
style: {
|
|
100
|
+
margin: 0,
|
|
101
|
+
marginBottom: 16,
|
|
102
|
+
fontSize: 12,
|
|
103
|
+
color: "var(--color-text-secondary, #a4abb6)",
|
|
104
|
+
maxWidth: 280
|
|
105
|
+
},
|
|
106
|
+
children: (error == null ? void 0 : error.message) ?? "An unexpected error occurred"
|
|
107
|
+
}
|
|
108
|
+
),
|
|
109
|
+
/* @__PURE__ */ jsx(
|
|
110
|
+
"button",
|
|
111
|
+
{
|
|
112
|
+
onClick: onRetry,
|
|
113
|
+
style: {
|
|
114
|
+
padding: "8px 16px",
|
|
115
|
+
fontSize: 12,
|
|
116
|
+
fontWeight: 500,
|
|
117
|
+
color: "#ffffff",
|
|
118
|
+
backgroundColor: "var(--color-interactive-default, #4dacff)",
|
|
119
|
+
border: "none",
|
|
120
|
+
borderRadius: 4,
|
|
121
|
+
cursor: "pointer",
|
|
122
|
+
transition: "background-color 150ms ease"
|
|
123
|
+
},
|
|
124
|
+
onMouseEnter: (e) => e.currentTarget.style.backgroundColor = "var(--color-interactive-hover, #92cbff)",
|
|
125
|
+
onMouseLeave: (e) => e.currentTarget.style.backgroundColor = "var(--color-interactive-default, #4dacff)",
|
|
126
|
+
children: "Try Again"
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
function withErrorBoundary(Component2, options = {}) {
|
|
134
|
+
const WrappedComponent = (props) => /* @__PURE__ */ jsx(ErrorBoundary, { ...options, children: /* @__PURE__ */ jsx(Component2, { ...props }) });
|
|
135
|
+
WrappedComponent.displayName = `WithErrorBoundary(${Component2.displayName ?? Component2.name ?? "Component"})`;
|
|
136
|
+
return WrappedComponent;
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
ErrorBoundary,
|
|
140
|
+
withErrorBoundary
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","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<ErrorBoundaryProps, ErrorBoundaryState> {\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(--color-background-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(--color-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(--color-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(--color-interactive-default, #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 = 'var(--color-interactive-hover, #92cbff)')\n }\n onMouseLeave={(e) =>\n (e.currentTarget.style.backgroundColor = 'var(--color-interactive-default, #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"],"names":["Component"],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export interface SkeletonTextProps {
|
|
4
|
+
/** Number of lines to render */
|
|
5
|
+
lines?: number;
|
|
6
|
+
/** Width of the last line (as percentage or px) */
|
|
7
|
+
lastLineWidth?: string | number;
|
|
8
|
+
/** Height of each line */
|
|
9
|
+
lineHeight?: number;
|
|
10
|
+
/** Gap between lines */
|
|
11
|
+
gap?: number;
|
|
12
|
+
/** Custom className */
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* SkeletonText - Placeholder for text content
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <SkeletonText lines={3} lastLineWidth="60%" />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare const SkeletonText: React.NamedExoticComponent<SkeletonTextProps>;
|
|
24
|
+
export interface SkeletonBoxProps {
|
|
25
|
+
/** Width of the box */
|
|
26
|
+
width?: string | number;
|
|
27
|
+
/** Height of the box */
|
|
28
|
+
height?: string | number;
|
|
29
|
+
/** Border radius */
|
|
30
|
+
borderRadius?: number;
|
|
31
|
+
/** Custom className */
|
|
32
|
+
className?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* SkeletonBox - Generic rectangular placeholder
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```tsx
|
|
39
|
+
* <SkeletonBox width={200} height={100} />
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const SkeletonBox: React.NamedExoticComponent<SkeletonBoxProps>;
|
|
43
|
+
export interface SkeletonCircleProps {
|
|
44
|
+
/** Diameter of the circle */
|
|
45
|
+
size?: number;
|
|
46
|
+
/** Custom className */
|
|
47
|
+
className?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* SkeletonCircle - Circular placeholder (avatars, icons)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* <SkeletonCircle size={48} />
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const SkeletonCircle: React.NamedExoticComponent<SkeletonCircleProps>;
|
|
58
|
+
export interface SkeletonCardProps {
|
|
59
|
+
/** Card height */
|
|
60
|
+
height?: number;
|
|
61
|
+
/** Show header placeholder */
|
|
62
|
+
showHeader?: boolean;
|
|
63
|
+
/** Show content lines */
|
|
64
|
+
showContent?: boolean;
|
|
65
|
+
/** Number of content lines */
|
|
66
|
+
contentLines?: number;
|
|
67
|
+
/** Custom className */
|
|
68
|
+
className?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* SkeletonCard - Card-shaped placeholder matching component cards
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <SkeletonCard showHeader showContent contentLines={4} />
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export declare const SkeletonCard: React.NamedExoticComponent<SkeletonCardProps>;
|
|
79
|
+
export interface SkeletonChartProps {
|
|
80
|
+
/** Chart height */
|
|
81
|
+
height?: number;
|
|
82
|
+
/** Chart type visualization */
|
|
83
|
+
type?: 'line' | 'bar' | 'area';
|
|
84
|
+
/** Custom className */
|
|
85
|
+
className?: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* SkeletonChart - Chart placeholder with visualization hint
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* ```tsx
|
|
92
|
+
* <SkeletonChart height={200} type="line" />
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare const SkeletonChart: React.NamedExoticComponent<SkeletonChartProps>;
|
|
96
|
+
export interface Skeleton3DProps {
|
|
97
|
+
/** Container height */
|
|
98
|
+
height?: number;
|
|
99
|
+
/** Custom className */
|
|
100
|
+
className?: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Skeleton3D - 3D viewer placeholder with sphere hint
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```tsx
|
|
107
|
+
* <Skeleton3D height={400} />
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare const Skeleton3D: React.NamedExoticComponent<Skeleton3DProps>;
|