@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,39 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { StatusLevel } from '../utils';
|
|
3
|
+
|
|
4
|
+
export interface ProgressProps {
|
|
5
|
+
/** Current value (0-max) */
|
|
6
|
+
value?: number;
|
|
7
|
+
/** Maximum value (default: 100) */
|
|
8
|
+
max?: number;
|
|
9
|
+
/** Hide the percentage label */
|
|
10
|
+
hideLabel?: boolean;
|
|
11
|
+
/** Show value as label instead of percentage */
|
|
12
|
+
showValue?: boolean;
|
|
13
|
+
/** Status-based coloring (overrides default) */
|
|
14
|
+
status?: StatusLevel;
|
|
15
|
+
/** Indeterminate mode (animated, no value) */
|
|
16
|
+
indeterminate?: boolean;
|
|
17
|
+
/** Height of the progress bar */
|
|
18
|
+
height?: number;
|
|
19
|
+
/** Custom label */
|
|
20
|
+
label?: string;
|
|
21
|
+
/** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */
|
|
22
|
+
showStatusIcon?: boolean;
|
|
23
|
+
/** Custom className */
|
|
24
|
+
className?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Progress - Pure React progress bar component
|
|
28
|
+
*
|
|
29
|
+
* Displays progress with visual bar and optional label.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```tsx
|
|
33
|
+
* <Progress value={85} />
|
|
34
|
+
* <Progress value={42} max={50} hideLabel />
|
|
35
|
+
* <Progress indeterminate label="Loading..." />
|
|
36
|
+
* <Progress value={25} status="caution" />
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare const Progress: React.NamedExoticComponent<ProgressProps>;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo } from "react";
|
|
3
|
+
import { formatPercentage, classNames } from "../utils/index.js";
|
|
4
|
+
import { useTheme } from "../theme/ThemeProvider.js";
|
|
5
|
+
function ProgressStatusShape({
|
|
6
|
+
status,
|
|
7
|
+
color,
|
|
8
|
+
size = 10
|
|
9
|
+
}) {
|
|
10
|
+
const glow = `${color}50`;
|
|
11
|
+
switch (status) {
|
|
12
|
+
case "caution":
|
|
13
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "10", height: "10", fill: color }) });
|
|
14
|
+
case "serious":
|
|
15
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,1 11,6 6,11 1,6", fill: color }) });
|
|
16
|
+
case "critical":
|
|
17
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,11 1,2 11,2", fill: color }) });
|
|
18
|
+
case "standby":
|
|
19
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: color, strokeWidth: "2" }) });
|
|
20
|
+
case "off":
|
|
21
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3", fill: color }) });
|
|
22
|
+
case "normal":
|
|
23
|
+
default:
|
|
24
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "5", fill: color }) });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const Progress = memo(function Progress2({
|
|
28
|
+
value,
|
|
29
|
+
max = 100,
|
|
30
|
+
hideLabel = false,
|
|
31
|
+
showValue = false,
|
|
32
|
+
status,
|
|
33
|
+
indeterminate = false,
|
|
34
|
+
height = 8,
|
|
35
|
+
label,
|
|
36
|
+
showStatusIcon = true,
|
|
37
|
+
className = ""
|
|
38
|
+
}) {
|
|
39
|
+
const { tokens } = useTheme();
|
|
40
|
+
const percentage = value !== void 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0;
|
|
41
|
+
const effectiveStatus = status ?? (percentage >= 75 ? "normal" : percentage >= 50 ? "standby" : percentage >= 25 ? "caution" : percentage > 0 ? "serious" : "off");
|
|
42
|
+
const color = tokens.colors.status[effectiveStatus];
|
|
43
|
+
const displayLabel = label ?? (showValue && value !== void 0 ? `${value}/${max}` : formatPercentage(percentage, false, 0));
|
|
44
|
+
const iconSize = Math.max(10, height + 2);
|
|
45
|
+
return /* @__PURE__ */ jsxs(
|
|
46
|
+
"div",
|
|
47
|
+
{
|
|
48
|
+
className: classNames("zendir-progress", className),
|
|
49
|
+
role: "progressbar",
|
|
50
|
+
"aria-valuenow": indeterminate ? void 0 : value,
|
|
51
|
+
"aria-valuemin": 0,
|
|
52
|
+
"aria-valuemax": max,
|
|
53
|
+
"aria-label": label ?? `Progress: ${percentage.toFixed(0)}%`,
|
|
54
|
+
style: {
|
|
55
|
+
display: "flex",
|
|
56
|
+
flexDirection: "column",
|
|
57
|
+
gap: tokens.spacing.xs,
|
|
58
|
+
width: "100%"
|
|
59
|
+
},
|
|
60
|
+
children: [
|
|
61
|
+
!hideLabel && /* @__PURE__ */ jsxs(
|
|
62
|
+
"div",
|
|
63
|
+
{
|
|
64
|
+
style: {
|
|
65
|
+
display: "flex",
|
|
66
|
+
justifyContent: "space-between",
|
|
67
|
+
alignItems: "center",
|
|
68
|
+
fontSize: tokens.typography.fontSize.sm,
|
|
69
|
+
fontWeight: tokens.typography.fontWeight.medium,
|
|
70
|
+
color: tokens.colors.text.secondary
|
|
71
|
+
},
|
|
72
|
+
children: [
|
|
73
|
+
label && /* @__PURE__ */ jsx("span", { style: { color: tokens.colors.text.secondary }, children: label }),
|
|
74
|
+
/* @__PURE__ */ jsx(
|
|
75
|
+
"span",
|
|
76
|
+
{
|
|
77
|
+
style: {
|
|
78
|
+
marginLeft: "auto",
|
|
79
|
+
fontVariantNumeric: "tabular-nums",
|
|
80
|
+
color: tokens.colors.text.primary
|
|
81
|
+
},
|
|
82
|
+
children: !indeterminate && displayLabel
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
/* @__PURE__ */ jsxs("div", { style: { position: "relative", width: "100%" }, children: [
|
|
89
|
+
/* @__PURE__ */ jsx(
|
|
90
|
+
"div",
|
|
91
|
+
{
|
|
92
|
+
style: {
|
|
93
|
+
position: "relative",
|
|
94
|
+
width: "100%",
|
|
95
|
+
height,
|
|
96
|
+
backgroundColor: tokens.colors.border.muted,
|
|
97
|
+
borderRadius: height / 2,
|
|
98
|
+
overflow: "hidden"
|
|
99
|
+
},
|
|
100
|
+
children: /* @__PURE__ */ jsx(
|
|
101
|
+
"div",
|
|
102
|
+
{
|
|
103
|
+
style: {
|
|
104
|
+
position: "absolute",
|
|
105
|
+
top: 0,
|
|
106
|
+
left: 0,
|
|
107
|
+
height: "100%",
|
|
108
|
+
width: indeterminate ? "30%" : `${percentage}%`,
|
|
109
|
+
backgroundColor: color,
|
|
110
|
+
borderRadius: height / 2,
|
|
111
|
+
transition: indeterminate ? "none" : "width 300ms ease-out",
|
|
112
|
+
animation: indeterminate ? "progressIndeterminate 1.5s ease-in-out infinite" : "none",
|
|
113
|
+
boxShadow: `0 0 ${height}px ${color}40`
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
),
|
|
119
|
+
showStatusIcon && !indeterminate && /* @__PURE__ */ jsx(
|
|
120
|
+
"div",
|
|
121
|
+
{
|
|
122
|
+
style: {
|
|
123
|
+
position: "absolute",
|
|
124
|
+
top: height + 4,
|
|
125
|
+
left: `${percentage}%`,
|
|
126
|
+
transform: "translateX(-50%)",
|
|
127
|
+
lineHeight: 0,
|
|
128
|
+
transition: "left 300ms ease-out"
|
|
129
|
+
},
|
|
130
|
+
"aria-hidden": "true",
|
|
131
|
+
children: /* @__PURE__ */ jsx(ProgressStatusShape, { status: effectiveStatus, color, size: iconSize })
|
|
132
|
+
}
|
|
133
|
+
)
|
|
134
|
+
] }),
|
|
135
|
+
showStatusIcon && !indeterminate && /* @__PURE__ */ jsx("div", { style: { height: iconSize + 2 } }),
|
|
136
|
+
/* @__PURE__ */ jsx("style", { children: `
|
|
137
|
+
@keyframes progressIndeterminate {
|
|
138
|
+
0% { left: -30%; }
|
|
139
|
+
100% { left: 100%; }
|
|
140
|
+
}
|
|
141
|
+
` })
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
});
|
|
146
|
+
export {
|
|
147
|
+
Progress
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=Progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Progress.js","sources":["../../../src/react/astro/Progress.tsx"],"sourcesContent":["/**\n * @zendir/ui - Progress Component (Pure React)\n * \n * Progress bar following Astro UX Design System patterns.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - Determinate and indeterminate modes\n * - Optional label and value display\n * - Status-based coloring\n * - Smooth animations\n * - Accessible (progress role with aria attributes)\n */\n\nimport React, { memo } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames, type StatusLevel, formatPercentage } from '../utils';\n\n/** Astro UX status shape per official spec: filled circle (normal), ring (standby), small circle (off), square (caution), diamond (serious), triangle (critical) */\nfunction ProgressStatusShape({\n status,\n color,\n size = 10,\n}: {\n status: StatusLevel;\n color: string;\n size?: number;\n}): React.ReactElement {\n const glow = `${color}50`;\n\n switch (status) {\n case 'caution':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\n </svg>\n );\n case 'serious':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\n </svg>\n );\n case 'critical':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\n </svg>\n );\n case 'standby':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />\n </svg>\n );\n case 'off':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill={color} />\n </svg>\n );\n case 'normal':\n default:\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\n </svg>\n );\n }\n}\n\nexport interface ProgressProps {\n /** Current value (0-max) */\n value?: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Hide the percentage label */\n hideLabel?: boolean;\n /** Show value as label instead of percentage */\n showValue?: boolean;\n /** Status-based coloring (overrides default) */\n status?: StatusLevel;\n /** Indeterminate mode (animated, no value) */\n indeterminate?: boolean;\n /** Height of the progress bar */\n height?: number;\n /** Custom label */\n label?: string;\n /** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */\n showStatusIcon?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Progress - Pure React progress bar component\n * \n * Displays progress with visual bar and optional label.\n * \n * @example\n * ```tsx\n * <Progress value={85} />\n * <Progress value={42} max={50} hideLabel />\n * <Progress indeterminate label=\"Loading...\" />\n * <Progress value={25} status=\"caution\" />\n * ```\n */\nexport const Progress = memo(function Progress({\n value,\n max = 100,\n hideLabel = false,\n showValue = false,\n status,\n indeterminate = false,\n height = 8,\n label,\n showStatusIcon = true,\n className = '',\n}: ProgressProps): React.ReactElement {\n const { tokens } = useTheme();\n const percentage = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\n \n // Auto-determine status based on value if not provided\n const effectiveStatus: StatusLevel = status ?? (\n percentage >= 75 ? 'normal' :\n percentage >= 50 ? 'standby' :\n percentage >= 25 ? 'caution' :\n percentage > 0 ? 'serious' : 'off'\n );\n \n // Get color from theme\n const color = tokens.colors.status[effectiveStatus];\n \n const displayLabel = label ?? (\n showValue && value !== undefined\n ? `${value}/${max}`\n : formatPercentage(percentage, false, 0)\n );\n\n const iconSize = Math.max(10, height + 2);\n\n return (\n <div\n className={classNames('zendir-progress', className)}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? `Progress: ${percentage.toFixed(0)}%`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacing.xs,\n width: '100%',\n }}\n >\n {/* Label row */}\n {!hideLabel && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.medium,\n color: tokens.colors.text.secondary,\n }}\n >\n {label && <span style={{ color: tokens.colors.text.secondary }}>{label}</span>}\n <span\n style={{\n marginLeft: 'auto',\n fontVariantNumeric: 'tabular-nums',\n color: tokens.colors.text.primary,\n }}\n >\n {!indeterminate && displayLabel}\n </span>\n </div>\n )}\n\n {/* Progress track (relative wrapper for icon positioning) */}\n <div style={{ position: 'relative', width: '100%' }}>\n <div\n style={{\n position: 'relative',\n width: '100%',\n height,\n backgroundColor: tokens.colors.border.muted,\n borderRadius: height / 2,\n overflow: 'hidden',\n }}\n >\n {/* Progress fill */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n width: indeterminate ? '30%' : `${percentage}%`,\n backgroundColor: color,\n borderRadius: height / 2,\n transition: indeterminate ? 'none' : 'width 300ms ease-out',\n animation: indeterminate ? 'progressIndeterminate 1.5s ease-in-out infinite' : 'none',\n boxShadow: `0 0 ${height}px ${color}40`,\n }}\n />\n </div>\n\n {/* Status shape icon positioned beneath the fill edge */}\n {showStatusIcon && !indeterminate && (\n <div\n style={{\n position: 'absolute',\n top: height + 4,\n left: `${percentage}%`,\n transform: 'translateX(-50%)',\n lineHeight: 0,\n transition: 'left 300ms ease-out',\n }}\n aria-hidden=\"true\"\n >\n <ProgressStatusShape status={effectiveStatus} color={color} size={iconSize} />\n </div>\n )}\n </div>\n\n {/* Reserve space for the icon so it doesn't overlap content below */}\n {showStatusIcon && !indeterminate && (\n <div style={{ height: iconSize + 2 }} />\n )}\n\n {/* Keyframe animation for indeterminate */}\n <style>{`\n @keyframes progressIndeterminate {\n 0% { left: -30%; }\n 100% { left: 100%; }\n }\n `}</style>\n </div>\n );\n});\n"],"names":["Progress"],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export type SimulationState = 'stopped' | 'playing' | 'paused';
|
|
4
|
+
export interface SimulationControlsProps {
|
|
5
|
+
/** Current simulation state */
|
|
6
|
+
state?: SimulationState;
|
|
7
|
+
/** Whether simulation is playing (alternative to state) */
|
|
8
|
+
isPlaying?: boolean;
|
|
9
|
+
/** Whether simulation is paused (used with isPlaying for 3-state) */
|
|
10
|
+
isPaused?: boolean;
|
|
11
|
+
/** Called when play is triggered */
|
|
12
|
+
onPlay?: () => void;
|
|
13
|
+
/** Called when pause is triggered */
|
|
14
|
+
onPause?: () => void;
|
|
15
|
+
/** Called when stop (reset) is triggered */
|
|
16
|
+
onStop?: () => void;
|
|
17
|
+
/** Called when step forward is triggered */
|
|
18
|
+
onStepForward?: () => void;
|
|
19
|
+
/** Called when step backward is triggered */
|
|
20
|
+
onStepBackward?: () => void;
|
|
21
|
+
/** Current simulation time */
|
|
22
|
+
currentTime?: Date | string;
|
|
23
|
+
/** Simulation epoch (t=0) */
|
|
24
|
+
epoch?: Date | string;
|
|
25
|
+
/** Current elapsed seconds from epoch */
|
|
26
|
+
elapsedSeconds?: number;
|
|
27
|
+
/** Show elapsed time display */
|
|
28
|
+
showElapsedTime?: boolean;
|
|
29
|
+
/** Show current time display */
|
|
30
|
+
showCurrentTime?: boolean;
|
|
31
|
+
/** Show date in time display */
|
|
32
|
+
showDate?: boolean;
|
|
33
|
+
/** Current time scale factor (1 = realtime) */
|
|
34
|
+
timeScale?: number;
|
|
35
|
+
/** Callback when time scale changes */
|
|
36
|
+
onTimeScaleChange?: (scale: number) => void;
|
|
37
|
+
/** Available time scale presets */
|
|
38
|
+
timeScalePresets?: number[];
|
|
39
|
+
/** Show time scale controls */
|
|
40
|
+
showTimeScale?: boolean;
|
|
41
|
+
/** Step size in seconds */
|
|
42
|
+
stepSize?: number;
|
|
43
|
+
/** Callback when step size changes */
|
|
44
|
+
onStepSizeChange?: (size: number) => void;
|
|
45
|
+
/** Available step size presets in seconds */
|
|
46
|
+
stepSizePresets?: number[];
|
|
47
|
+
/** Show step controls */
|
|
48
|
+
showStepControls?: boolean;
|
|
49
|
+
/** Compact display mode */
|
|
50
|
+
compact?: boolean;
|
|
51
|
+
/** Small size variant */
|
|
52
|
+
small?: boolean;
|
|
53
|
+
/** Custom className */
|
|
54
|
+
className?: string;
|
|
55
|
+
/** Disabled state */
|
|
56
|
+
disabled?: boolean;
|
|
57
|
+
/** Show simulation status indicator */
|
|
58
|
+
showStatus?: boolean;
|
|
59
|
+
/** Custom label for simulation mode */
|
|
60
|
+
label?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* SimulationControls - Playback controls for space simulation
|
|
64
|
+
*
|
|
65
|
+
* Provides comprehensive simulation time control following Astro UX patterns.
|
|
66
|
+
* Designed for mission control and space operations applications.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```tsx
|
|
70
|
+
* // Basic usage
|
|
71
|
+
* <SimulationControls
|
|
72
|
+
* isPlaying={isPlaying}
|
|
73
|
+
* onPlay={() => setIsPlaying(true)}
|
|
74
|
+
* onPause={() => setIsPlaying(false)}
|
|
75
|
+
* onStop={handleReset}
|
|
76
|
+
* />
|
|
77
|
+
*
|
|
78
|
+
* // Full featured
|
|
79
|
+
* <SimulationControls
|
|
80
|
+
* isPlaying={isPlaying}
|
|
81
|
+
* onPlay={handlePlay}
|
|
82
|
+
* onPause={handlePause}
|
|
83
|
+
* onStop={handleStop}
|
|
84
|
+
* onStepForward={handleStepForward}
|
|
85
|
+
* onStepBackward={handleStepBackward}
|
|
86
|
+
* currentTime={simulationTime}
|
|
87
|
+
* epoch={epoch}
|
|
88
|
+
* elapsedSeconds={elapsed}
|
|
89
|
+
* timeScale={timeScale}
|
|
90
|
+
* onTimeScaleChange={setTimeScale}
|
|
91
|
+
* showTimeScale
|
|
92
|
+
* showStepControls
|
|
93
|
+
* showElapsedTime
|
|
94
|
+
* />
|
|
95
|
+
*
|
|
96
|
+
* // In AppBar center slot
|
|
97
|
+
* <AppBar
|
|
98
|
+
* appName="Mission Control"
|
|
99
|
+
* centerSlot={
|
|
100
|
+
* <SimulationControls
|
|
101
|
+
* compact
|
|
102
|
+
* isPlaying={isPlaying}
|
|
103
|
+
* onPlay={handlePlay}
|
|
104
|
+
* onPause={handlePause}
|
|
105
|
+
* currentTime={simTime}
|
|
106
|
+
* />
|
|
107
|
+
* }
|
|
108
|
+
* />
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare const SimulationControls: React.NamedExoticComponent<SimulationControlsProps>;
|
|
112
|
+
/**
|
|
113
|
+
* MiniSimulationControls - Ultra-compact controls for AppBar
|
|
114
|
+
*/
|
|
115
|
+
export interface MiniSimulationControlsProps {
|
|
116
|
+
isPlaying?: boolean;
|
|
117
|
+
onPlay?: () => void;
|
|
118
|
+
onPause?: () => void;
|
|
119
|
+
onStop?: () => void;
|
|
120
|
+
timeScale?: number;
|
|
121
|
+
onTimeScaleChange?: (scale: number) => void;
|
|
122
|
+
disabled?: boolean;
|
|
123
|
+
className?: string;
|
|
124
|
+
}
|
|
125
|
+
export declare const MiniSimulationControls: React.NamedExoticComponent<MiniSimulationControlsProps>;
|
|
126
|
+
/**
|
|
127
|
+
* SimulationControlsWithClock - Controls combined with MissionClock
|
|
128
|
+
*/
|
|
129
|
+
export interface SimulationControlsWithClockProps extends Omit<SimulationControlsProps, 'showCurrentTime' | 'showElapsedTime'> {
|
|
130
|
+
/** Clock format */
|
|
131
|
+
clockFormat?: '12h' | '24h';
|
|
132
|
+
/** Timezone label */
|
|
133
|
+
timezone?: string;
|
|
134
|
+
}
|
|
135
|
+
export declare const SimulationControlsWithClock: React.NamedExoticComponent<SimulationControlsWithClockProps>;
|
|
136
|
+
export default SimulationControls;
|