@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,545 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useMemo } from "react";
|
|
3
|
+
import { AstroIcon } from "./AstroIcon.js";
|
|
4
|
+
import { getPropertyConfig, deriveStatus, formatPropertyValue } from "./propertyConfig.js";
|
|
5
|
+
import { useTheme } from "../theme/ThemeProvider.js";
|
|
6
|
+
const STATUS_BORDER_COLORS = {
|
|
7
|
+
off: "#3c3e42",
|
|
8
|
+
standby: "#285766",
|
|
9
|
+
normal: "#005a00",
|
|
10
|
+
caution: "#645600",
|
|
11
|
+
serious: "#664618",
|
|
12
|
+
critical: "#661102"
|
|
13
|
+
};
|
|
14
|
+
const StatusShape = ({ status, size, color, borderColor, glow = true }) => {
|
|
15
|
+
const hasBorder = !!borderColor;
|
|
16
|
+
const strokeWidth = hasBorder ? 1 : 0;
|
|
17
|
+
const glowFilter = glow && !hasBorder ? `drop-shadow(0 0 3px ${color})` : void 0;
|
|
18
|
+
const renderShape = () => {
|
|
19
|
+
switch (status) {
|
|
20
|
+
case "off":
|
|
21
|
+
return /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: hasBorder ? 2.5 : 3, fill: color, stroke: borderColor, strokeWidth });
|
|
22
|
+
case "standby":
|
|
23
|
+
return /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: color, strokeWidth: "2" });
|
|
24
|
+
case "normal":
|
|
25
|
+
return /* @__PURE__ */ jsx(
|
|
26
|
+
"circle",
|
|
27
|
+
{
|
|
28
|
+
cx: "6",
|
|
29
|
+
cy: "6",
|
|
30
|
+
r: hasBorder ? 4.5 : 5,
|
|
31
|
+
fill: color,
|
|
32
|
+
stroke: borderColor,
|
|
33
|
+
strokeWidth
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
case "caution":
|
|
37
|
+
return /* @__PURE__ */ jsx(
|
|
38
|
+
"rect",
|
|
39
|
+
{
|
|
40
|
+
x: hasBorder ? 1.5 : 1,
|
|
41
|
+
y: hasBorder ? 1.5 : 1,
|
|
42
|
+
width: hasBorder ? 9 : 10,
|
|
43
|
+
height: hasBorder ? 9 : 10,
|
|
44
|
+
fill: color,
|
|
45
|
+
stroke: borderColor,
|
|
46
|
+
strokeWidth
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
case "serious":
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
"polygon",
|
|
52
|
+
{
|
|
53
|
+
points: "6,1 11,6 6,11 1,6",
|
|
54
|
+
fill: color,
|
|
55
|
+
stroke: borderColor,
|
|
56
|
+
strokeWidth
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
case "critical":
|
|
60
|
+
return /* @__PURE__ */ jsx(
|
|
61
|
+
"polygon",
|
|
62
|
+
{
|
|
63
|
+
points: "6,11 1,2 11,2",
|
|
64
|
+
fill: color,
|
|
65
|
+
stroke: borderColor,
|
|
66
|
+
strokeWidth
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
default:
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ jsx(
|
|
74
|
+
"svg",
|
|
75
|
+
{
|
|
76
|
+
viewBox: "0 0 12 12",
|
|
77
|
+
width: size,
|
|
78
|
+
height: size,
|
|
79
|
+
style: { filter: glowFilter },
|
|
80
|
+
children: renderShape()
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
};
|
|
84
|
+
const IconWithBadge = memo(function IconWithBadge2({
|
|
85
|
+
icon,
|
|
86
|
+
iconSize,
|
|
87
|
+
iconColor,
|
|
88
|
+
showBadge,
|
|
89
|
+
status,
|
|
90
|
+
statusColor,
|
|
91
|
+
isLightTheme = false
|
|
92
|
+
}) {
|
|
93
|
+
const badgeSizeRatio = 0.3;
|
|
94
|
+
const badgeSize = Math.max(7, Math.min(14, Math.round(iconSize * badgeSizeRatio)));
|
|
95
|
+
const badgeOffsetX = -2;
|
|
96
|
+
const badgeOffsetY = -2;
|
|
97
|
+
const borderColor = isLightTheme ? STATUS_BORDER_COLORS[status] : void 0;
|
|
98
|
+
const containerSize = iconSize;
|
|
99
|
+
return /* @__PURE__ */ jsxs("div", { style: {
|
|
100
|
+
position: "relative",
|
|
101
|
+
display: "flex",
|
|
102
|
+
alignItems: "center",
|
|
103
|
+
justifyContent: "center",
|
|
104
|
+
flexShrink: 0,
|
|
105
|
+
width: containerSize,
|
|
106
|
+
height: containerSize
|
|
107
|
+
}, children: [
|
|
108
|
+
/* @__PURE__ */ jsx(AstroIcon, { name: icon, size: iconSize, color: iconColor }),
|
|
109
|
+
showBadge && /* @__PURE__ */ jsx("span", { style: {
|
|
110
|
+
position: "absolute",
|
|
111
|
+
top: badgeOffsetY,
|
|
112
|
+
left: badgeOffsetX,
|
|
113
|
+
display: "flex",
|
|
114
|
+
alignItems: "center",
|
|
115
|
+
justifyContent: "center"
|
|
116
|
+
}, children: /* @__PURE__ */ jsx(
|
|
117
|
+
StatusShape,
|
|
118
|
+
{
|
|
119
|
+
status,
|
|
120
|
+
size: badgeSize,
|
|
121
|
+
color: statusColor,
|
|
122
|
+
borderColor,
|
|
123
|
+
glow: !isLightTheme
|
|
124
|
+
}
|
|
125
|
+
) })
|
|
126
|
+
] });
|
|
127
|
+
});
|
|
128
|
+
const DataValue = memo(function DataValue2({
|
|
129
|
+
property,
|
|
130
|
+
label: labelProp,
|
|
131
|
+
value,
|
|
132
|
+
unit: unitProp,
|
|
133
|
+
icon: iconProp,
|
|
134
|
+
showIcon = true,
|
|
135
|
+
thresholds: thresholdsProp,
|
|
136
|
+
status: statusProp,
|
|
137
|
+
showStatus = true,
|
|
138
|
+
precision: precisionProp,
|
|
139
|
+
variant = "stacked",
|
|
140
|
+
size = "md",
|
|
141
|
+
color: colorProp,
|
|
142
|
+
className = "",
|
|
143
|
+
style,
|
|
144
|
+
onClick,
|
|
145
|
+
tooltip
|
|
146
|
+
}) {
|
|
147
|
+
const { tokens, mode } = useTheme();
|
|
148
|
+
const isLightTheme = mode === "light";
|
|
149
|
+
const config = useMemo(() => {
|
|
150
|
+
const preset = property ? getPropertyConfig(property) : {
|
|
151
|
+
label: labelProp || "Value",
|
|
152
|
+
icon: iconProp || "info",
|
|
153
|
+
unit: unitProp,
|
|
154
|
+
precision: precisionProp,
|
|
155
|
+
thresholds: thresholdsProp
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
...preset,
|
|
159
|
+
...labelProp !== void 0 && { label: labelProp },
|
|
160
|
+
...iconProp !== void 0 && { icon: iconProp },
|
|
161
|
+
...unitProp !== void 0 && { unit: unitProp },
|
|
162
|
+
...precisionProp !== void 0 && { precision: precisionProp },
|
|
163
|
+
...thresholdsProp !== void 0 && { thresholds: thresholdsProp }
|
|
164
|
+
};
|
|
165
|
+
}, [property, labelProp, iconProp, unitProp, precisionProp, thresholdsProp]);
|
|
166
|
+
const status = useMemo(() => {
|
|
167
|
+
if (statusProp) return statusProp;
|
|
168
|
+
if (typeof value === "number") {
|
|
169
|
+
return deriveStatus(value, config.thresholds);
|
|
170
|
+
}
|
|
171
|
+
return "normal";
|
|
172
|
+
}, [statusProp, value, config.thresholds]);
|
|
173
|
+
const formattedValue = useMemo(() => {
|
|
174
|
+
if (value === void 0 || value === null) return "--";
|
|
175
|
+
if (typeof value === "string") return value;
|
|
176
|
+
return formatPropertyValue(value, config);
|
|
177
|
+
}, [value, config]);
|
|
178
|
+
const statusColor = tokens.colors.status[status] || tokens.colors.status.off;
|
|
179
|
+
const valueColor = colorProp || (showStatus && status !== "normal" ? statusColor : tokens.colors.text.primary);
|
|
180
|
+
const sizeConfig = {
|
|
181
|
+
sm: {
|
|
182
|
+
iconSize: 16,
|
|
183
|
+
labelSize: tokens.typography.fontSize.xs,
|
|
184
|
+
// 10px - matches DataCell
|
|
185
|
+
valueSize: tokens.typography.fontSize.sm,
|
|
186
|
+
// 12px - matches DataCell
|
|
187
|
+
lineHeight: 1.4,
|
|
188
|
+
gap: 6,
|
|
189
|
+
// Increased from 4px to 6px for better icon separation with larger icons
|
|
190
|
+
rowGap: 2
|
|
191
|
+
// 2px between label and value
|
|
192
|
+
},
|
|
193
|
+
md: {
|
|
194
|
+
iconSize: 20,
|
|
195
|
+
labelSize: tokens.typography.fontSize.xs,
|
|
196
|
+
// 10px
|
|
197
|
+
valueSize: tokens.typography.fontSize.base,
|
|
198
|
+
// 14px
|
|
199
|
+
lineHeight: 1.4,
|
|
200
|
+
gap: 10,
|
|
201
|
+
// Increased from 8px to 10px
|
|
202
|
+
rowGap: 2
|
|
203
|
+
// 2px between label and value
|
|
204
|
+
},
|
|
205
|
+
lg: {
|
|
206
|
+
iconSize: 24,
|
|
207
|
+
labelSize: tokens.typography.fontSize.sm,
|
|
208
|
+
// 12px
|
|
209
|
+
valueSize: tokens.typography.fontSize.md,
|
|
210
|
+
// 14px
|
|
211
|
+
lineHeight: 1.4,
|
|
212
|
+
gap: 14,
|
|
213
|
+
// Increased from 12px to 14px
|
|
214
|
+
rowGap: 4
|
|
215
|
+
// 4px between label and value
|
|
216
|
+
}
|
|
217
|
+
}[size];
|
|
218
|
+
const renderContent = () => {
|
|
219
|
+
const hasStatus = showStatus && status !== "normal" && status !== "off";
|
|
220
|
+
switch (variant) {
|
|
221
|
+
case "inline": {
|
|
222
|
+
return /* @__PURE__ */ jsxs("div", { style: {
|
|
223
|
+
display: "flex",
|
|
224
|
+
alignItems: "center",
|
|
225
|
+
justifyContent: "space-between",
|
|
226
|
+
gap: sizeConfig.gap * 2,
|
|
227
|
+
minHeight: sizeConfig.iconSize
|
|
228
|
+
// Ensure consistent row height
|
|
229
|
+
}, children: [
|
|
230
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
231
|
+
display: "flex",
|
|
232
|
+
alignItems: "center",
|
|
233
|
+
gap: sizeConfig.gap
|
|
234
|
+
}, children: [
|
|
235
|
+
showIcon && config.icon && /* @__PURE__ */ jsx(
|
|
236
|
+
IconWithBadge,
|
|
237
|
+
{
|
|
238
|
+
icon: config.icon,
|
|
239
|
+
iconSize: sizeConfig.iconSize,
|
|
240
|
+
iconColor: hasStatus ? statusColor : tokens.colors.text.tertiary,
|
|
241
|
+
showBadge: hasStatus,
|
|
242
|
+
status,
|
|
243
|
+
statusColor,
|
|
244
|
+
isLightTheme
|
|
245
|
+
}
|
|
246
|
+
),
|
|
247
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
248
|
+
fontSize: sizeConfig.labelSize,
|
|
249
|
+
lineHeight: sizeConfig.lineHeight,
|
|
250
|
+
color: tokens.colors.text.secondary,
|
|
251
|
+
fontWeight: 500,
|
|
252
|
+
fontFamily: tokens.typography.fontFamily.primary
|
|
253
|
+
}, children: config.label })
|
|
254
|
+
] }),
|
|
255
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
256
|
+
fontSize: sizeConfig.valueSize,
|
|
257
|
+
lineHeight: sizeConfig.lineHeight,
|
|
258
|
+
fontWeight: 500,
|
|
259
|
+
// Match SpacecraftCard DataCell
|
|
260
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
261
|
+
fontVariantNumeric: "tabular-nums",
|
|
262
|
+
color: valueColor
|
|
263
|
+
}, children: formattedValue })
|
|
264
|
+
] });
|
|
265
|
+
}
|
|
266
|
+
case "compact": {
|
|
267
|
+
return /* @__PURE__ */ jsxs("div", { style: {
|
|
268
|
+
display: "flex",
|
|
269
|
+
alignItems: "center",
|
|
270
|
+
gap: sizeConfig.gap,
|
|
271
|
+
minHeight: sizeConfig.iconSize
|
|
272
|
+
}, children: [
|
|
273
|
+
showIcon && config.icon && /* @__PURE__ */ jsx(
|
|
274
|
+
IconWithBadge,
|
|
275
|
+
{
|
|
276
|
+
icon: config.icon,
|
|
277
|
+
iconSize: sizeConfig.iconSize,
|
|
278
|
+
iconColor: hasStatus ? statusColor : tokens.colors.text.tertiary,
|
|
279
|
+
showBadge: hasStatus,
|
|
280
|
+
status,
|
|
281
|
+
statusColor,
|
|
282
|
+
isLightTheme
|
|
283
|
+
}
|
|
284
|
+
),
|
|
285
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
286
|
+
fontSize: sizeConfig.valueSize,
|
|
287
|
+
lineHeight: sizeConfig.lineHeight,
|
|
288
|
+
fontWeight: 500,
|
|
289
|
+
// Match SpacecraftCard DataCell
|
|
290
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
291
|
+
fontVariantNumeric: "tabular-nums",
|
|
292
|
+
color: valueColor
|
|
293
|
+
}, children: formattedValue })
|
|
294
|
+
] });
|
|
295
|
+
}
|
|
296
|
+
case "minimal":
|
|
297
|
+
return /* @__PURE__ */ jsx("span", { style: {
|
|
298
|
+
fontSize: sizeConfig.valueSize,
|
|
299
|
+
lineHeight: sizeConfig.lineHeight,
|
|
300
|
+
fontWeight: 500,
|
|
301
|
+
// Match SpacecraftCard DataCell
|
|
302
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
303
|
+
fontVariantNumeric: "tabular-nums",
|
|
304
|
+
color: valueColor
|
|
305
|
+
}, children: formattedValue });
|
|
306
|
+
case "card": {
|
|
307
|
+
const iconMultiplier = 0.7;
|
|
308
|
+
const iconToTextGap = 4;
|
|
309
|
+
const baseSize = { sm: 26, md: 32, lg: 40 }[size];
|
|
310
|
+
const iconSize = Math.round(baseSize * iconMultiplier);
|
|
311
|
+
return /* @__PURE__ */ jsxs("div", { style: {
|
|
312
|
+
display: "flex",
|
|
313
|
+
alignItems: "center",
|
|
314
|
+
gap: iconToTextGap
|
|
315
|
+
}, children: [
|
|
316
|
+
showIcon && config.icon && /* @__PURE__ */ jsx(
|
|
317
|
+
IconWithBadge,
|
|
318
|
+
{
|
|
319
|
+
icon: config.icon,
|
|
320
|
+
iconSize,
|
|
321
|
+
iconColor: hasStatus ? statusColor : tokens.colors.text.tertiary,
|
|
322
|
+
showBadge: hasStatus,
|
|
323
|
+
status,
|
|
324
|
+
statusColor,
|
|
325
|
+
isLightTheme
|
|
326
|
+
}
|
|
327
|
+
),
|
|
328
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
329
|
+
display: "flex",
|
|
330
|
+
flexDirection: "column",
|
|
331
|
+
justifyContent: "space-between",
|
|
332
|
+
// Distribute label/value to edges
|
|
333
|
+
gap: sizeConfig.rowGap,
|
|
334
|
+
minWidth: 0
|
|
335
|
+
}, children: [
|
|
336
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
337
|
+
fontSize: sizeConfig.labelSize,
|
|
338
|
+
lineHeight: sizeConfig.lineHeight,
|
|
339
|
+
color: tokens.colors.text.secondary,
|
|
340
|
+
fontWeight: 500,
|
|
341
|
+
fontFamily: tokens.typography.fontFamily.primary
|
|
342
|
+
}, children: config.label }),
|
|
343
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
344
|
+
fontSize: sizeConfig.valueSize,
|
|
345
|
+
lineHeight: sizeConfig.lineHeight,
|
|
346
|
+
fontWeight: 500,
|
|
347
|
+
// Match SpacecraftCard DataCell
|
|
348
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
349
|
+
fontVariantNumeric: "tabular-nums",
|
|
350
|
+
color: valueColor
|
|
351
|
+
}, children: formattedValue })
|
|
352
|
+
] })
|
|
353
|
+
] });
|
|
354
|
+
}
|
|
355
|
+
case "banner": {
|
|
356
|
+
const bannerIconSize = { sm: 18, md: 22, lg: 28 }[size];
|
|
357
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: sizeConfig.rowGap, minWidth: 0, width: "100%" }, children: [
|
|
358
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
359
|
+
fontSize: sizeConfig.labelSize,
|
|
360
|
+
lineHeight: sizeConfig.lineHeight,
|
|
361
|
+
color: tokens.colors.text.secondary,
|
|
362
|
+
fontWeight: 500,
|
|
363
|
+
fontFamily: tokens.typography.fontFamily.primary,
|
|
364
|
+
textTransform: "uppercase",
|
|
365
|
+
letterSpacing: "0.5px"
|
|
366
|
+
}, children: config.label }),
|
|
367
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
368
|
+
display: "flex",
|
|
369
|
+
alignItems: "center",
|
|
370
|
+
justifyContent: "flex-start",
|
|
371
|
+
width: "100%",
|
|
372
|
+
gap: 6,
|
|
373
|
+
minWidth: 0
|
|
374
|
+
}, children: [
|
|
375
|
+
showIcon && config.icon && /* @__PURE__ */ jsx(
|
|
376
|
+
IconWithBadge,
|
|
377
|
+
{
|
|
378
|
+
icon: config.icon,
|
|
379
|
+
iconSize: bannerIconSize,
|
|
380
|
+
iconColor: hasStatus ? statusColor : tokens.colors.text.tertiary,
|
|
381
|
+
showBadge: hasStatus,
|
|
382
|
+
status,
|
|
383
|
+
statusColor,
|
|
384
|
+
isLightTheme
|
|
385
|
+
}
|
|
386
|
+
),
|
|
387
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
388
|
+
fontSize: sizeConfig.valueSize,
|
|
389
|
+
lineHeight: sizeConfig.lineHeight,
|
|
390
|
+
fontWeight: 600,
|
|
391
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
392
|
+
fontVariantNumeric: "tabular-nums",
|
|
393
|
+
color: valueColor,
|
|
394
|
+
textAlign: "left"
|
|
395
|
+
}, children: formattedValue })
|
|
396
|
+
] })
|
|
397
|
+
] });
|
|
398
|
+
}
|
|
399
|
+
case "stacked":
|
|
400
|
+
default: {
|
|
401
|
+
const iconMultiplier = 0.7;
|
|
402
|
+
const iconToTextGap = 4;
|
|
403
|
+
const baseSize = { sm: 26, md: 32, lg: 40 }[size];
|
|
404
|
+
const iconSize = Math.round(baseSize * iconMultiplier);
|
|
405
|
+
return /* @__PURE__ */ jsxs("div", { style: {
|
|
406
|
+
display: "flex",
|
|
407
|
+
alignItems: "center",
|
|
408
|
+
gap: iconToTextGap
|
|
409
|
+
}, children: [
|
|
410
|
+
showIcon && config.icon && /* @__PURE__ */ jsx(
|
|
411
|
+
IconWithBadge,
|
|
412
|
+
{
|
|
413
|
+
icon: config.icon,
|
|
414
|
+
iconSize,
|
|
415
|
+
iconColor: hasStatus ? statusColor : tokens.colors.text.tertiary,
|
|
416
|
+
showBadge: hasStatus,
|
|
417
|
+
status,
|
|
418
|
+
statusColor,
|
|
419
|
+
isLightTheme
|
|
420
|
+
}
|
|
421
|
+
),
|
|
422
|
+
/* @__PURE__ */ jsxs("div", { style: {
|
|
423
|
+
display: "flex",
|
|
424
|
+
flexDirection: "column",
|
|
425
|
+
justifyContent: "space-between",
|
|
426
|
+
// Distribute label/value to edges
|
|
427
|
+
gap: sizeConfig.rowGap,
|
|
428
|
+
minWidth: 0
|
|
429
|
+
}, children: [
|
|
430
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
431
|
+
fontSize: sizeConfig.labelSize,
|
|
432
|
+
lineHeight: sizeConfig.lineHeight,
|
|
433
|
+
color: tokens.colors.text.secondary,
|
|
434
|
+
fontWeight: 500,
|
|
435
|
+
fontFamily: tokens.typography.fontFamily.primary
|
|
436
|
+
}, children: config.label }),
|
|
437
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
438
|
+
fontSize: sizeConfig.valueSize,
|
|
439
|
+
lineHeight: sizeConfig.lineHeight,
|
|
440
|
+
fontWeight: 500,
|
|
441
|
+
// Match SpacecraftCard DataCell
|
|
442
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
443
|
+
fontVariantNumeric: "tabular-nums",
|
|
444
|
+
color: valueColor
|
|
445
|
+
}, children: formattedValue })
|
|
446
|
+
] })
|
|
447
|
+
] });
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
return /* @__PURE__ */ jsx(
|
|
452
|
+
"div",
|
|
453
|
+
{
|
|
454
|
+
className: `zendir-data-value zendir-data-value--${variant} zendir-data-value--${size} ${className}`,
|
|
455
|
+
style: {
|
|
456
|
+
cursor: onClick ? "pointer" : "default",
|
|
457
|
+
...variant === "banner" ? { flex: 1, minWidth: 0 } : {},
|
|
458
|
+
...style
|
|
459
|
+
},
|
|
460
|
+
onClick,
|
|
461
|
+
title: tooltip || config.description,
|
|
462
|
+
role: onClick ? "button" : void 0,
|
|
463
|
+
tabIndex: onClick ? 0 : void 0,
|
|
464
|
+
onKeyDown: onClick ? (e) => e.key === "Enter" && onClick() : void 0,
|
|
465
|
+
children: renderContent()
|
|
466
|
+
}
|
|
467
|
+
);
|
|
468
|
+
});
|
|
469
|
+
const DataValueGroup = memo(function DataValueGroup2({
|
|
470
|
+
title,
|
|
471
|
+
icon,
|
|
472
|
+
direction = "grid",
|
|
473
|
+
columns = 2,
|
|
474
|
+
gap = "md",
|
|
475
|
+
children,
|
|
476
|
+
className = "",
|
|
477
|
+
style
|
|
478
|
+
}) {
|
|
479
|
+
const { tokens } = useTheme();
|
|
480
|
+
const gapSize = {
|
|
481
|
+
sm: 8,
|
|
482
|
+
// 2 × 4px
|
|
483
|
+
md: 16,
|
|
484
|
+
// 4 × 4px
|
|
485
|
+
lg: 24
|
|
486
|
+
// 6 × 4px
|
|
487
|
+
}[gap];
|
|
488
|
+
const layoutStyles = {
|
|
489
|
+
row: {
|
|
490
|
+
display: "flex",
|
|
491
|
+
flexDirection: "row",
|
|
492
|
+
flexWrap: "wrap",
|
|
493
|
+
gap: gapSize,
|
|
494
|
+
alignItems: "flex-start"
|
|
495
|
+
},
|
|
496
|
+
column: {
|
|
497
|
+
display: "flex",
|
|
498
|
+
flexDirection: "column",
|
|
499
|
+
gap: gapSize
|
|
500
|
+
},
|
|
501
|
+
grid: {
|
|
502
|
+
display: "grid",
|
|
503
|
+
gridTemplateColumns: `repeat(${columns}, 1fr)`,
|
|
504
|
+
gap: gapSize,
|
|
505
|
+
alignItems: "start"
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
const layoutStyle = layoutStyles[direction];
|
|
509
|
+
return /* @__PURE__ */ jsxs("div", { className: `zendir-data-value-group ${className}`, style, children: [
|
|
510
|
+
title && /* @__PURE__ */ jsxs("div", { style: {
|
|
511
|
+
display: "flex",
|
|
512
|
+
alignItems: "center",
|
|
513
|
+
gap: 6,
|
|
514
|
+
// 6px gap for tight header
|
|
515
|
+
marginBottom: 12,
|
|
516
|
+
// 3 × 4px
|
|
517
|
+
paddingBottom: 8,
|
|
518
|
+
// 2 × 4px
|
|
519
|
+
borderBottom: `1px solid ${tokens.colors.border.muted}`
|
|
520
|
+
}, children: [
|
|
521
|
+
icon && /* @__PURE__ */ jsx(
|
|
522
|
+
AstroIcon,
|
|
523
|
+
{
|
|
524
|
+
name: icon,
|
|
525
|
+
size: 14,
|
|
526
|
+
color: tokens.colors.text.tertiary,
|
|
527
|
+
style: { flexShrink: 0 }
|
|
528
|
+
}
|
|
529
|
+
),
|
|
530
|
+
/* @__PURE__ */ jsx("span", { style: {
|
|
531
|
+
fontSize: "12px",
|
|
532
|
+
fontWeight: 500,
|
|
533
|
+
color: tokens.colors.text.secondary,
|
|
534
|
+
textTransform: "uppercase",
|
|
535
|
+
letterSpacing: "0.5px"
|
|
536
|
+
}, children: title })
|
|
537
|
+
] }),
|
|
538
|
+
/* @__PURE__ */ jsx("div", { style: layoutStyle, children })
|
|
539
|
+
] });
|
|
540
|
+
});
|
|
541
|
+
export {
|
|
542
|
+
DataValue,
|
|
543
|
+
DataValueGroup
|
|
544
|
+
};
|
|
545
|
+
//# sourceMappingURL=DataValue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataValue.js","sources":["../../../src/react/core/DataValue.tsx"],"sourcesContent":["/**\n * @zendir/ui - DataValue Component\n * \n * Enterprise-grade data value display with icon, label, value, and status.\n * The building block for telemetry displays, dashboards, and monitoring UIs.\n * \n * AstroUXDS Compliance:\n * - Status colors per AstroUXDS status system\n * - Dual-coding (color + shape) for accessibility via StatusIndicator\n * - Tabular numbers for alignment\n * - Sentence-case labels\n * \n * Features:\n * - Auto-derive status from value + thresholds\n * - Contextual icons from property presets\n * - Multiple layout variants (stacked, inline, compact)\n * - Theme-aware styling\n * \n * @example\n * ```tsx\n * import { DataValue } from '@zendir/ui';\n * \n * // Simple usage with property preset\n * <DataValue property=\"temperature\" value={72.5} />\n * \n * // Custom configuration\n * <DataValue \n * label=\"Battery\"\n * value={85}\n * unit=\"%\"\n * icon=\"battery-full\"\n * thresholds={{ critical: 10, caution: 30 }}\n * />\n * \n * // Inline layout\n * <DataValue property=\"voltage\" value={28.4} variant=\"inline\" />\n * ```\n */\n\nimport React, { memo, useMemo } from 'react';\nimport { useTheme } from '../theme';\nimport { AstroIcon, type AstroIconName } from './AstroIcon';\nimport { \n getPropertyConfig, \n deriveStatus, \n formatPropertyValue,\n type PropertyKey,\n type StatusThresholds,\n type PropertyConfig,\n} from './propertyConfig';\nimport type { StatusLevel } from '../utils';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type DataValueVariant = 'stacked' | 'inline' | 'compact' | 'minimal' | 'card' | 'banner';\nexport type DataValueSize = 'sm' | 'md' | 'lg';\n\nexport interface DataValueProps {\n /** Property key for auto-configuration (e.g., 'temperature', 'battery') */\n property?: PropertyKey;\n /** Display label (overrides property preset) */\n label?: string;\n /** Current value */\n value: number | string | undefined | null;\n /** Unit of measurement (overrides property preset) */\n unit?: string;\n /** Icon name (overrides property preset) */\n icon?: AstroIconName;\n /** Show icon */\n showIcon?: boolean;\n /** Status thresholds for auto-derivation (overrides property preset) */\n thresholds?: StatusThresholds;\n /** Override status (bypasses auto-derivation) */\n status?: StatusLevel;\n /** Show status indicator */\n showStatus?: boolean;\n /** Precision for number formatting (overrides property preset) */\n precision?: number;\n /** Layout variant */\n variant?: DataValueVariant;\n /** Size */\n size?: DataValueSize;\n /** Custom value color (overrides status color) */\n color?: string;\n /** Additional CSS class */\n className?: string;\n /** Custom inline styles */\n style?: React.CSSProperties;\n /** Click handler */\n onClick?: () => void;\n /** Tooltip text */\n tooltip?: string;\n}\n\n// =============================================================================\n// Astro UX Status Border Colors - Required for light theme WCAG compliance\n// https://www.astrouxds.com/patterns/status-system/\n// =============================================================================\n\nconst STATUS_BORDER_COLORS: Record<StatusLevel, string> = {\n off: '#3c3e42',\n standby: '#285766',\n normal: '#005a00',\n caution: '#645600',\n serious: '#664618',\n critical: '#661102',\n};\n\n// =============================================================================\n// Status Shape SVG - Matches MonitoringIcon exactly\n// - Glow effect in dark mode for visibility\n// - Border in light mode for WCAG AA compliance\n// =============================================================================\n\ninterface StatusShapeProps {\n status: StatusLevel;\n size: number;\n color: string;\n borderColor?: string;\n glow?: boolean;\n}\n\nconst StatusShape = ({ status, size, color, borderColor, glow = true }: StatusShapeProps) => {\n const hasBorder = !!borderColor;\n const strokeWidth = hasBorder ? 1 : 0;\n const glowFilter = glow && !hasBorder ? `drop-shadow(0 0 3px ${color})` : undefined;\n \n const renderShape = () => {\n switch (status) {\n case 'off':\n return <circle cx=\"6\" cy=\"6\" r={hasBorder ? 2.5 : 3} fill={color} stroke={borderColor} strokeWidth={strokeWidth} />;\n case 'standby':\n return <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />;\n case 'normal':\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r={hasBorder ? 4.5 : 5}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'caution':\n return (\n <rect\n x={hasBorder ? 1.5 : 1}\n y={hasBorder ? 1.5 : 1}\n width={hasBorder ? 9 : 10}\n height={hasBorder ? 9 : 10}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'serious':\n return (\n <polygon\n points=\"6,1 11,6 6,11 1,6\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'critical':\n return (\n <polygon\n points=\"6,11 1,2 11,2\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n default:\n return null;\n }\n };\n \n return (\n <svg \n viewBox=\"0 0 12 12\" \n width={size} \n height={size}\n style={{ filter: glowFilter }}\n >\n {renderShape()}\n </svg>\n );\n};\n\n// =============================================================================\n// Icon with Status Badge - Enterprise-grade alignment\n// \n// Design System Principles (Apple HIG / Google Material / AstroUXDS):\n// - 4px-based spacing grid for visual harmony\n// - Explicit container sizing prevents layout shift\n// - Status badge positioned at corner, not extending beyond container bounds\n// - Proportional badge sizing: ~35% of icon size for optimal visibility\n// =============================================================================\n\ninterface IconWithBadgeProps {\n icon: AstroIconName;\n iconSize: number;\n iconColor: string;\n showBadge: boolean;\n status: StatusLevel;\n statusColor: string;\n isLightTheme?: boolean;\n}\n\nconst IconWithBadge = memo(function IconWithBadge({ \n icon, iconSize, iconColor, showBadge, status, statusColor, isLightTheme = false \n}: IconWithBadgeProps) {\n // ═══════════════════════════════════════════════════════════════════════════\n // STATUS BADGE CONTROLS\n // ═══════════════════════════════════════════════════════════════════════════\n // BADGE SIZE: Percentage of icon size (0.25 = 25%)\n const badgeSizeRatio = 0.30;\n const badgeSize = Math.max(7, Math.min(14, Math.round(iconSize * badgeSizeRatio)));\n \n // BADGE POSITION: Offset from top-left corner (negative = away from icon)\n const badgeOffsetX = -2; // px (negative = left, positive = right)\n const badgeOffsetY = -2; // px (negative = up, positive = down)\n \n // ═══════════════════════════════════════════════════════════════════════════\n const borderColor = isLightTheme ? STATUS_BORDER_COLORS[status] : undefined;\n const containerSize = iconSize;\n \n return (\n <div style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: containerSize,\n height: containerSize,\n }}>\n <AstroIcon name={icon} size={iconSize} color={iconColor} />\n {showBadge && (\n <span style={{\n position: 'absolute',\n top: badgeOffsetY,\n left: badgeOffsetX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}>\n <StatusShape \n status={status} \n size={badgeSize} \n color={statusColor} \n borderColor={borderColor}\n glow={!isLightTheme} \n />\n </span>\n )}\n </div>\n );\n});\n\n// =============================================================================\n// DataValue Component\n// =============================================================================\n\nexport const DataValue = memo(function DataValue({\n property,\n label: labelProp,\n value,\n unit: unitProp,\n icon: iconProp,\n showIcon = true,\n thresholds: thresholdsProp,\n status: statusProp,\n showStatus = true,\n precision: precisionProp,\n variant = 'stacked',\n size = 'md',\n color: colorProp,\n className = '',\n style,\n onClick,\n tooltip,\n}: DataValueProps): React.ReactElement {\n const { tokens, mode } = useTheme();\n const isLightTheme = mode === 'light';\n\n // Merge property preset with explicit props\n const config = useMemo((): PropertyConfig => {\n const preset = property ? getPropertyConfig(property) : {\n label: labelProp || 'Value',\n icon: iconProp || 'info',\n unit: unitProp,\n precision: precisionProp,\n thresholds: thresholdsProp,\n };\n\n return {\n ...preset,\n ...(labelProp !== undefined && { label: labelProp }),\n ...(iconProp !== undefined && { icon: iconProp }),\n ...(unitProp !== undefined && { unit: unitProp }),\n ...(precisionProp !== undefined && { precision: precisionProp }),\n ...(thresholdsProp !== undefined && { thresholds: thresholdsProp }),\n };\n }, [property, labelProp, iconProp, unitProp, precisionProp, thresholdsProp]);\n\n // Derive or use explicit status\n const status = useMemo((): StatusLevel => {\n if (statusProp) return statusProp;\n if (typeof value === 'number') {\n return deriveStatus(value, config.thresholds);\n }\n return 'normal';\n }, [statusProp, value, config.thresholds]);\n\n // Format the value\n const formattedValue = useMemo((): string => {\n if (value === undefined || value === null) return '--';\n if (typeof value === 'string') return value;\n return formatPropertyValue(value, config);\n }, [value, config]);\n\n // Get status color\n const statusColor = tokens.colors.status[status] || tokens.colors.status.off;\n const valueColor = colorProp || (showStatus && status !== 'normal' ? statusColor : tokens.colors.text.primary);\n\n // ==========================================================================\n // Size Configuration - Uses theme tokens for consistency with other cards\n // ==========================================================================\n // Typography uses theme tokens to match SpacecraftCard's DataCell\n // fontSize.xs = 10px (0.625rem), fontSize.sm = 12px (0.75rem)\n const sizeConfig = {\n sm: { \n iconSize: 16, \n labelSize: tokens.typography.fontSize.xs, // 10px - matches DataCell\n valueSize: tokens.typography.fontSize.sm, // 12px - matches DataCell\n lineHeight: 1.4,\n gap: 6, // Increased from 4px to 6px for better icon separation with larger icons\n rowGap: 2, // 2px between label and value\n },\n md: { \n iconSize: 20, \n labelSize: tokens.typography.fontSize.xs, // 10px\n valueSize: tokens.typography.fontSize.base, // 14px\n lineHeight: 1.4,\n gap: 10, // Increased from 8px to 10px\n rowGap: 2, // 2px between label and value\n },\n lg: { \n iconSize: 24, \n labelSize: tokens.typography.fontSize.sm, // 12px\n valueSize: tokens.typography.fontSize.md, // 14px\n lineHeight: 1.4,\n gap: 14, // Increased from 12px to 14px\n rowGap: 4, // 4px between label and value\n },\n }[size];\n\n // ==========================================================================\n // Render Based on Variant\n // \n // Layout principles:\n // - Baseline alignment for inline text\n // - Consistent icon-to-text spacing\n // - Symmetrical padding\n // - Tabular numbers for value alignment in grids\n // ==========================================================================\n const renderContent = () => {\n // Determine if status indicator should show\n const hasStatus = showStatus && status !== 'normal' && status !== 'off';\n \n switch (variant) {\n // ======================================================================\n // INLINE: Icon + Label ... Value (space-between)\n // Best for: Key-value pairs in tables or lists\n // ======================================================================\n case 'inline': {\n return (\n <div style={{ \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'space-between', \n gap: sizeConfig.gap * 2,\n minHeight: sizeConfig.iconSize, // Ensure consistent row height\n }}>\n <div style={{ \n display: 'flex', \n alignItems: 'center', \n gap: sizeConfig.gap,\n }}>\n {showIcon && config.icon && (\n <IconWithBadge\n icon={config.icon}\n iconSize={sizeConfig.iconSize}\n iconColor={hasStatus ? statusColor : tokens.colors.text.tertiary}\n showBadge={hasStatus}\n status={status}\n statusColor={statusColor}\n isLightTheme={isLightTheme}\n />\n )}\n <span style={{\n fontSize: sizeConfig.labelSize,\n lineHeight: sizeConfig.lineHeight,\n color: tokens.colors.text.secondary,\n fontWeight: 500,\n fontFamily: tokens.typography.fontFamily.primary,\n }}>\n {config.label}\n </span>\n </div>\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500, // Match SpacecraftCard DataCell\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}>\n {formattedValue}\n </span>\n </div>\n );\n }\n\n // ======================================================================\n // COMPACT: Icon + Value (horizontal, no label)\n // Best for: Dense displays, status bars, compact dashboards\n // ======================================================================\n case 'compact': {\n return (\n <div style={{ \n display: 'flex', \n alignItems: 'center', \n gap: sizeConfig.gap,\n minHeight: sizeConfig.iconSize,\n }}>\n {showIcon && config.icon && (\n <IconWithBadge\n icon={config.icon}\n iconSize={sizeConfig.iconSize}\n iconColor={hasStatus ? statusColor : tokens.colors.text.tertiary}\n showBadge={hasStatus}\n status={status}\n statusColor={statusColor}\n isLightTheme={isLightTheme}\n />\n )}\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500, // Match SpacecraftCard DataCell\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}>\n {formattedValue}\n </span>\n </div>\n );\n }\n\n // ======================================================================\n // MINIMAL: Value only (no icon, no label)\n // Best for: Inline values, table cells\n // ======================================================================\n case 'minimal':\n return (\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500, // Match SpacecraftCard DataCell\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}>\n {formattedValue}\n </span>\n );\n\n // ======================================================================\n // CARD: Icon EXACTLY matches 2-row text height\n // Best for: Dashboard tiles, prominent metrics\n // ======================================================================\n case 'card': {\n // ═══════════════════════════════════════════════════════════════════════════\n // 2-ROW LAYOUT CONTROLS (card variant)\n // ═══════════════════════════════════════════════════════════════════════════\n // ICON MULTIPLIER: Scale factor (0.5 = half, 1.0 = match text height, 1.5 = 150%)\n const iconMultiplier = 0.7;\n \n // GAP: Pixels between icon and text column\n const iconToTextGap = 4; // px\n \n // ═══════════════════════════════════════════════════════════════════════════\n const baseSize = { sm: 26, md: 32, lg: 40 }[size];\n const iconSize = Math.round(baseSize * iconMultiplier);\n \n return (\n <div style={{ \n display: 'flex', \n alignItems: 'center',\n gap: iconToTextGap,\n }}>\n {showIcon && config.icon && (\n <IconWithBadge\n icon={config.icon}\n iconSize={iconSize}\n iconColor={hasStatus ? statusColor : tokens.colors.text.tertiary}\n showBadge={hasStatus}\n status={status}\n statusColor={statusColor}\n isLightTheme={isLightTheme}\n />\n )}\n <div style={{ \n display: 'flex', \n flexDirection: 'column', \n justifyContent: 'space-between', // Distribute label/value to edges\n gap: sizeConfig.rowGap, \n minWidth: 0,\n }}>\n <span style={{\n fontSize: sizeConfig.labelSize,\n lineHeight: sizeConfig.lineHeight,\n color: tokens.colors.text.secondary,\n fontWeight: 500,\n fontFamily: tokens.typography.fontFamily.primary,\n }}>\n {config.label}\n </span>\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500, // Match SpacecraftCard DataCell\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}>\n {formattedValue}\n </span>\n </div>\n </div>\n );\n }\n\n // ======================================================================\n // BANNER: Label on top, icon left-aligned + value right-aligned below\n // Best for: TopBar metrics, KPI tiles where heading spans full width\n // ======================================================================\n case 'banner': {\n const bannerIconSize = { sm: 18, md: 22, lg: 28 }[size];\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: sizeConfig.rowGap, minWidth: 0, width: '100%' }}>\n <span style={{\n fontSize: sizeConfig.labelSize,\n lineHeight: sizeConfig.lineHeight,\n color: tokens.colors.text.secondary,\n fontWeight: 500,\n fontFamily: tokens.typography.fontFamily.primary,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.5px',\n }}>\n {config.label}\n </span>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n width: '100%',\n gap: 6,\n minWidth: 0,\n }}>\n {showIcon && config.icon && (\n <IconWithBadge\n icon={config.icon}\n iconSize={bannerIconSize}\n iconColor={hasStatus ? statusColor : tokens.colors.text.tertiary}\n showBadge={hasStatus}\n status={status}\n statusColor={statusColor}\n isLightTheme={isLightTheme}\n />\n )}\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 600,\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n textAlign: 'left',\n }}>\n {formattedValue}\n </span>\n </div>\n </div>\n );\n }\n\n // ======================================================================\n // STACKED (default): Icon EXACTLY matches 2-row text height\n // Best for: General telemetry displays, standard data values\n // ======================================================================\n case 'stacked':\n default: {\n // ═══════════════════════════════════════════════════════════════════════════\n // 2-ROW LAYOUT CONTROLS (stacked variant)\n // ═══════════════════════════════════════════════════════════════════════════\n // ICON MULTIPLIER: Scale factor (0.5 = half, 1.0 = match text height, 1.5 = 150%)\n const iconMultiplier = 0.7;\n \n // GAP: Pixels between icon and text column\n const iconToTextGap = 4; // px\n \n // ═══════════════════════════════════════════════════════════════════════════\n const baseSize = { sm: 26, md: 32, lg: 40 }[size];\n const iconSize = Math.round(baseSize * iconMultiplier);\n \n return (\n <div style={{ \n display: 'flex', \n alignItems: 'center',\n gap: iconToTextGap,\n }}>\n {showIcon && config.icon && (\n <IconWithBadge\n icon={config.icon}\n iconSize={iconSize}\n iconColor={hasStatus ? statusColor : tokens.colors.text.tertiary}\n showBadge={hasStatus}\n status={status}\n statusColor={statusColor}\n isLightTheme={isLightTheme}\n />\n )}\n <div style={{ \n display: 'flex', \n flexDirection: 'column', \n justifyContent: 'space-between', // Distribute label/value to edges\n gap: sizeConfig.rowGap, \n minWidth: 0,\n }}>\n <span style={{\n fontSize: sizeConfig.labelSize,\n lineHeight: sizeConfig.lineHeight,\n color: tokens.colors.text.secondary,\n fontWeight: 500,\n fontFamily: tokens.typography.fontFamily.primary,\n }}>\n {config.label}\n </span>\n <span style={{\n fontSize: sizeConfig.valueSize,\n lineHeight: sizeConfig.lineHeight,\n fontWeight: 500, // Match SpacecraftCard DataCell\n fontFamily: tokens.typography.fontFamily.mono,\n fontVariantNumeric: 'tabular-nums',\n color: valueColor,\n }}>\n {formattedValue}\n </span>\n </div>\n </div>\n );\n }\n }\n };\n\n return (\n <div\n className={`zendir-data-value zendir-data-value--${variant} zendir-data-value--${size} ${className}`}\n style={{\n cursor: onClick ? 'pointer' : 'default',\n ...(variant === 'banner' ? { flex: 1, minWidth: 0 } : {}),\n ...style,\n }}\n onClick={onClick}\n title={tooltip || config.description}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={onClick ? (e) => e.key === 'Enter' && onClick() : undefined}\n >\n {renderContent()}\n </div>\n );\n});\n\n// =============================================================================\n// DataValueGroup Component\n// =============================================================================\n\nexport interface DataValueGroupProps {\n /** Title for the group */\n title?: string;\n /** Icon for the title */\n icon?: AstroIconName;\n /** Layout direction */\n direction?: 'row' | 'column' | 'grid';\n /** Number of columns for grid layout */\n columns?: number;\n /** Gap between items */\n gap?: 'sm' | 'md' | 'lg';\n /** Children DataValue components */\n children: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Custom inline styles */\n style?: React.CSSProperties;\n}\n\nexport const DataValueGroup = memo(function DataValueGroup({\n title,\n icon,\n direction = 'grid',\n columns = 2,\n gap = 'md',\n children,\n className = '',\n style,\n}: DataValueGroupProps): React.ReactElement {\n const { tokens } = useTheme();\n\n // Gap sizing on 4px grid\n const gapSize = {\n sm: 8, // 2 × 4px\n md: 16, // 4 × 4px\n lg: 24, // 6 × 4px\n }[gap];\n\n const layoutStyles: Record<typeof direction, React.CSSProperties> = {\n row: { \n display: 'flex', \n flexDirection: 'row' as const, \n flexWrap: 'wrap' as const, \n gap: gapSize,\n alignItems: 'flex-start',\n },\n column: { \n display: 'flex', \n flexDirection: 'column' as const, \n gap: gapSize,\n },\n grid: { \n display: 'grid', \n gridTemplateColumns: `repeat(${columns}, 1fr)`, \n gap: gapSize,\n alignItems: 'start',\n },\n };\n const layoutStyle = layoutStyles[direction];\n\n return (\n <div className={`zendir-data-value-group ${className}`} style={style}>\n {title && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 6, // 6px gap for tight header\n marginBottom: 12, // 3 × 4px\n paddingBottom: 8, // 2 × 4px\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n }}>\n {icon && (\n <AstroIcon \n name={icon} \n size={14} \n color={tokens.colors.text.tertiary}\n style={{ flexShrink: 0 }}\n />\n )}\n <span style={{\n fontSize: '12px',\n fontWeight: 500,\n color: tokens.colors.text.secondary,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}>\n {title}\n </span>\n </div>\n )}\n <div style={layoutStyle}>\n {children}\n </div>\n </div>\n );\n});\n\nexport default DataValue;\n"],"names":["IconWithBadge","DataValue","DataValueGroup"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
|
|
3
|
+
export type DialogSize = 'small' | 'medium' | 'large' | 'fullscreen';
|
|
4
|
+
export interface DialogProps {
|
|
5
|
+
/** Open state */
|
|
6
|
+
open: boolean;
|
|
7
|
+
/** Close handler */
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
/** Dialog title */
|
|
10
|
+
title?: string;
|
|
11
|
+
/** Size variant */
|
|
12
|
+
size?: DialogSize;
|
|
13
|
+
/** Show close button */
|
|
14
|
+
showCloseButton?: boolean;
|
|
15
|
+
/** Close on backdrop click */
|
|
16
|
+
closeOnBackdropClick?: boolean;
|
|
17
|
+
/** Close on escape key */
|
|
18
|
+
closeOnEscape?: boolean;
|
|
19
|
+
/** Children */
|
|
20
|
+
children: React.ReactNode;
|
|
21
|
+
/** Custom className */
|
|
22
|
+
className?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface DialogActionsProps {
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
align?: 'left' | 'center' | 'right';
|
|
27
|
+
}
|
|
28
|
+
declare const DialogActions: React.NamedExoticComponent<DialogActionsProps>;
|
|
29
|
+
export declare const Dialog: React.NamedExoticComponent<DialogProps> & {
|
|
30
|
+
Actions: typeof DialogActions;
|
|
31
|
+
};
|
|
32
|
+
export default Dialog;
|