@zendir/ui 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +419 -386
- package/README.md +640 -631
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/index.js +17 -221
- package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
- package/dist/react/3d/CesiumCaptureSource.js +364 -283
- package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
- package/dist/react/3d/ZenSpace3D.d.ts +2 -3
- package/dist/react/3d/ZenSpace3D.js +1681 -1237
- package/dist/react/3d/ZenSpace3D.js.map +1 -1
- package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DCesium.js +513 -560
- package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
- package/dist/react/3d/ZenSpace3DShaders.js +61 -66
- package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
- package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
- package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DUtils.js +37 -24
- package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
- package/dist/react/3d/capturePngAnalysis.js +42 -36
- package/dist/react/3d/capturePngAnalysis.js.map +1 -1
- package/dist/react/3d/index.d.ts +3 -3
- package/dist/react/3d/index.js +5 -53
- package/dist/react/3d/threeLoader.d.ts +1 -1
- package/dist/react/3d/threeLoader.js +23 -18
- package/dist/react/3d/threeLoader.js.map +1 -1
- package/dist/react/astro/ClassificationBanner.d.ts +2 -3
- package/dist/react/astro/ClassificationBanner.js +95 -79
- package/dist/react/astro/ClassificationBanner.js.map +1 -1
- package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
- package/dist/react/astro/GlobalStatusBar.js +157 -163
- package/dist/react/astro/GlobalStatusBar.js.map +1 -1
- package/dist/react/astro/MissionClock.d.ts +7 -8
- package/dist/react/astro/MissionClock.js +377 -400
- package/dist/react/astro/MissionClock.js.map +1 -1
- package/dist/react/astro/MonitoringIcon.d.ts +1 -2
- package/dist/react/astro/MonitoringIcon.js +422 -358
- package/dist/react/astro/MonitoringIcon.js.map +1 -1
- package/dist/react/astro/Notification.d.ts +1 -2
- package/dist/react/astro/Notification.js +229 -126
- package/dist/react/astro/Notification.js.map +1 -1
- package/dist/react/astro/Progress.d.ts +0 -1
- package/dist/react/astro/Progress.js +199 -141
- package/dist/react/astro/Progress.js.map +1 -1
- package/dist/react/astro/SimulationControls.d.ts +3 -4
- package/dist/react/astro/SimulationControls.js +596 -650
- package/dist/react/astro/SimulationControls.js.map +1 -1
- package/dist/react/astro/StatusIndicator.d.ts +0 -1
- package/dist/react/astro/StatusIndicator.js +236 -170
- package/dist/react/astro/StatusIndicator.js.map +1 -1
- package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
- package/dist/react/astro/UnifiedTimeline.js +2345 -2392
- package/dist/react/astro/UnifiedTimeline.js.map +1 -1
- package/dist/react/astro/index.d.ts +5 -5
- package/dist/react/astro/index.js +1 -25
- package/dist/react/cards/AccessCard.d.ts +0 -1
- package/dist/react/cards/AccessCard.js +471 -405
- package/dist/react/cards/AccessCard.js.map +1 -1
- package/dist/react/cards/OrbitCard.d.ts +0 -1
- package/dist/react/cards/OrbitCard.js +487 -364
- package/dist/react/cards/OrbitCard.js.map +1 -1
- package/dist/react/cards/SpacecraftCard.d.ts +0 -1
- package/dist/react/cards/SpacecraftCard.js +813 -925
- package/dist/react/cards/SpacecraftCard.js.map +1 -1
- package/dist/react/cards/TelemetryCard.d.ts +0 -1
- package/dist/react/cards/TelemetryCard.js +1055 -732
- package/dist/react/cards/TelemetryCard.js.map +1 -1
- package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
- package/dist/react/cards/TelemetryStreamCard.js +323 -297
- package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
- package/dist/react/cards/index.d.ts +1 -1
- package/dist/react/cards/index.js +1 -8
- package/dist/react/charts/GroundTrackMap.d.ts +6 -7
- package/dist/react/charts/GroundTrackMap.js +1377 -1256
- package/dist/react/charts/GroundTrackMap.js.map +1 -1
- package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
- package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
- package/dist/react/charts/index.d.ts +1 -1
- package/dist/react/charts/index.js +7 -100
- package/dist/react/charts/unified/AstroChart.d.ts +1 -2
- package/dist/react/charts/unified/AstroChart.js +1331 -1411
- package/dist/react/charts/unified/AstroChart.js.map +1 -1
- package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
- package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
- package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
- package/dist/react/charts/unified/domain.d.ts +12 -13
- package/dist/react/charts/unified/domain.js +3999 -3145
- package/dist/react/charts/unified/domain.js.map +1 -1
- package/dist/react/charts/unified/generators.d.ts +3 -4
- package/dist/react/charts/unified/generators.js +561 -498
- package/dist/react/charts/unified/generators.js.map +1 -1
- package/dist/react/charts/unified/index.d.ts +1 -1
- package/dist/react/charts/unified/presets.d.ts +14 -15
- package/dist/react/charts/unified/presets.js +857 -994
- package/dist/react/charts/unified/presets.js.map +1 -1
- package/dist/react/charts/unified/sync.d.ts +2 -3
- package/dist/react/charts/unified/sync.js +229 -195
- package/dist/react/charts/unified/sync.js.map +1 -1
- package/dist/react/charts/unified/theme.d.ts +11 -12
- package/dist/react/charts/unified/theme.js +606 -642
- package/dist/react/charts/unified/theme.js.map +1 -1
- package/dist/react/charts/unified/types.d.ts +32 -33
- package/dist/react/charts/unified/useChartStream.d.ts +1 -2
- package/dist/react/charts/unified/useChartStream.js +203 -216
- package/dist/react/charts/unified/useChartStream.js.map +1 -1
- package/dist/react/chatgpt/AppCard.d.ts +1 -2
- package/dist/react/chatgpt/index.d.ts +7 -7
- package/dist/react/chatgpt/index.js +160 -139
- package/dist/react/chatgpt/index.js.map +1 -1
- package/dist/react/context/CategoryContext.d.ts +0 -1
- package/dist/react/context/CategoryContext.js +78 -29
- package/dist/react/context/CategoryContext.js.map +1 -1
- package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
- package/dist/react/context/DisplaySettingsContext.js +205 -156
- package/dist/react/context/DisplaySettingsContext.js.map +1 -1
- package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
- package/dist/react/context/SpatialSelectionContext.js +36 -7
- package/dist/react/context/SpatialSelectionContext.js.map +1 -1
- package/dist/react/core/data/DataTable.d.ts +3 -4
- package/dist/react/core/data/DataTable.js +473 -440
- package/dist/react/core/data/DataTable.js.map +1 -1
- package/dist/react/core/data/DataValue.d.ts +4 -5
- package/dist/react/core/data/DataValue.js +605 -571
- package/dist/react/core/data/DataValue.js.map +1 -1
- package/dist/react/core/data/propertyConfig.d.ts +1 -2
- package/dist/react/core/data/propertyConfig.js +446 -382
- package/dist/react/core/data/propertyConfig.js.map +1 -1
- package/dist/react/core/display/AstroIcon.d.ts +4 -5
- package/dist/react/core/display/AstroIcon.js +339 -429
- package/dist/react/core/display/AstroIcon.js.map +1 -1
- package/dist/react/core/display/Badge.d.ts +2 -3
- package/dist/react/core/display/Badge.js +131 -131
- package/dist/react/core/display/Badge.js.map +1 -1
- package/dist/react/core/display/CardHeader.d.ts +0 -1
- package/dist/react/core/display/CardHeader.js +398 -311
- package/dist/react/core/display/CardHeader.js.map +1 -1
- package/dist/react/core/display/Container.d.ts +2 -3
- package/dist/react/core/display/Container.js +640 -668
- package/dist/react/core/display/Container.js.map +1 -1
- package/dist/react/core/display/CopyButton.d.ts +1 -2
- package/dist/react/core/display/CopyButton.js +158 -101
- package/dist/react/core/display/CopyButton.js.map +1 -1
- package/dist/react/core/display/GlassCard.d.ts +3 -4
- package/dist/react/core/display/GlassCard.js +416 -369
- package/dist/react/core/display/GlassCard.js.map +1 -1
- package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
- package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
- package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
- package/dist/react/core/display/Icon.d.ts +2 -3
- package/dist/react/core/display/Icon.js +172 -143
- package/dist/react/core/display/Icon.js.map +1 -1
- package/dist/react/core/display/Typography.d.ts +24 -25
- package/dist/react/core/display/Typography.js +360 -178
- package/dist/react/core/display/Typography.js.map +1 -1
- package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
- package/dist/react/core/feedback/ConfirmDialog.js +343 -304
- package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
- package/dist/react/core/feedback/Dialog.d.ts +2 -3
- package/dist/react/core/feedback/Dialog.js +189 -197
- package/dist/react/core/feedback/Dialog.js.map +1 -1
- package/dist/react/core/feedback/Toast.d.ts +2 -3
- package/dist/react/core/feedback/Toast.js +346 -207
- package/dist/react/core/feedback/Toast.js.map +1 -1
- package/dist/react/core/index.d.ts +26 -26
- package/dist/react/core/index.js +7 -119
- package/dist/react/core/inputs/Button.d.ts +2 -3
- package/dist/react/core/inputs/Button.js +281 -304
- package/dist/react/core/inputs/Button.js.map +1 -1
- package/dist/react/core/inputs/Checkbox.d.ts +2 -3
- package/dist/react/core/inputs/Checkbox.js +139 -127
- package/dist/react/core/inputs/Checkbox.js.map +1 -1
- package/dist/react/core/inputs/Input.d.ts +3 -4
- package/dist/react/core/inputs/Input.js +277 -285
- package/dist/react/core/inputs/Input.js.map +1 -1
- package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
- package/dist/react/core/inputs/LimitsBar.js +271 -196
- package/dist/react/core/inputs/LimitsBar.js.map +1 -1
- package/dist/react/core/inputs/NumberInput.d.ts +2 -3
- package/dist/react/core/inputs/NumberInput.js +531 -503
- package/dist/react/core/inputs/NumberInput.js.map +1 -1
- package/dist/react/core/inputs/PinInput.d.ts +2 -3
- package/dist/react/core/inputs/PinInput.js +224 -207
- package/dist/react/core/inputs/PinInput.js.map +1 -1
- package/dist/react/core/inputs/Select.d.ts +1 -2
- package/dist/react/core/inputs/Select.js +298 -299
- package/dist/react/core/inputs/Select.js.map +1 -1
- package/dist/react/core/inputs/Toggle.d.ts +2 -3
- package/dist/react/core/inputs/Toggle.js +142 -148
- package/dist/react/core/inputs/Toggle.js.map +1 -1
- package/dist/react/core/layout/Box.d.ts +3 -4
- package/dist/react/core/layout/Box.js +118 -122
- package/dist/react/core/layout/Box.js.map +1 -1
- package/dist/react/core/layout/Center.d.ts +0 -1
- package/dist/react/core/layout/Center.js +45 -32
- package/dist/react/core/layout/Center.js.map +1 -1
- package/dist/react/core/layout/Divider.d.ts +1 -2
- package/dist/react/core/layout/Divider.js +112 -106
- package/dist/react/core/layout/Divider.js.map +1 -1
- package/dist/react/core/layout/Flex.d.ts +4 -5
- package/dist/react/core/layout/Flex.js +120 -124
- package/dist/react/core/layout/Flex.js.map +1 -1
- package/dist/react/core/layout/Grid.d.ts +5 -6
- package/dist/react/core/layout/Grid.js +131 -138
- package/dist/react/core/layout/Grid.js.map +1 -1
- package/dist/react/core/layout/Spacer.d.ts +0 -1
- package/dist/react/core/layout/Spacer.js +36 -29
- package/dist/react/core/layout/Spacer.js.map +1 -1
- package/dist/react/core/layout/Stack.d.ts +4 -5
- package/dist/react/core/layout/Stack.js +127 -70
- package/dist/react/core/layout/Stack.js.map +1 -1
- package/dist/react/core/layout/responsive.d.ts +1 -2
- package/dist/react/core/layout/responsive.js +25 -19
- package/dist/react/core/layout/responsive.js.map +1 -1
- package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
- package/dist/react/core/layout/useBreakpoint.js +119 -66
- package/dist/react/core/layout/useBreakpoint.js.map +1 -1
- package/dist/react/core/navigation/AppBar.d.ts +1 -2
- package/dist/react/core/navigation/AppBar.js +827 -805
- package/dist/react/core/navigation/AppBar.js.map +1 -1
- package/dist/react/core/navigation/Pagination.d.ts +2 -3
- package/dist/react/core/navigation/Pagination.js +207 -187
- package/dist/react/core/navigation/Pagination.js.map +1 -1
- package/dist/react/core/navigation/SideNav.d.ts +5 -6
- package/dist/react/core/navigation/SideNav.js +855 -629
- package/dist/react/core/navigation/SideNav.js.map +1 -1
- package/dist/react/core/navigation/Tabs.d.ts +0 -1
- package/dist/react/core/navigation/Tabs.js +113 -119
- package/dist/react/core/navigation/Tabs.js.map +1 -1
- package/dist/react/core/overlays/Popover.d.ts +2 -3
- package/dist/react/core/overlays/Popover.js +303 -282
- package/dist/react/core/overlays/Popover.js.map +1 -1
- package/dist/react/core/overlays/SidePanel.d.ts +1 -2
- package/dist/react/core/overlays/SidePanel.js +217 -212
- package/dist/react/core/overlays/SidePanel.js.map +1 -1
- package/dist/react/core/overlays/Tooltip.d.ts +1 -2
- package/dist/react/core/overlays/Tooltip.js +170 -176
- package/dist/react/core/overlays/Tooltip.js.map +1 -1
- package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
- package/dist/react/core/widgets/ActivityPlanner.js +855 -517
- package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
- package/dist/react/core/widgets/Capture.d.ts +2 -3
- package/dist/react/core/widgets/Capture.js +965 -779
- package/dist/react/core/widgets/Capture.js.map +1 -1
- package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
- package/dist/react/core/widgets/ChatPanel.js +1734 -1034
- package/dist/react/core/widgets/ChatPanel.js.map +1 -1
- package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
- package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
- package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
- package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
- package/dist/react/core/widgets/CommandBuilder.js +624 -516
- package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
- package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
- package/dist/react/core/widgets/ConnectionForm.js +528 -492
- package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
- package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
- package/dist/react/core/widgets/FileExplorer.js +617 -505
- package/dist/react/core/widgets/FileExplorer.js.map +1 -1
- package/dist/react/core/widgets/HexViewer.d.ts +2 -3
- package/dist/react/core/widgets/HexViewer.js +1353 -1091
- package/dist/react/core/widgets/HexViewer.js.map +1 -1
- package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
- package/dist/react/core/widgets/ImageFrame.js +230 -193
- package/dist/react/core/widgets/ImageFrame.js.map +1 -1
- package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
- package/dist/react/core/widgets/ImageGallery.js +380 -314
- package/dist/react/core/widgets/ImageGallery.js.map +1 -1
- package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
- package/dist/react/core/widgets/ImagePanel.js +110 -101
- package/dist/react/core/widgets/ImagePanel.js.map +1 -1
- package/dist/react/core/widgets/LogViewer.d.ts +2 -3
- package/dist/react/core/widgets/LogViewer.js +711 -607
- package/dist/react/core/widgets/LogViewer.js.map +1 -1
- package/dist/react/core/widgets/MessageStream.d.ts +3 -4
- package/dist/react/core/widgets/MessageStream.js +514 -444
- package/dist/react/core/widgets/MessageStream.js.map +1 -1
- package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
- package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
- package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
- package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
- package/dist/react/core/widgets/PacketViewer.js +550 -421
- package/dist/react/core/widgets/PacketViewer.js.map +1 -1
- package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
- package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
- package/dist/react/hooks/index.d.ts +5 -5
- package/dist/react/hooks/useAccessWindows.d.ts +0 -1
- package/dist/react/hooks/useCompactMode.d.ts +1 -1
- package/dist/react/hooks/useCompactMode.js +104 -58
- package/dist/react/hooks/useCompactMode.js.map +1 -1
- package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
- package/dist/react/hooks/useSimulationScene.d.ts +1 -2
- package/dist/react/hooks/useSimulationScene.js +481 -374
- package/dist/react/hooks/useSimulationScene.js.map +1 -1
- package/dist/react/index.d.ts +3 -3
- package/dist/react/panels/LayerControlPanel.d.ts +1 -2
- package/dist/react/panels/LayerControlPanel.js +223 -180
- package/dist/react/panels/LayerControlPanel.js.map +1 -1
- package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
- package/dist/react/panels/ObjectInventoryPanel.js +315 -250
- package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
- package/dist/react/panels/index.d.ts +1 -1
- package/dist/react/panels/index.js +1 -6
- package/dist/react/shared/ErrorBoundary.d.ts +1 -2
- package/dist/react/shared/ErrorBoundary.js +170 -139
- package/dist/react/shared/ErrorBoundary.js.map +1 -1
- package/dist/react/shared/Skeleton.d.ts +1 -2
- package/dist/react/shared/Skeleton.js +300 -301
- package/dist/react/shared/Skeleton.js.map +1 -1
- package/dist/react/theme/ThemeProvider.d.ts +2 -321
- package/dist/react/theme/ThemeProvider.js +313 -939
- package/dist/react/theme/ThemeProvider.js.map +1 -1
- package/dist/react/theme/cardAccent.d.ts +1 -2
- package/dist/react/theme/cardAccent.js +196 -126
- package/dist/react/theme/cardAccent.js.map +1 -1
- package/dist/react/theme/config.d.ts +0 -1
- package/dist/react/theme/config.js +47 -25
- package/dist/react/theme/config.js.map +1 -1
- package/dist/react/theme/index.d.ts +2 -2
- package/dist/react/theme/index.js +1 -16
- package/dist/react/theme/types.d.ts +332 -0
- package/dist/react/theme/types.js +39 -0
- package/dist/react/theme/types.js.map +1 -0
- package/dist/react/types.d.ts +8 -8
- package/dist/react/types.js +147 -47
- package/dist/react/types.js.map +1 -1
- package/dist/react/utils/categoryPalette.d.ts +0 -1
- package/dist/react/utils/categoryPalette.js +91 -102
- package/dist/react/utils/categoryPalette.js.map +1 -1
- package/dist/react/utils/index.d.ts +5 -5
- package/dist/react/utils/index.js +457 -371
- package/dist/react/utils/index.js.map +1 -1
- package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
- package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
- package/dist/react/visualizations/NavBallCard.d.ts +0 -1
- package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
- package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
- package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
- package/dist/react/visualizations/index.d.ts +3 -3
- package/dist/react.d.ts +2 -1
- package/dist/react.js +17 -221
- package/dist/shaders/atmosphere.frag.js +6 -5
- package/dist/shaders/atmosphere.frag.js.map +1 -1
- package/dist/shaders/atmosphere.vert.js +6 -5
- package/dist/shaders/atmosphere.vert.js.map +1 -1
- package/dist/shaders/stars.frag.js +6 -5
- package/dist/shaders/stars.frag.js.map +1 -1
- package/dist/shaders/stars.vert.js +6 -5
- package/dist/shaders/stars.vert.js.map +1 -1
- package/dist/style.css +26 -3
- package/dist/tokens/core.d.ts +159 -0
- package/dist/tokens/core.js +144 -0
- package/dist/tokens/core.js.map +1 -0
- package/dist/tokens/css-vars.d.ts +213 -2
- package/dist/tokens/css-vars.js +590 -227
- package/dist/tokens/css-vars.js.map +1 -1
- package/dist/tokens/index.d.ts +31 -228
- package/dist/tokens/index.js +281 -366
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/palettes/astro.d.ts +129 -0
- package/dist/tokens/palettes/astro.js +112 -0
- package/dist/tokens/palettes/astro.js.map +1 -0
- package/dist/tokens/palettes/index.d.ts +288 -0
- package/dist/tokens/palettes/index.js +35 -0
- package/dist/tokens/palettes/index.js.map +1 -0
- package/dist/tokens/palettes/tailwind.d.ts +324 -0
- package/dist/tokens/palettes/tailwind.js +201 -0
- package/dist/tokens/palettes/tailwind.js.map +1 -0
- package/dist/tokens/palettes/zendir.d.ts +126 -0
- package/dist/tokens/palettes/zendir.js +92 -0
- package/dist/tokens/palettes/zendir.js.map +1 -0
- package/dist/tokens/themes.d.ts +30 -0
- package/dist/tokens/themes.js +704 -0
- package/dist/tokens/themes.js.map +1 -0
- package/dist/tokens/tokens.css +533 -155
- package/dist/types/index.d.ts +2 -2
- package/package.json +310 -313
- package/dist/index.js.map +0 -1
- package/dist/react/3d/index.js.map +0 -1
- package/dist/react/astro/index.js.map +0 -1
- package/dist/react/cards/index.js.map +0 -1
- package/dist/react/charts/index.js.map +0 -1
- package/dist/react/core/index.js.map +0 -1
- package/dist/react/panels/index.js.map +0 -1
- package/dist/react/theme/astro-tokens.d.ts +0 -153
- package/dist/react/theme/index.js.map +0 -1
- package/dist/react.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageStream.js","sources":["../../../../src/react/core/widgets/MessageStream.tsx"],"sourcesContent":["/**\n * @zendir/ui - MessageStream Component\n * \n * Stream/notification window for displaying messages, events, or status updates.\n * Each message card has integrated status system with dual-coding (color + shape).\n * \n * AstroUXDS Compliance:\n * - Status colors per AstroUXDS status system\n * - Dual-coding (color + shape) for accessibility\n * - Clear visual hierarchy\n * - Proper contrast ratios\n * \n * @example\n * ```tsx\n * import { MessageStream } from '@zendir/ui';\n * \n * <MessageStream\n * title=\"Response Status\"\n * messages={[\n * { id: '1', text: 'Message Received', status: 'standby' },\n * { id: '2', text: 'Confirmation Receipt', status: 'normal' },\n * { id: '3', text: 'Failed', status: 'critical' },\n * ]}\n * />\n * ```\n */\n\nimport React, { memo, useMemo } from 'react';\nimport { useTheme } from '../../theme';\nimport { classNames, type StatusLevel } from '../../utils';\nimport { type AstroIconName } from '../display/AstroIcon';\nimport { Icon } from '../display/Icon';\nimport { useCompactMode } from '../../hooks';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface StreamMessage {\n /** Unique identifier */\n id: string;\n /** Message text/label */\n text: string;\n /** Status level for color and shape */\n status?: StatusLevel;\n /** Optional timestamp */\n timestamp?: Date | string;\n /** Optional icon override */\n icon?: AstroIconName;\n /** Optional metadata/details */\n details?: string;\n /** Child messages (for hierarchical display) */\n children?: StreamMessage[];\n /** Whether this message is highlighted/active */\n active?: boolean;\n}\n\nexport interface MessageStreamProps {\n /** Stream title */\n title?: string;\n /** Subtitle or description */\n subtitle?: string;\n /** Array of messages to display */\n messages: StreamMessage[];\n /** Maximum height before scrolling */\n maxHeight?: number | string;\n /** Show timestamps */\n showTimestamps?: boolean;\n /** Time format for timestamps */\n timeFormat?: 'relative' | 'absolute' | 'time-only';\n /** Variant: 'list' for vertical, 'tree' for hierarchical */\n variant?: 'list' | 'tree' | 'compact';\n /** Custom className */\n className?: string;\n /** Card size */\n size?: 'sm' | 'md' | 'lg';\n /** On message click */\n onMessageClick?: (message: StreamMessage) => void;\n /** Loading state */\n loading?: boolean;\n /** Empty state message */\n emptyMessage?: string;\n /** Show connection lines (tree variant) */\n showConnectors?: boolean;\n /** Enable collapsible compact mode - shows condensed view that expands on hover/click */\n collapsible?: boolean;\n /** Start expanded when in collapsible mode (pinned state) */\n defaultExpanded?: boolean;\n /** Callback when pin state changes in collapsible mode */\n onPinChange?: (isPinned: boolean) => void;\n}\n\n// =============================================================================\n// Status Shapes (same as DataValue for consistency)\n// =============================================================================\n\nconst STATUS_SHAPES: Record<StatusLevel, (size: number, color: string) => React.ReactNode> = {\n off: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\n </svg>\n ),\n standby: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />\n </svg>\n ),\n normal: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\n </svg>\n ),\n caution: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\n </svg>\n ),\n serious: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\n </svg>\n ),\n critical: (size, color) => (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\n </svg>\n ),\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\nfunction getStatusColor(status: StatusLevel | undefined, tokens: any): string {\n switch (status) {\n case 'normal': return tokens.colors.status.normal;\n case 'standby': return tokens.colors.status.standby;\n case 'caution': return tokens.colors.status.caution;\n case 'serious': return tokens.colors.status.serious;\n case 'critical': return tokens.colors.status.critical;\n case 'off': return tokens.colors.status.off;\n default: return tokens.colors.status.standby;\n }\n}\n\nfunction formatTimestamp(\n timestamp: Date | string | undefined,\n format: 'relative' | 'absolute' | 'time-only'\n): string {\n if (!timestamp) return '';\n \n const date = typeof timestamp === 'string' ? new Date(timestamp) : timestamp;\n \n if (format === 'relative') {\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n const seconds = Math.floor(diff / 1000);\n const minutes = Math.floor(seconds / 60);\n const hours = Math.floor(minutes / 60);\n \n if (seconds < 60) return 'Just now';\n if (minutes < 60) return `${minutes}m ago`;\n if (hours < 24) return `${hours}h ago`;\n return date.toLocaleDateString();\n }\n \n if (format === 'time-only') {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n }\n \n return date.toLocaleString();\n}\n\n// =============================================================================\n// Message Card Component\n// =============================================================================\n\ninterface MessageCardProps {\n message: StreamMessage;\n tokens: any;\n size: 'sm' | 'md' | 'lg';\n showTimestamp: boolean;\n timeFormat: 'relative' | 'absolute' | 'time-only';\n onClick?: (message: StreamMessage) => void;\n variant: 'list' | 'tree' | 'compact';\n}\n\nconst MessageCard = memo(function MessageCard({\n message,\n tokens,\n size,\n showTimestamp,\n timeFormat,\n onClick,\n variant,\n}: MessageCardProps) {\n const status = message.status || 'standby';\n const statusColor = getStatusColor(status, tokens);\n \n const sizeConfig = {\n sm: { padding: 8, fontSize: '0.75rem', fontSizeSmall: '0.625rem', iconSize: 10, gap: 6 }, // 12px / 10px in rem\n md: { padding: 12, fontSize: '0.875rem', fontSizeSmall: '0.75rem', iconSize: 12, gap: 8 }, // 14px / 12px in rem\n lg: { padding: 16, fontSize: '1rem', fontSizeSmall: '0.875rem', iconSize: 14, gap: 10 }, // 16px / 14px in rem\n }[size];\n \n const isCompact = variant === 'compact';\n \n return (\n <div\n role=\"listitem\"\n aria-label={`${message.text} - ${status}`}\n onClick={() => onClick?.(message)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: sizeConfig.gap,\n padding: isCompact ? `${sizeConfig.padding / 2}px ${sizeConfig.padding}px` : sizeConfig.padding,\n backgroundColor: tokens.colors.background.elevated,\n border: `1.5px solid ${statusColor}`,\n borderRadius: tokens.borderRadius.md,\n cursor: onClick ? 'pointer' : 'default',\n transition: 'all 0.15s ease',\n ...(message.active && {\n boxShadow: `0 0 0 2px ${statusColor}40`,\n }),\n }}\n onMouseEnter={(e) => {\n if (onClick) {\n e.currentTarget.style.backgroundColor = tokens.colors.background.surface;\n e.currentTarget.style.transform = 'translateY(-1px)';\n }\n }}\n onMouseLeave={(e) => {\n if (onClick) {\n e.currentTarget.style.backgroundColor = tokens.colors.background.elevated;\n e.currentTarget.style.transform = 'translateY(0)';\n }\n }}\n >\n {/* Status Shape */}\n <span style={{ flexShrink: 0, display: 'flex', alignItems: 'center' }}>\n {STATUS_SHAPES[status](sizeConfig.iconSize, statusColor)}\n </span>\n \n {/* Message Text */}\n <span\n style={{\n flex: 1,\n fontSize: sizeConfig.fontSize,\n fontWeight: 500,\n color: tokens.colors.text.primary,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {message.text}\n </span>\n \n {/* Details (if any) */}\n {message.details && !isCompact && (\n <span\n style={{\n fontSize: sizeConfig.fontSizeSmall,\n color: tokens.colors.text.tertiary,\n }}\n >\n {message.details}\n </span>\n )}\n \n {/* Timestamp */}\n {showTimestamp && message.timestamp && (\n <span\n style={{\n fontSize: sizeConfig.fontSizeSmall,\n color: tokens.colors.text.tertiary,\n fontFamily: tokens.typography.fontFamily.mono,\n whiteSpace: 'nowrap',\n }}\n >\n {formatTimestamp(message.timestamp, timeFormat)}\n </span>\n )}\n </div>\n );\n});\n\n// =============================================================================\n// Tree Node Component (for hierarchical display)\n// =============================================================================\n\ninterface TreeNodeProps {\n message: StreamMessage;\n tokens: any;\n size: 'sm' | 'md' | 'lg';\n showTimestamp: boolean;\n timeFormat: 'relative' | 'absolute' | 'time-only';\n onClick?: (message: StreamMessage) => void;\n depth: number;\n showConnectors: boolean;\n isLast: boolean;\n}\n\nconst TreeNode = memo(function TreeNode({\n message,\n tokens,\n size,\n showTimestamp,\n timeFormat,\n onClick,\n depth,\n showConnectors,\n isLast,\n}: TreeNodeProps) {\n const hasChildren = message.children && message.children.length > 0;\n const indentSize = 32;\n \n return (\n <div style={{ position: 'relative' }}>\n {/* Connector Lines */}\n {showConnectors && depth > 0 && (\n <>\n {/* Vertical line from parent */}\n <div\n style={{\n position: 'absolute',\n left: (depth - 1) * indentSize + 16,\n top: 0,\n width: 2,\n height: isLast ? '50%' : '100%',\n backgroundColor: tokens.colors.border.muted,\n }}\n />\n {/* Horizontal line to node */}\n <div\n style={{\n position: 'absolute',\n left: (depth - 1) * indentSize + 16,\n top: '50%',\n width: indentSize - 8,\n height: 2,\n backgroundColor: tokens.colors.border.muted,\n }}\n />\n </>\n )}\n \n {/* Message Card */}\n <div style={{ marginLeft: depth * indentSize }}>\n <MessageCard\n message={message}\n tokens={tokens}\n size={size}\n showTimestamp={showTimestamp}\n timeFormat={timeFormat}\n onClick={onClick}\n variant=\"tree\"\n />\n </div>\n \n {/* Render children */}\n {hasChildren && (\n <div style={{ marginTop: 8 }}>\n {message.children!.map((child, index) => (\n <div key={child.id} style={{ marginTop: index > 0 ? 8 : 0 }}>\n <TreeNode\n message={child}\n tokens={tokens}\n size={size}\n showTimestamp={showTimestamp}\n timeFormat={timeFormat}\n onClick={onClick}\n depth={depth + 1}\n showConnectors={showConnectors}\n isLast={index === message.children!.length - 1}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n );\n});\n\n// =============================================================================\n// MessageStream Component\n// =============================================================================\n\nexport const MessageStream = memo(function MessageStream({\n title,\n subtitle,\n messages,\n maxHeight,\n showTimestamps = false,\n timeFormat = 'relative',\n variant = 'list',\n className = '',\n size = 'md',\n onMessageClick,\n loading = false,\n emptyMessage = 'No messages',\n showConnectors = true,\n collapsible = false,\n defaultExpanded = false,\n onPinChange,\n}: MessageStreamProps): React.ReactElement {\n const { tokens, theme, prefersReducedMotion } = useTheme();\n const isTransparentTheme = theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n\n // Collapsible compact mode state management\n const { expanded, isPinned, handlers, transitionDuration } = useCompactMode({\n compact: collapsible,\n defaultExpanded,\n onPinChange,\n });\n \n // Card container styles - Use transparent background with blur for transparent themes (matching Timeline)\n const containerStyle = useMemo(() => ({\n backgroundColor: isTransparentTheme ? 'transparent' : tokens.colors.background.surface,\n ...(isTransparentTheme && { \n backdropFilter: 'blur(12px)' as const, \n WebkitBackdropFilter: 'blur(12px)' as const,\n }),\n ...(tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` }),\n borderRadius: tokens.borderRadius.lg,\n padding: tokens.spacing.md,\n display: 'flex',\n flexDirection: 'column' as const,\n }), [tokens, isTransparentTheme]);\n\n // Count messages by status for compact view summary (must be before any conditional return for rules-of-hooks)\n const statusCounts = useMemo(() => {\n const counts = { normal: 0, caution: 0, critical: 0, other: 0 };\n messages.forEach(m => {\n if (m.status === 'normal') counts.normal++;\n else if (m.status === 'caution') counts.caution++;\n else if (m.status === 'critical' || m.status === 'serious') counts.critical++;\n else counts.other++;\n });\n return counts;\n }, [messages]);\n \n // Loading skeleton\n if (loading) {\n return (\n <article\n className={classNames('zendir-message-stream', className)}\n style={containerStyle}\n aria-busy=\"true\"\n aria-label=\"Loading messages\"\n >\n {title && (\n <div style={{ marginBottom: 16 }}>\n <div style={{\n height: 18,\n width: 120,\n backgroundColor: tokens.colors.background.elevated,\n borderRadius: 4,\n marginBottom: 8,\n }} />\n {subtitle && (\n <div style={{\n height: 14,\n width: 200,\n backgroundColor: tokens.colors.background.elevated,\n borderRadius: 4,\n }} />\n )}\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {[1, 2, 3].map((i) => (\n <div\n key={i}\n style={{\n height: 44,\n backgroundColor: tokens.colors.background.elevated,\n borderRadius: tokens.borderRadius.md,\n border: `2px solid ${tokens.colors.border.muted}`,\n }}\n />\n ))}\n </div>\n </article>\n );\n }\n\n // Collapsed view - shows summary of messages\n if (collapsible && !expanded) {\n return (\n <article\n className={classNames('zendir-message-stream', 'collapsed', className)}\n {...handlers}\n style={{\n ...containerStyle,\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\n cursor: 'pointer',\n transition: `all ${transitionDuration} ease-out`,\n }}\n onMouseEnter={(e) => {\n handlers.onMouseEnter();\n if (!prefersReducedMotion) {\n (e.currentTarget as HTMLElement).style.transform = 'scale(1.01)';\n (e.currentTarget as HTMLElement).style.boxShadow = `0 4px 12px ${tokens.colors.accent.primary}20`;\n }\n }}\n onMouseLeave={(e) => {\n handlers.onMouseLeave();\n (e.currentTarget as HTMLElement).style.transform = 'scale(1)';\n (e.currentTarget as HTMLElement).style.boxShadow = '';\n }}\n aria-label={`${title || 'Messages'} (collapsed)`}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: tokens.spacing.md }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\n <Icon name=\"message\" size={14} color={tokens.colors.accent.primary} />\n <span style={{ fontWeight: tokens.typography.fontWeight.medium }}>\n {title ? title.split(' ')[0] : 'Messages'}\n </span>\n <span style={{ color: tokens.colors.text.tertiary, fontSize: tokens.typography.fontSize.xs }}>\n ({messages.length})\n </span>\n </div>\n \n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\n {statusCounts.critical > 0 && (\n <span style={{ \n color: tokens.colors.status.critical,\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.medium,\n }}>\n {statusCounts.critical} critical\n </span>\n )}\n {statusCounts.caution > 0 && (\n <span style={{ \n color: tokens.colors.status.caution,\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.medium,\n }}>\n {statusCounts.caution} warn\n </span>\n )}\n {isPinned && (\n <Icon name=\"lock\" size={12} color={tokens.colors.accent.primary} />\n )}\n </div>\n </div>\n </article>\n );\n }\n \n return (\n <div\n className={classNames('zendir-message-stream', collapsible ? 'expanded' : '', className)}\n {...(collapsible ? handlers : {})}\n role={collapsible ? handlers.role : 'log'}\n tabIndex={collapsible ? handlers.tabIndex : undefined}\n aria-expanded={collapsible ? handlers['aria-expanded'] : undefined}\n style={{\n ...containerStyle,\n cursor: collapsible ? 'pointer' : undefined,\n transition: collapsible ? `all ${transitionDuration} ease-out` : undefined,\n }}\n aria-label={title || 'Message stream'}\n aria-live=\"polite\"\n >\n {/* Header */}\n {(title || subtitle) && (\n <header style={{ marginBottom: 16 }}>\n {title && (\n <h3 style={{\n fontSize: tokens.typography.fontSize.lg,\n fontWeight: 500, // AstroUXDS medium for headers\n color: tokens.colors.text.primary,\n margin: 0,\n }}>\n {title}\n </h3>\n )}\n {subtitle && (\n <p style={{\n fontSize: tokens.typography.fontSize.sm,\n color: tokens.colors.text.tertiary,\n margin: '4px 0 0 0',\n }}>\n {subtitle}\n </p>\n )}\n </header>\n )}\n \n {/* Messages Container — tabIndex for keyboard scroll access (WCAG 2.1.1) */}\n <div\n role=\"list\"\n tabIndex={maxHeight ? 0 : undefined}\n aria-label={maxHeight ? `${title || 'Messages'} scrollable list` : undefined}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'compact' ? 4 : 8,\n ...(maxHeight && {\n maxHeight,\n overflowY: 'auto',\n paddingRight: 8,\n }),\n }}\n >\n {messages.length === 0 ? (\n <div\n style={{\n textAlign: 'center',\n padding: 32,\n color: tokens.colors.text.tertiary,\n fontSize: tokens.typography.fontSize.sm,\n }}\n >\n {emptyMessage}\n </div>\n ) : variant === 'tree' ? (\n messages.map((message, index) => (\n <TreeNode\n key={message.id}\n message={message}\n tokens={tokens}\n size={size}\n showTimestamp={showTimestamps}\n timeFormat={timeFormat}\n onClick={onMessageClick}\n depth={0}\n showConnectors={showConnectors}\n isLast={index === messages.length - 1}\n />\n ))\n ) : (\n messages.map((message) => (\n <MessageCard\n key={message.id}\n message={message}\n tokens={tokens}\n size={size}\n showTimestamp={showTimestamps}\n timeFormat={timeFormat}\n onClick={onMessageClick}\n variant={variant}\n />\n ))\n )}\n </div>\n </div>\n );\n});\n\nexport default MessageStream;\n"],"names":["MessageCard","TreeNode","MessageStream"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageStream.js","names":[],"sources":["../../../../src/react/core/widgets/MessageStream.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - MessageStream Component\r\n *\r\n * Stream/notification window for displaying messages, events, or status updates.\r\n * Each message card has integrated status system with dual-coding (color + shape).\r\n *\r\n * AstroUXDS Compliance:\r\n * - Status colors per AstroUXDS status system\r\n * - Dual-coding (color + shape) for accessibility\r\n * - Clear visual hierarchy\r\n * - Proper contrast ratios\r\n *\r\n * @example\r\n * ```tsx\r\n * import { MessageStream } from '@zendir/ui';\r\n *\r\n * <MessageStream\r\n * title=\"Response Status\"\r\n * messages={[\r\n * { id: '1', text: 'Message Received', status: 'standby' },\r\n * { id: '2', text: 'Confirmation Receipt', status: 'normal' },\r\n * { id: '3', text: 'Failed', status: 'critical' },\r\n * ]}\r\n * />\r\n * ```\r\n */\r\n\r\nimport React, { memo, useMemo } from \"react\";\r\nimport { useTheme } from \"../../theme\";\r\nimport { classNames, type StatusLevel } from \"../../utils\";\r\nimport { type AstroIconName } from \"../display/AstroIcon\";\r\nimport { Icon } from \"../display/Icon\";\r\nimport { useCompactMode } from \"../../hooks\";\r\n\r\n// =============================================================================\r\n// Types\r\n// =============================================================================\r\n\r\nexport interface StreamMessage {\r\n /** Unique identifier */\r\n id: string;\r\n /** Message text/label */\r\n text: string;\r\n /** Status level for color and shape */\r\n status?: StatusLevel;\r\n /** Optional timestamp */\r\n timestamp?: Date | string;\r\n /** Optional icon override */\r\n icon?: AstroIconName;\r\n /** Optional metadata/details */\r\n details?: string;\r\n /** Child messages (for hierarchical display) */\r\n children?: StreamMessage[];\r\n /** Whether this message is highlighted/active */\r\n active?: boolean;\r\n}\r\n\r\nexport interface MessageStreamProps {\r\n /** Stream title */\r\n title?: string;\r\n /** Subtitle or description */\r\n subtitle?: string;\r\n /** Array of messages to display */\r\n messages: StreamMessage[];\r\n /** Maximum height before scrolling */\r\n maxHeight?: number | string;\r\n /** Show timestamps */\r\n showTimestamps?: boolean;\r\n /** Time format for timestamps */\r\n timeFormat?: \"relative\" | \"absolute\" | \"time-only\";\r\n /** Variant: 'list' for vertical, 'tree' for hierarchical */\r\n variant?: \"list\" | \"tree\" | \"compact\";\r\n /** Custom className */\r\n className?: string;\r\n /** Card size */\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n /** On message click */\r\n onMessageClick?: (message: StreamMessage) => void;\r\n /** Loading state */\r\n loading?: boolean;\r\n /** Empty state message */\r\n emptyMessage?: string;\r\n /** Show connection lines (tree variant) */\r\n showConnectors?: boolean;\r\n /** Enable collapsible compact mode - shows condensed view that expands on hover/click */\r\n collapsible?: boolean;\r\n /** Start expanded when in collapsible mode (pinned state) */\r\n defaultExpanded?: boolean;\r\n /** Callback when pin state changes in collapsible mode */\r\n onPinChange?: (isPinned: boolean) => void;\r\n}\r\n\r\n// =============================================================================\r\n// Status Shapes (same as DataValue for consistency)\r\n// =============================================================================\r\n\r\nconst STATUS_SHAPES: Record<\r\n StatusLevel,\r\n (size: number, color: string) => React.ReactNode\r\n> = {\r\n off: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\r\n </svg>\r\n ),\r\n standby: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />\r\n </svg>\r\n ),\r\n normal: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\r\n </svg>\r\n ),\r\n caution: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\r\n </svg>\r\n ),\r\n serious: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\r\n </svg>\r\n ),\r\n critical: (size, color) => (\r\n <svg viewBox=\"0 0 12 12\" width={size} height={size} aria-hidden=\"true\">\r\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\r\n </svg>\r\n ),\r\n};\r\n\r\n// =============================================================================\r\n// Helper Functions\r\n// =============================================================================\r\n\r\nfunction getStatusColor(status: StatusLevel | undefined, tokens: any): string {\r\n switch (status) {\r\n case \"normal\":\r\n return tokens.colors.status.normal;\r\n case \"standby\":\r\n return tokens.colors.status.standby;\r\n case \"caution\":\r\n return tokens.colors.status.caution;\r\n case \"serious\":\r\n return tokens.colors.status.serious;\r\n case \"critical\":\r\n return tokens.colors.status.critical;\r\n case \"off\":\r\n return tokens.colors.status.off;\r\n default:\r\n return tokens.colors.status.standby;\r\n }\r\n}\r\n\r\nfunction formatTimestamp(\r\n timestamp: Date | string | undefined,\r\n format: \"relative\" | \"absolute\" | \"time-only\",\r\n): string {\r\n if (!timestamp) return \"\";\r\n\r\n const date = typeof timestamp === \"string\" ? new Date(timestamp) : timestamp;\r\n\r\n if (format === \"relative\") {\r\n const now = new Date();\r\n const diff = now.getTime() - date.getTime();\r\n const seconds = Math.floor(diff / 1000);\r\n const minutes = Math.floor(seconds / 60);\r\n const hours = Math.floor(minutes / 60);\r\n\r\n if (seconds < 60) return \"Just now\";\r\n if (minutes < 60) return `${minutes}m ago`;\r\n if (hours < 24) return `${hours}h ago`;\r\n return date.toLocaleDateString();\r\n }\r\n\r\n if (format === \"time-only\") {\r\n return date.toLocaleTimeString([], {\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n second: \"2-digit\",\r\n });\r\n }\r\n\r\n return date.toLocaleString();\r\n}\r\n\r\n// =============================================================================\r\n// Message Card Component\r\n// =============================================================================\r\n\r\ninterface MessageCardProps {\r\n message: StreamMessage;\r\n tokens: any;\r\n size: \"sm\" | \"md\" | \"lg\";\r\n showTimestamp: boolean;\r\n timeFormat: \"relative\" | \"absolute\" | \"time-only\";\r\n onClick?: (message: StreamMessage) => void;\r\n variant: \"list\" | \"tree\" | \"compact\";\r\n}\r\n\r\nconst MessageCard = memo(function MessageCard({\r\n message,\r\n tokens,\r\n size,\r\n showTimestamp,\r\n timeFormat,\r\n onClick,\r\n variant,\r\n}: MessageCardProps) {\r\n const status = message.status || \"standby\";\r\n const statusColor = getStatusColor(status, tokens);\r\n\r\n const sizeConfig = {\r\n sm: {\r\n padding: 8,\r\n fontSize: \"0.75rem\",\r\n fontSizeSmall: \"0.625rem\",\r\n iconSize: 10,\r\n gap: 6,\r\n }, // 12px / 10px in rem\r\n md: {\r\n padding: 12,\r\n fontSize: \"0.875rem\",\r\n fontSizeSmall: \"0.75rem\",\r\n iconSize: 12,\r\n gap: 8,\r\n }, // 14px / 12px in rem\r\n lg: {\r\n padding: 16,\r\n fontSize: \"1rem\",\r\n fontSizeSmall: \"0.875rem\",\r\n iconSize: 14,\r\n gap: 10,\r\n }, // 16px / 14px in rem\r\n }[size];\r\n\r\n const isCompact = variant === \"compact\";\r\n\r\n return (\r\n <div\r\n role=\"listitem\"\r\n aria-label={`${message.text} - ${status}`}\r\n onClick={() => onClick?.(message)}\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: sizeConfig.gap,\r\n padding: isCompact\r\n ? `${sizeConfig.padding / 2}px ${sizeConfig.padding}px`\r\n : sizeConfig.padding,\r\n backgroundColor: tokens.colors.background.elevated,\r\n border: `1.5px solid ${statusColor}`,\r\n borderRadius: tokens.borderRadius.md,\r\n cursor: onClick ? \"pointer\" : \"default\",\r\n transition: \"all 0.15s ease\",\r\n ...(message.active && {\r\n boxShadow: `0 0 0 2px ${statusColor}40`,\r\n }),\r\n }}\r\n onMouseEnter={(e) => {\r\n if (onClick) {\r\n e.currentTarget.style.backgroundColor =\r\n tokens.colors.background.surface;\r\n e.currentTarget.style.transform = \"translateY(-1px)\";\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n if (onClick) {\r\n e.currentTarget.style.backgroundColor =\r\n tokens.colors.background.elevated;\r\n e.currentTarget.style.transform = \"translateY(0)\";\r\n }\r\n }}\r\n >\r\n {/* Status Shape */}\r\n <span style={{ flexShrink: 0, display: \"flex\", alignItems: \"center\" }}>\r\n {STATUS_SHAPES[status](sizeConfig.iconSize, statusColor)}\r\n </span>\r\n\r\n {/* Message Text */}\r\n <span\r\n style={{\r\n flex: 1,\r\n fontSize: sizeConfig.fontSize,\r\n fontWeight: 500,\r\n color: tokens.colors.text.primary,\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n }}\r\n >\r\n {message.text}\r\n </span>\r\n\r\n {/* Details (if any) */}\r\n {message.details && !isCompact && (\r\n <span\r\n style={{\r\n fontSize: sizeConfig.fontSizeSmall,\r\n color: tokens.colors.text.tertiary,\r\n }}\r\n >\r\n {message.details}\r\n </span>\r\n )}\r\n\r\n {/* Timestamp */}\r\n {showTimestamp && message.timestamp && (\r\n <span\r\n style={{\r\n fontSize: sizeConfig.fontSizeSmall,\r\n color: tokens.colors.text.tertiary,\r\n fontFamily: tokens.typography.fontFamily.mono,\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {formatTimestamp(message.timestamp, timeFormat)}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\n// =============================================================================\r\n// Tree Node Component (for hierarchical display)\r\n// =============================================================================\r\n\r\ninterface TreeNodeProps {\r\n message: StreamMessage;\r\n tokens: any;\r\n size: \"sm\" | \"md\" | \"lg\";\r\n showTimestamp: boolean;\r\n timeFormat: \"relative\" | \"absolute\" | \"time-only\";\r\n onClick?: (message: StreamMessage) => void;\r\n depth: number;\r\n showConnectors: boolean;\r\n isLast: boolean;\r\n}\r\n\r\nconst TreeNode = memo(function TreeNode({\r\n message,\r\n tokens,\r\n size,\r\n showTimestamp,\r\n timeFormat,\r\n onClick,\r\n depth,\r\n showConnectors,\r\n isLast,\r\n}: TreeNodeProps) {\r\n const hasChildren = message.children && message.children.length > 0;\r\n const indentSize = 32;\r\n\r\n return (\r\n <div style={{ position: \"relative\" }}>\r\n {/* Connector Lines */}\r\n {showConnectors && depth > 0 && (\r\n <>\r\n {/* Vertical line from parent */}\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n left: (depth - 1) * indentSize + 16,\r\n top: 0,\r\n width: 2,\r\n height: isLast ? \"50%\" : \"100%\",\r\n backgroundColor: tokens.colors.border.muted,\r\n }}\r\n />\r\n {/* Horizontal line to node */}\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n left: (depth - 1) * indentSize + 16,\r\n top: \"50%\",\r\n width: indentSize - 8,\r\n height: 2,\r\n backgroundColor: tokens.colors.border.muted,\r\n }}\r\n />\r\n </>\r\n )}\r\n\r\n {/* Message Card */}\r\n <div style={{ marginLeft: depth * indentSize }}>\r\n <MessageCard\r\n message={message}\r\n tokens={tokens}\r\n size={size}\r\n showTimestamp={showTimestamp}\r\n timeFormat={timeFormat}\r\n onClick={onClick}\r\n variant=\"tree\"\r\n />\r\n </div>\r\n\r\n {/* Render children */}\r\n {hasChildren && (\r\n <div style={{ marginTop: 8 }}>\r\n {message.children!.map((child, index) => (\r\n <div key={child.id} style={{ marginTop: index > 0 ? 8 : 0 }}>\r\n <TreeNode\r\n message={child}\r\n tokens={tokens}\r\n size={size}\r\n showTimestamp={showTimestamp}\r\n timeFormat={timeFormat}\r\n onClick={onClick}\r\n depth={depth + 1}\r\n showConnectors={showConnectors}\r\n isLast={index === message.children!.length - 1}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\n// =============================================================================\r\n// MessageStream Component\r\n// =============================================================================\r\n\r\nexport const MessageStream = memo(function MessageStream({\r\n title,\r\n subtitle,\r\n messages,\r\n maxHeight,\r\n showTimestamps = false,\r\n timeFormat = \"relative\",\r\n variant = \"list\",\r\n className = \"\",\r\n size = \"md\",\r\n onMessageClick,\r\n loading = false,\r\n emptyMessage = \"No messages\",\r\n showConnectors = true,\r\n collapsible = false,\r\n defaultExpanded = false,\r\n onPinChange,\r\n}: MessageStreamProps): React.ReactElement {\r\n const { tokens, theme, prefersReducedMotion } = useTheme();\r\n const isTransparentTheme =\r\n theme === \"transparent\" ||\r\n theme === \"transparent-bold\" ||\r\n theme === \"transparent-minimal\";\r\n\r\n // Collapsible compact mode state management\r\n const { expanded, isPinned, handlers, transitionDuration } = useCompactMode({\r\n compact: collapsible,\r\n defaultExpanded,\r\n onPinChange,\r\n });\r\n\r\n // Card container styles - Use transparent background with blur for transparent themes (matching Timeline)\r\n const containerStyle = useMemo(\r\n () => ({\r\n backgroundColor: isTransparentTheme\r\n ? \"transparent\"\r\n : tokens.colors.background.surface,\r\n ...(isTransparentTheme && {\r\n backdropFilter: \"blur(12px)\" as const,\r\n WebkitBackdropFilter: \"blur(12px)\" as const,\r\n }),\r\n ...(tokens.colors.border.cardStyle ?? {\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n }),\r\n borderRadius: tokens.borderRadius.lg,\r\n padding: tokens.spacing.md,\r\n display: \"flex\",\r\n flexDirection: \"column\" as const,\r\n }),\r\n [tokens, isTransparentTheme],\r\n );\r\n\r\n // Count messages by status for compact view summary (must be before any conditional return for rules-of-hooks)\r\n const statusCounts = useMemo(() => {\r\n const counts = { normal: 0, caution: 0, critical: 0, other: 0 };\r\n messages.forEach((m) => {\r\n if (m.status === \"normal\") counts.normal++;\r\n else if (m.status === \"caution\") counts.caution++;\r\n else if (m.status === \"critical\" || m.status === \"serious\")\r\n counts.critical++;\r\n else counts.other++;\r\n });\r\n return counts;\r\n }, [messages]);\r\n\r\n // Loading skeleton\r\n if (loading) {\r\n return (\r\n <article\r\n className={classNames(\"zendir-message-stream\", className)}\r\n style={containerStyle}\r\n aria-busy=\"true\"\r\n aria-label=\"Loading messages\"\r\n >\r\n {title && (\r\n <div style={{ marginBottom: 16 }}>\r\n <div\r\n style={{\r\n height: 18,\r\n width: 120,\r\n backgroundColor: tokens.colors.background.elevated,\r\n borderRadius: 4,\r\n marginBottom: 8,\r\n }}\r\n />\r\n {subtitle && (\r\n <div\r\n style={{\r\n height: 14,\r\n width: 200,\r\n backgroundColor: tokens.colors.background.elevated,\r\n borderRadius: 4,\r\n }}\r\n />\r\n )}\r\n </div>\r\n )}\r\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 8 }}>\r\n {[1, 2, 3].map((i) => (\r\n <div\r\n key={i}\r\n style={{\r\n height: 44,\r\n backgroundColor: tokens.colors.background.elevated,\r\n borderRadius: tokens.borderRadius.md,\r\n border: `2px solid ${tokens.colors.border.muted}`,\r\n }}\r\n />\r\n ))}\r\n </div>\r\n </article>\r\n );\r\n }\r\n\r\n // Collapsed view - shows summary of messages\r\n if (collapsible && !expanded) {\r\n return (\r\n <article\r\n className={classNames(\"zendir-message-stream\", \"collapsed\", className)}\r\n {...handlers}\r\n style={{\r\n ...containerStyle,\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\r\n cursor: \"pointer\",\r\n transition: `all ${transitionDuration} ease-out`,\r\n }}\r\n onMouseEnter={(e) => {\r\n handlers.onMouseEnter();\r\n if (!prefersReducedMotion) {\r\n (e.currentTarget as HTMLElement).style.transform = \"scale(1.01)\";\r\n (e.currentTarget as HTMLElement).style.boxShadow =\r\n `0 4px 12px ${tokens.colors.accent.primary}20`;\r\n }\r\n }}\r\n onMouseLeave={(e) => {\r\n handlers.onMouseLeave();\r\n (e.currentTarget as HTMLElement).style.transform = \"scale(1)\";\r\n (e.currentTarget as HTMLElement).style.boxShadow = \"\";\r\n }}\r\n aria-label={`${title || \"Messages\"} (collapsed)`}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n gap: tokens.spacing.md,\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n }}\r\n >\r\n <Icon\r\n name=\"message\"\r\n size={14}\r\n color={tokens.colors.accent.primary}\r\n />\r\n <span style={{ fontWeight: tokens.typography.fontWeight.medium }}>\r\n {title ? title.split(\" \")[0] : \"Messages\"}\r\n </span>\r\n <span\r\n style={{\r\n color: tokens.colors.text.tertiary,\r\n fontSize: tokens.typography.fontSize.xs,\r\n }}\r\n >\r\n ({messages.length})\r\n </span>\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n }}\r\n >\r\n {statusCounts.critical > 0 && (\r\n <span\r\n style={{\r\n color: tokens.colors.status.critical,\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n >\r\n {statusCounts.critical} critical\r\n </span>\r\n )}\r\n {statusCounts.caution > 0 && (\r\n <span\r\n style={{\r\n color: tokens.colors.status.caution,\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n >\r\n {statusCounts.caution} warn\r\n </span>\r\n )}\r\n {isPinned && (\r\n <Icon\r\n name=\"lock\"\r\n size={12}\r\n color={tokens.colors.accent.primary}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n </article>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={classNames(\r\n \"zendir-message-stream\",\r\n collapsible ? \"expanded\" : \"\",\r\n className,\r\n )}\r\n {...(collapsible ? handlers : {})}\r\n role={collapsible ? handlers.role : \"log\"}\r\n tabIndex={collapsible ? handlers.tabIndex : undefined}\r\n aria-expanded={collapsible ? handlers[\"aria-expanded\"] : undefined}\r\n style={{\r\n ...containerStyle,\r\n cursor: collapsible ? \"pointer\" : undefined,\r\n transition: collapsible\r\n ? `all ${transitionDuration} ease-out`\r\n : undefined,\r\n }}\r\n aria-label={title || \"Message stream\"}\r\n aria-live=\"polite\"\r\n >\r\n {/* Header */}\r\n {(title || subtitle) && (\r\n <header style={{ marginBottom: 16 }}>\r\n {title && (\r\n <h3\r\n style={{\r\n fontSize: tokens.typography.fontSize.lg,\r\n fontWeight: 500, // AstroUXDS medium for headers\r\n color: tokens.colors.text.primary,\r\n margin: 0,\r\n }}\r\n >\r\n {title}\r\n </h3>\r\n )}\r\n {subtitle && (\r\n <p\r\n style={{\r\n fontSize: tokens.typography.fontSize.sm,\r\n color: tokens.colors.text.tertiary,\r\n margin: \"4px 0 0 0\",\r\n }}\r\n >\r\n {subtitle}\r\n </p>\r\n )}\r\n </header>\r\n )}\r\n\r\n {/* Messages Container — tabIndex for keyboard scroll access (WCAG 2.1.1) */}\r\n <div\r\n role=\"list\"\r\n tabIndex={maxHeight ? 0 : undefined}\r\n aria-label={\r\n maxHeight ? `${title || \"Messages\"} scrollable list` : undefined\r\n }\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: variant === \"compact\" ? 4 : 8,\r\n ...(maxHeight && {\r\n maxHeight,\r\n overflowY: \"auto\",\r\n paddingRight: 8,\r\n }),\r\n }}\r\n >\r\n {messages.length === 0 ? (\r\n <div\r\n style={{\r\n textAlign: \"center\",\r\n padding: 32,\r\n color: tokens.colors.text.tertiary,\r\n fontSize: tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n {emptyMessage}\r\n </div>\r\n ) : variant === \"tree\" ? (\r\n messages.map((message, index) => (\r\n <TreeNode\r\n key={message.id}\r\n message={message}\r\n tokens={tokens}\r\n size={size}\r\n showTimestamp={showTimestamps}\r\n timeFormat={timeFormat}\r\n onClick={onMessageClick}\r\n depth={0}\r\n showConnectors={showConnectors}\r\n isLast={index === messages.length - 1}\r\n />\r\n ))\r\n ) : (\r\n messages.map((message) => (\r\n <MessageCard\r\n key={message.id}\r\n message={message}\r\n tokens={tokens}\r\n size={size}\r\n showTimestamp={showTimestamps}\r\n timeFormat={timeFormat}\r\n onClick={onMessageClick}\r\n variant={variant}\r\n />\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n );\r\n});\r\n\r\nexport default MessageStream;\r\n"],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
|
|
3
|
-
export type
|
|
4
|
-
export type
|
|
5
|
-
export type ActivityType = 'command' | 'script' | 'reserve' | 'metadata' | 'note' | 'contact' | 'eclipse' | 'pass';
|
|
2
|
+
export type CalendarViewMode = "month" | "week" | "day" | "gantt" | "list";
|
|
3
|
+
export type ActivityStatus = "created" | "scheduled" | "started" | "completed" | "paused" | "stopped" | "disabled" | "error" | "failed" | "crashed";
|
|
4
|
+
export type ActivityType = "command" | "script" | "reserve" | "metadata" | "note" | "contact" | "eclipse" | "pass";
|
|
6
5
|
export interface CalendarEvent {
|
|
7
6
|
/** Unique identifier */
|
|
8
7
|
id: string;
|