@zendir/ui 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +640 -631
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/index.js +17 -221
- package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
- package/dist/react/3d/CesiumCaptureSource.js +364 -283
- package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
- package/dist/react/3d/ZenSpace3D.d.ts +2 -3
- package/dist/react/3d/ZenSpace3D.js +1681 -1237
- package/dist/react/3d/ZenSpace3D.js.map +1 -1
- package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DCesium.js +513 -560
- package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
- package/dist/react/3d/ZenSpace3DShaders.js +61 -66
- package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
- package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
- package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
- package/dist/react/3d/ZenSpace3DUtils.js +37 -24
- package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
- package/dist/react/3d/capturePngAnalysis.js +42 -36
- package/dist/react/3d/capturePngAnalysis.js.map +1 -1
- package/dist/react/3d/index.d.ts +3 -3
- package/dist/react/3d/index.js +5 -53
- package/dist/react/3d/threeLoader.d.ts +1 -1
- package/dist/react/3d/threeLoader.js +23 -18
- package/dist/react/3d/threeLoader.js.map +1 -1
- package/dist/react/astro/ClassificationBanner.d.ts +2 -3
- package/dist/react/astro/ClassificationBanner.js +95 -79
- package/dist/react/astro/ClassificationBanner.js.map +1 -1
- package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
- package/dist/react/astro/GlobalStatusBar.js +157 -163
- package/dist/react/astro/GlobalStatusBar.js.map +1 -1
- package/dist/react/astro/MissionClock.d.ts +7 -8
- package/dist/react/astro/MissionClock.js +377 -400
- package/dist/react/astro/MissionClock.js.map +1 -1
- package/dist/react/astro/MonitoringIcon.d.ts +1 -2
- package/dist/react/astro/MonitoringIcon.js +422 -358
- package/dist/react/astro/MonitoringIcon.js.map +1 -1
- package/dist/react/astro/Notification.d.ts +1 -2
- package/dist/react/astro/Notification.js +229 -126
- package/dist/react/astro/Notification.js.map +1 -1
- package/dist/react/astro/Progress.d.ts +0 -1
- package/dist/react/astro/Progress.js +199 -141
- package/dist/react/astro/Progress.js.map +1 -1
- package/dist/react/astro/SimulationControls.d.ts +3 -4
- package/dist/react/astro/SimulationControls.js +596 -650
- package/dist/react/astro/SimulationControls.js.map +1 -1
- package/dist/react/astro/StatusIndicator.d.ts +0 -1
- package/dist/react/astro/StatusIndicator.js +236 -170
- package/dist/react/astro/StatusIndicator.js.map +1 -1
- package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
- package/dist/react/astro/UnifiedTimeline.js +2345 -2392
- package/dist/react/astro/UnifiedTimeline.js.map +1 -1
- package/dist/react/astro/index.d.ts +5 -5
- package/dist/react/astro/index.js +1 -25
- package/dist/react/cards/AccessCard.d.ts +0 -1
- package/dist/react/cards/AccessCard.js +471 -405
- package/dist/react/cards/AccessCard.js.map +1 -1
- package/dist/react/cards/OrbitCard.d.ts +0 -1
- package/dist/react/cards/OrbitCard.js +487 -364
- package/dist/react/cards/OrbitCard.js.map +1 -1
- package/dist/react/cards/SpacecraftCard.d.ts +0 -1
- package/dist/react/cards/SpacecraftCard.js +813 -925
- package/dist/react/cards/SpacecraftCard.js.map +1 -1
- package/dist/react/cards/TelemetryCard.d.ts +0 -1
- package/dist/react/cards/TelemetryCard.js +1055 -732
- package/dist/react/cards/TelemetryCard.js.map +1 -1
- package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
- package/dist/react/cards/TelemetryStreamCard.js +323 -297
- package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
- package/dist/react/cards/index.d.ts +1 -1
- package/dist/react/cards/index.js +1 -8
- package/dist/react/charts/GroundTrackMap.d.ts +6 -7
- package/dist/react/charts/GroundTrackMap.js +1377 -1256
- package/dist/react/charts/GroundTrackMap.js.map +1 -1
- package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
- package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
- package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
- package/dist/react/charts/index.d.ts +1 -1
- package/dist/react/charts/index.js +7 -100
- package/dist/react/charts/unified/AstroChart.d.ts +1 -2
- package/dist/react/charts/unified/AstroChart.js +1331 -1411
- package/dist/react/charts/unified/AstroChart.js.map +1 -1
- package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
- package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
- package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
- package/dist/react/charts/unified/domain.d.ts +12 -13
- package/dist/react/charts/unified/domain.js +3999 -3145
- package/dist/react/charts/unified/domain.js.map +1 -1
- package/dist/react/charts/unified/generators.d.ts +3 -4
- package/dist/react/charts/unified/generators.js +561 -498
- package/dist/react/charts/unified/generators.js.map +1 -1
- package/dist/react/charts/unified/index.d.ts +1 -1
- package/dist/react/charts/unified/presets.d.ts +14 -15
- package/dist/react/charts/unified/presets.js +857 -994
- package/dist/react/charts/unified/presets.js.map +1 -1
- package/dist/react/charts/unified/sync.d.ts +2 -3
- package/dist/react/charts/unified/sync.js +229 -195
- package/dist/react/charts/unified/sync.js.map +1 -1
- package/dist/react/charts/unified/theme.d.ts +11 -12
- package/dist/react/charts/unified/theme.js +606 -642
- package/dist/react/charts/unified/theme.js.map +1 -1
- package/dist/react/charts/unified/types.d.ts +32 -33
- package/dist/react/charts/unified/useChartStream.d.ts +1 -2
- package/dist/react/charts/unified/useChartStream.js +203 -216
- package/dist/react/charts/unified/useChartStream.js.map +1 -1
- package/dist/react/chatgpt/AppCard.d.ts +1 -2
- package/dist/react/chatgpt/index.d.ts +7 -7
- package/dist/react/chatgpt/index.js +160 -139
- package/dist/react/chatgpt/index.js.map +1 -1
- package/dist/react/context/CategoryContext.d.ts +0 -1
- package/dist/react/context/CategoryContext.js +78 -29
- package/dist/react/context/CategoryContext.js.map +1 -1
- package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
- package/dist/react/context/DisplaySettingsContext.js +205 -156
- package/dist/react/context/DisplaySettingsContext.js.map +1 -1
- package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
- package/dist/react/context/SpatialSelectionContext.js +36 -7
- package/dist/react/context/SpatialSelectionContext.js.map +1 -1
- package/dist/react/core/data/DataTable.d.ts +3 -4
- package/dist/react/core/data/DataTable.js +473 -440
- package/dist/react/core/data/DataTable.js.map +1 -1
- package/dist/react/core/data/DataValue.d.ts +4 -5
- package/dist/react/core/data/DataValue.js +605 -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 +312 -939
- package/dist/react/theme/ThemeProvider.js.map +1 -1
- package/dist/react/theme/cardAccent.d.ts +1 -2
- package/dist/react/theme/cardAccent.js +196 -126
- package/dist/react/theme/cardAccent.js.map +1 -1
- package/dist/react/theme/config.d.ts +0 -1
- package/dist/react/theme/config.js +47 -25
- package/dist/react/theme/config.js.map +1 -1
- package/dist/react/theme/index.d.ts +2 -2
- package/dist/react/theme/index.js +1 -16
- package/dist/react/theme/types.d.ts +332 -0
- package/dist/react/theme/types.js +39 -0
- package/dist/react/theme/types.js.map +1 -0
- package/dist/react/types.d.ts +8 -8
- package/dist/react/types.js +147 -47
- package/dist/react/types.js.map +1 -1
- package/dist/react/utils/categoryPalette.d.ts +0 -1
- package/dist/react/utils/categoryPalette.js +91 -102
- package/dist/react/utils/categoryPalette.js.map +1 -1
- package/dist/react/utils/index.d.ts +5 -5
- package/dist/react/utils/index.js +457 -371
- package/dist/react/utils/index.js.map +1 -1
- package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
- package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
- package/dist/react/visualizations/NavBallCard.d.ts +0 -1
- package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
- package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
- package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
- package/dist/react/visualizations/index.d.ts +3 -3
- package/dist/react.d.ts +2 -1
- package/dist/react.js +17 -221
- package/dist/shaders/atmosphere.frag.js +6 -5
- package/dist/shaders/atmosphere.frag.js.map +1 -1
- package/dist/shaders/atmosphere.vert.js +6 -5
- package/dist/shaders/atmosphere.vert.js.map +1 -1
- package/dist/shaders/stars.frag.js +6 -5
- package/dist/shaders/stars.frag.js.map +1 -1
- package/dist/shaders/stars.vert.js +6 -5
- package/dist/shaders/stars.vert.js.map +1 -1
- package/dist/style.css +217 -194
- package/dist/tokens/core.d.ts +159 -0
- package/dist/tokens/core.js +144 -0
- package/dist/tokens/core.js.map +1 -0
- package/dist/tokens/css-vars.d.ts +213 -2
- package/dist/tokens/css-vars.js +590 -227
- package/dist/tokens/css-vars.js.map +1 -1
- package/dist/tokens/index.d.ts +31 -228
- package/dist/tokens/index.js +281 -366
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/palettes/astro.d.ts +129 -0
- package/dist/tokens/palettes/astro.js +112 -0
- package/dist/tokens/palettes/astro.js.map +1 -0
- package/dist/tokens/palettes/index.d.ts +288 -0
- package/dist/tokens/palettes/index.js +35 -0
- package/dist/tokens/palettes/index.js.map +1 -0
- package/dist/tokens/palettes/tailwind.d.ts +324 -0
- package/dist/tokens/palettes/tailwind.js +201 -0
- package/dist/tokens/palettes/tailwind.js.map +1 -0
- package/dist/tokens/palettes/zendir.d.ts +126 -0
- package/dist/tokens/palettes/zendir.js +92 -0
- package/dist/tokens/palettes/zendir.js.map +1 -0
- package/dist/tokens/themes.d.ts +30 -0
- package/dist/tokens/themes.js +704 -0
- package/dist/tokens/themes.js.map +1 -0
- package/dist/tokens/tokens.css +419 -41
- package/dist/types/index.d.ts +2 -2
- package/package.json +310 -313
- package/dist/index.js.map +0 -1
- package/dist/react/3d/index.js.map +0 -1
- package/dist/react/astro/index.js.map +0 -1
- package/dist/react/cards/index.js.map +0 -1
- package/dist/react/charts/index.js.map +0 -1
- package/dist/react/core/index.js.map +0 -1
- package/dist/react/panels/index.js.map +0 -1
- package/dist/react/theme/astro-tokens.d.ts +0 -153
- package/dist/react/theme/index.js.map +0 -1
- package/dist/react.js.map +0 -1
|
@@ -1,74 +1,131 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import React, { memo, forwardRef } from "react";
|
|
3
1
|
import { useTheme } from "../../theme/ThemeProvider.js";
|
|
4
2
|
import { useBreakpoint } from "./useBreakpoint.js";
|
|
5
3
|
import { resolveResponsiveSpacing } from "./responsive.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
4
|
+
import React, { forwardRef, memo } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/react/core/layout/Stack.tsx
|
|
7
|
+
/**
|
|
8
|
+
* @zendir/ui - Stack Layout Primitives
|
|
9
|
+
*
|
|
10
|
+
* Consistent spacing stacks — the most common layout pattern in operator dashboards.
|
|
11
|
+
* Stack, HStack, and VStack provide directional flex with uniform gaps.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* // Vertical stack (default)
|
|
16
|
+
* <Stack spacing="md">
|
|
17
|
+
* <TelemetryCard />
|
|
18
|
+
* <LinkBudgetCard />
|
|
19
|
+
* <SpacecraftCard />
|
|
20
|
+
* </Stack>
|
|
21
|
+
*
|
|
22
|
+
* // Horizontal stack
|
|
23
|
+
* <HStack spacing="sm" align="center">
|
|
24
|
+
* <StatusIndicator status="normal" />
|
|
25
|
+
* <Body1>Connected</Body1>
|
|
26
|
+
* </HStack>
|
|
27
|
+
*
|
|
28
|
+
* // Responsive spacing
|
|
29
|
+
* <VStack spacing={['sm', 'md', 'lg']}>
|
|
30
|
+
* <Content />
|
|
31
|
+
* </VStack>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
var Stack = memo(forwardRef(function Stack({ as: Component = "div", direction = "column", spacing = "md", align, justify, wrap, fullWidth = false, fullHeight = false, divider = false, style, children, ...rest }, ref) {
|
|
35
|
+
const { tokens } = useTheme();
|
|
36
|
+
const { breakpoint } = useBreakpoint();
|
|
37
|
+
const resolvedSpacing = resolveResponsiveSpacing(spacing, breakpoint, tokens);
|
|
38
|
+
const resolvedDirection = Array.isArray(direction) ? direction[Math.min([
|
|
39
|
+
"base",
|
|
40
|
+
"sm",
|
|
41
|
+
"md",
|
|
42
|
+
"lg",
|
|
43
|
+
"xl",
|
|
44
|
+
"xxl"
|
|
45
|
+
].indexOf(breakpoint), direction.length - 1)] ?? direction[direction.length - 1] : direction;
|
|
46
|
+
const isVertical = resolvedDirection === "column" || resolvedDirection === "column-reverse";
|
|
47
|
+
const computedStyle = {
|
|
48
|
+
display: "flex",
|
|
49
|
+
flexDirection: resolvedDirection,
|
|
50
|
+
...divider || !resolvedSpacing ? {} : { gap: resolvedSpacing },
|
|
51
|
+
alignItems: align,
|
|
52
|
+
justifyContent: justify,
|
|
53
|
+
flexWrap: wrap,
|
|
54
|
+
...fullWidth ? { width: "100%" } : {},
|
|
55
|
+
...fullHeight ? { height: "100%" } : {},
|
|
56
|
+
...style
|
|
57
|
+
};
|
|
58
|
+
if (divider) {
|
|
59
|
+
const items = React.Children.toArray(children).filter(Boolean);
|
|
60
|
+
const dividerStyle = isVertical ? {
|
|
61
|
+
width: "100%",
|
|
62
|
+
height: "1px",
|
|
63
|
+
backgroundColor: tokens.colors.border.muted,
|
|
64
|
+
flexShrink: 0,
|
|
65
|
+
margin: `${resolvedSpacing} 0`
|
|
66
|
+
} : {
|
|
67
|
+
height: "100%",
|
|
68
|
+
width: "1px",
|
|
69
|
+
backgroundColor: tokens.colors.border.muted,
|
|
70
|
+
flexShrink: 0,
|
|
71
|
+
alignSelf: "stretch",
|
|
72
|
+
margin: `0 ${resolvedSpacing}`
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsx(Component, {
|
|
75
|
+
ref,
|
|
76
|
+
style: computedStyle,
|
|
77
|
+
...rest,
|
|
78
|
+
children: items.map((child, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [child, index < items.length - 1 && /* @__PURE__ */ jsx("div", {
|
|
79
|
+
style: dividerStyle,
|
|
80
|
+
"aria-hidden": "true"
|
|
81
|
+
})] }, index))
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return /* @__PURE__ */ jsx(Component, {
|
|
85
|
+
ref,
|
|
86
|
+
style: computedStyle,
|
|
87
|
+
...rest,
|
|
88
|
+
children
|
|
89
|
+
});
|
|
90
|
+
}));
|
|
91
|
+
/**
|
|
92
|
+
* Horizontal Stack — `<Stack direction="row">` shorthand.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```tsx
|
|
96
|
+
* <HStack spacing="sm" align="center">
|
|
97
|
+
* <Icon name="satellite" />
|
|
98
|
+
* <Body1>SAT-1</Body1>
|
|
99
|
+
* <Badge status="normal">Nominal</Badge>
|
|
100
|
+
* </HStack>
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
var HStack = memo(forwardRef(function HStack(props, ref) {
|
|
104
|
+
return /* @__PURE__ */ jsx(Stack, {
|
|
105
|
+
ref,
|
|
106
|
+
direction: "row",
|
|
107
|
+
...props
|
|
108
|
+
});
|
|
109
|
+
}));
|
|
110
|
+
/**
|
|
111
|
+
* Vertical Stack — `<Stack direction="column">` shorthand.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```tsx
|
|
115
|
+
* <VStack spacing="md">
|
|
116
|
+
* <TelemetryCard />
|
|
117
|
+
* <LinkBudgetCard />
|
|
118
|
+
* </VStack>
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
var VStack = memo(forwardRef(function VStack(props, ref) {
|
|
122
|
+
return /* @__PURE__ */ jsx(Stack, {
|
|
123
|
+
ref,
|
|
124
|
+
direction: "column",
|
|
125
|
+
...props
|
|
126
|
+
});
|
|
58
127
|
}));
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
));
|
|
64
|
-
const VStack = memo(forwardRef(
|
|
65
|
-
function VStack2(props, ref) {
|
|
66
|
-
return /* @__PURE__ */ jsx(Stack, { ref, direction: "column", ...props });
|
|
67
|
-
}
|
|
68
|
-
));
|
|
69
|
-
export {
|
|
70
|
-
HStack,
|
|
71
|
-
Stack,
|
|
72
|
-
VStack
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=Stack.js.map
|
|
128
|
+
//#endregion
|
|
129
|
+
export { HStack, Stack, Stack as default, VStack };
|
|
130
|
+
|
|
131
|
+
//# sourceMappingURL=Stack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stack.js","sources":["../../../../src/react/core/layout/Stack.tsx"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"Stack.js","names":[],"sources":["../../../../src/react/core/layout/Stack.tsx"],"sourcesContent":["/**\n * @zendir/ui - Stack Layout Primitives\n *\n * Consistent spacing stacks — the most common layout pattern in operator dashboards.\n * Stack, HStack, and VStack provide directional flex with uniform gaps.\n *\n * @example\n * ```tsx\n * // Vertical stack (default)\n * <Stack spacing=\"md\">\n * <TelemetryCard />\n * <LinkBudgetCard />\n * <SpacecraftCard />\n * </Stack>\n *\n * // Horizontal stack\n * <HStack spacing=\"sm\" align=\"center\">\n * <StatusIndicator status=\"normal\" />\n * <Body1>Connected</Body1>\n * </HStack>\n *\n * // Responsive spacing\n * <VStack spacing={['sm', 'md', 'lg']}>\n * <Content />\n * </VStack>\n * ```\n */\n\nimport React, { memo, forwardRef } from \"react\";\nimport { useTheme } from \"../../theme\";\nimport { useBreakpoint } from \"./useBreakpoint\";\nimport { resolveResponsiveSpacing } from \"./responsive\";\nimport type { ResponsiveValue } from \"./useBreakpoint\";\nimport type { SpacingToken } from \"./responsive\";\n\ntype SpacingInput = SpacingToken | string | number;\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Element type to render */\n as?: React.ElementType;\n /** Stack direction */\n direction?: ResponsiveValue<\n \"row\" | \"column\" | \"row-reverse\" | \"column-reverse\"\n >;\n /** Space between children (spacing token, px, or CSS string) */\n spacing?: ResponsiveValue<SpacingInput>;\n /** Align items (cross-axis) */\n align?: \"flex-start\" | \"flex-end\" | \"center\" | \"baseline\" | \"stretch\";\n /** Justify content (main-axis) */\n justify?:\n | \"flex-start\"\n | \"flex-end\"\n | \"center\"\n | \"space-between\"\n | \"space-around\"\n | \"space-evenly\";\n /** Flex wrap */\n wrap?: \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n /** Full width */\n fullWidth?: boolean;\n /** Full height */\n fullHeight?: boolean;\n /** Divider between items — renders a themed line */\n divider?: boolean;\n /** Children */\n children?: React.ReactNode;\n}\n\nexport const Stack = memo(\n forwardRef<HTMLDivElement, StackProps>(function Stack(\n {\n as: Component = \"div\",\n direction = \"column\",\n spacing = \"md\",\n align,\n justify,\n wrap,\n fullWidth = false,\n fullHeight = false,\n divider = false,\n style,\n children,\n ...rest\n },\n ref,\n ): React.ReactElement {\n const { tokens } = useTheme();\n const { breakpoint } = useBreakpoint();\n\n const resolvedSpacing = resolveResponsiveSpacing(\n spacing,\n breakpoint,\n tokens,\n );\n const resolvedDirection = Array.isArray(direction)\n ? (direction[\n Math.min(\n [\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"].indexOf(breakpoint),\n direction.length - 1,\n )\n ] ?? direction[direction.length - 1])\n : direction;\n const isVertical =\n resolvedDirection === \"column\" || resolvedDirection === \"column-reverse\";\n\n const computedStyle: React.CSSProperties = {\n display: \"flex\",\n flexDirection: resolvedDirection as\n | \"row\"\n | \"column\"\n | \"row-reverse\"\n | \"column-reverse\",\n ...(divider || !resolvedSpacing ? {} : { gap: resolvedSpacing }),\n alignItems: align,\n justifyContent: justify,\n flexWrap: wrap,\n ...(fullWidth ? { width: \"100%\" } : {}),\n ...(fullHeight ? { height: \"100%\" } : {}),\n ...style,\n };\n\n // If divider is enabled, interleave divider elements\n if (divider) {\n const items = React.Children.toArray(children).filter(Boolean);\n const dividerStyle: React.CSSProperties = isVertical\n ? {\n width: \"100%\",\n height: \"1px\",\n backgroundColor: tokens.colors.border.muted,\n flexShrink: 0,\n margin: `${resolvedSpacing} 0`,\n }\n : {\n height: \"100%\",\n width: \"1px\",\n backgroundColor: tokens.colors.border.muted,\n flexShrink: 0,\n alignSelf: \"stretch\",\n margin: `0 ${resolvedSpacing}`,\n };\n\n return (\n <Component ref={ref} style={computedStyle} {...rest}>\n {items.map((child, index) => (\n <React.Fragment key={index}>\n {child}\n {index < items.length - 1 && (\n <div style={dividerStyle} aria-hidden=\"true\" />\n )}\n </React.Fragment>\n ))}\n </Component>\n );\n }\n\n return (\n <Component ref={ref} style={computedStyle} {...rest}>\n {children}\n </Component>\n );\n }),\n);\n\n/**\n * Horizontal Stack — `<Stack direction=\"row\">` shorthand.\n *\n * @example\n * ```tsx\n * <HStack spacing=\"sm\" align=\"center\">\n * <Icon name=\"satellite\" />\n * <Body1>SAT-1</Body1>\n * <Badge status=\"normal\">Nominal</Badge>\n * </HStack>\n * ```\n */\nexport const HStack = memo(\n forwardRef<HTMLDivElement, Omit<StackProps, \"direction\">>(\n function HStack(props, ref) {\n return <Stack ref={ref} direction=\"row\" {...props} />;\n },\n ),\n);\n\n/**\n * Vertical Stack — `<Stack direction=\"column\">` shorthand.\n *\n * @example\n * ```tsx\n * <VStack spacing=\"md\">\n * <TelemetryCard />\n * <LinkBudgetCard />\n * </VStack>\n * ```\n */\nexport const VStack = memo(\n forwardRef<HTMLDivElement, Omit<StackProps, \"direction\">>(\n function VStack(props, ref) {\n return <Stack ref={ref} direction=\"column\" {...props} />;\n },\n ),\n);\n\nexport default Stack;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoEA,IAAa,QAAQ,KACnB,WAAuC,SAAS,MAC9C,EACE,IAAI,YAAY,OAChB,YAAY,UACZ,UAAU,MACV,OACA,SACA,MACA,YAAY,OACZ,aAAa,OACb,UAAU,OACV,OACA,UACA,GAAG,QAEL,KACoB;CACpB,MAAM,EAAE,WAAW,SAAS;CAC5B,MAAM,EAAE,eAAe,cAAc;CAErC,MAAM,kBAAkB,yBACtB,SACA,YACA,MACF;CACA,MAAM,oBAAoB,MAAM,QAAQ,SAAS,IAC5C,UACC,KAAK,IACH;EAAC;EAAQ;EAAM;EAAM;EAAM;EAAM;CAAK,CAAC,CAAC,QAAQ,UAAU,GAC1D,UAAU,SAAS,CACrB,MACG,UAAU,UAAU,SAAS,KAClC;CACJ,MAAM,aACJ,sBAAsB,YAAY,sBAAsB;CAE1D,MAAM,gBAAqC;EACzC,SAAS;EACT,eAAe;EAKf,GAAI,WAAW,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,gBAAgB;EAC9D,YAAY;EACZ,gBAAgB;EAChB,UAAU;EACV,GAAI,YAAY,EAAE,OAAO,OAAO,IAAI,CAAC;EACrC,GAAI,aAAa,EAAE,QAAQ,OAAO,IAAI,CAAC;EACvC,GAAG;CACL;CAGA,IAAI,SAAS;EACX,MAAM,QAAQ,MAAM,SAAS,QAAQ,QAAQ,CAAC,CAAC,OAAO,OAAO;EAC7D,MAAM,eAAoC,aACtC;GACE,OAAO;GACP,QAAQ;GACR,iBAAiB,OAAO,OAAO,OAAO;GACtC,YAAY;GACZ,QAAQ,GAAG,gBAAgB;EAC7B,IACA;GACE,QAAQ;GACR,OAAO;GACP,iBAAiB,OAAO,OAAO,OAAO;GACtC,YAAY;GACZ,WAAW;GACX,QAAQ,KAAK;EACf;EAEJ,OACE,oBAAC,WAAD;GAAgB;GAAK,OAAO;GAAe,GAAI;aAC5C,MAAM,KAAK,OAAO,UACjB,qBAAC,MAAM,UAAP,EAAA,UAAA,CACG,OACA,QAAQ,MAAM,SAAS,KACtB,oBAAC,OAAD;IAAK,OAAO;IAAc,eAAY;GAAQ,CAAA,CAElC,EAAA,GALK,KAKL,CACjB;EACQ,CAAA;CAEf;CAEA,OACE,oBAAC,WAAD;EAAgB;EAAK,OAAO;EAAe,GAAI;EAC5C;CACQ,CAAA;AAEf,CAAC,CACH;;;;;;;;;;;;;AAcA,IAAa,SAAS,KACpB,WACE,SAAS,OAAO,OAAO,KAAK;CAC1B,OAAO,oBAAC,OAAD;EAAY;EAAK,WAAU;EAAM,GAAI;CAAQ,CAAA;AACtD,CACF,CACF;;;;;;;;;;;;AAaA,IAAa,SAAS,KACpB,WACE,SAAS,OAAO,OAAO,KAAK;CAC1B,OAAO,oBAAC,OAAD;EAAY;EAAK,WAAU;EAAS,GAAI;CAAQ,CAAA;AACzD,CACF,CACF"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ThemeTokens } from '../../theme';
|
|
2
2
|
import { Breakpoint, ResponsiveValue } from './useBreakpoint';
|
|
3
|
-
|
|
4
3
|
/** Spacing token names matching ThemeTokens.spacing */
|
|
5
|
-
export type SpacingToken =
|
|
4
|
+
export type SpacingToken = "xxs" | "xs" | "sm" | "smd" | "md" | "mdl" | "lg" | "xl" | "xxl";
|
|
6
5
|
/** Value that can be a spacing token, a CSS string, or a number (px) */
|
|
7
6
|
type SpacingInput = SpacingToken | string | number;
|
|
8
7
|
/**
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
import { resolveResponsiveValue } from "./useBreakpoint.js";
|
|
2
|
+
//#region src/react/core/layout/responsive.ts
|
|
3
|
+
/**
|
|
4
|
+
* Resolve a spacing value to a CSS string.
|
|
5
|
+
* - SpacingToken ('xs', 'sm', etc.) → looks up token value
|
|
6
|
+
* - number → converts to px string
|
|
7
|
+
* - string → passes through (e.g., '1rem', '50%')
|
|
8
|
+
*/
|
|
2
9
|
function resolveSpacing(value, tokens) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
if (typeof value === "number") {
|
|
8
|
-
return `${value}px`;
|
|
9
|
-
}
|
|
10
|
-
return value;
|
|
10
|
+
if (value === void 0 || value === null) return void 0;
|
|
11
|
+
if (typeof value === "string" && value in tokens.spacing) return tokens.spacing[value];
|
|
12
|
+
if (typeof value === "number") return `${value}px`;
|
|
13
|
+
return value;
|
|
11
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a responsive spacing value at the current breakpoint.
|
|
17
|
+
*/
|
|
12
18
|
function resolveResponsiveSpacing(value, breakpoint, tokens) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return resolveSpacing(resolved, tokens);
|
|
19
|
+
if (value === void 0 || value === null) return void 0;
|
|
20
|
+
return resolveSpacing(Array.isArray(value) ? resolveResponsiveValue(value, breakpoint) : value, tokens);
|
|
16
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Resolve a responsive value (non-spacing) at the current breakpoint.
|
|
24
|
+
*/
|
|
17
25
|
function resolveResponsive(value, breakpoint) {
|
|
18
|
-
|
|
19
|
-
|
|
26
|
+
if (value === void 0 || value === null) return void 0;
|
|
27
|
+
return Array.isArray(value) ? resolveResponsiveValue(value, breakpoint) : value;
|
|
20
28
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
26
|
-
//# sourceMappingURL=responsive.js.map
|
|
29
|
+
//#endregion
|
|
30
|
+
export { resolveResponsive, resolveResponsiveSpacing, resolveSpacing };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=responsive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responsive.js","sources":["../../../../src/react/core/layout/responsive.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"responsive.js","names":[],"sources":["../../../../src/react/core/layout/responsive.ts"],"sourcesContent":["/**\n * @zendir/ui - Responsive Utilities\n *\n * Helpers for resolving responsive values and spacing tokens to CSS values.\n * Used internally by layout primitives (Box, Flex, Grid, Stack).\n */\n\nimport type { ThemeTokens } from \"../../theme\";\nimport type { Breakpoint, ResponsiveValue } from \"./useBreakpoint\";\nimport { resolveResponsiveValue } from \"./useBreakpoint\";\n\n/** Spacing token names matching ThemeTokens.spacing */\nexport type SpacingToken =\n | \"xxs\"\n | \"xs\"\n | \"sm\"\n | \"smd\"\n | \"md\"\n | \"mdl\"\n | \"lg\"\n | \"xl\"\n | \"xxl\";\n\n/** Value that can be a spacing token, a CSS string, or a number (px) */\ntype SpacingInput = SpacingToken | string | number;\n\n/**\n * Resolve a spacing value to a CSS string.\n * - SpacingToken ('xs', 'sm', etc.) → looks up token value\n * - number → converts to px string\n * - string → passes through (e.g., '1rem', '50%')\n */\nexport function resolveSpacing(\n value: SpacingInput | undefined,\n tokens: ThemeTokens,\n): string | undefined {\n if (value === undefined || value === null) return undefined;\n\n // Spacing token\n if (typeof value === \"string\" && value in tokens.spacing) {\n return tokens.spacing[value as SpacingToken];\n }\n\n // Number → px\n if (typeof value === \"number\") {\n return `${value}px`;\n }\n\n // CSS string passthrough\n return value;\n}\n\n/**\n * Resolve a responsive spacing value at the current breakpoint.\n */\nexport function resolveResponsiveSpacing(\n value: ResponsiveValue<SpacingInput> | undefined,\n breakpoint: Breakpoint,\n tokens: ThemeTokens,\n): string | undefined {\n if (value === undefined || value === null) return undefined;\n\n const resolved = Array.isArray(value)\n ? resolveResponsiveValue(value, breakpoint)\n : value;\n\n return resolveSpacing(resolved, tokens);\n}\n\n/**\n * Resolve a responsive value (non-spacing) at the current breakpoint.\n */\nexport function resolveResponsive<T>(\n value: ResponsiveValue<T> | undefined,\n breakpoint: Breakpoint,\n): T | undefined {\n if (value === undefined || value === null) return undefined;\n return Array.isArray(value)\n ? resolveResponsiveValue(value, breakpoint)\n : value;\n}\n"],"mappings":";;;;;;;;AAgCA,SAAgB,eACd,OACA,QACoB;CACpB,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM,OAAO,KAAA;CAGlD,IAAI,OAAO,UAAU,YAAY,SAAS,OAAO,SAC/C,OAAO,OAAO,QAAQ;CAIxB,IAAI,OAAO,UAAU,UACnB,OAAO,GAAG,MAAM;CAIlB,OAAO;AACT;;;;AAKA,SAAgB,yBACd,OACA,YACA,QACoB;CACpB,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM,OAAO,KAAA;CAMlD,OAAO,eAJU,MAAM,QAAQ,KAAK,IAChC,uBAAuB,OAAO,UAAU,IACxC,OAE4B,MAAM;AACxC;;;;AAKA,SAAgB,kBACd,OACA,YACe;CACf,IAAI,UAAU,KAAA,KAAa,UAAU,MAAM,OAAO,KAAA;CAClD,OAAO,MAAM,QAAQ,KAAK,IACtB,uBAAuB,OAAO,UAAU,IACxC;AACN"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* const { isMobile, isTablet, isDesktop, breakpoint, width } = useBreakpoint();
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
|
-
export type Breakpoint =
|
|
19
|
+
export type Breakpoint = "base" | "sm" | "md" | "lg" | "xl" | "xxl";
|
|
20
20
|
/** Responsive value: single value or [base, sm?, md?, lg?, xl?, xxl?] */
|
|
21
21
|
export type ResponsiveValue<T> = T | [T, T?, T?, T?, T?, T?];
|
|
22
22
|
export declare const BREAKPOINTS: {
|
|
@@ -1,73 +1,126 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
2
|
+
//#region src/react/core/layout/useBreakpoint.ts
|
|
3
|
+
/**
|
|
4
|
+
* @zendir/ui - Responsive Breakpoint System
|
|
5
|
+
*
|
|
6
|
+
* Breakpoints aligned with Astro UX Design System responsive guidelines.
|
|
7
|
+
* Supports mission control displays (4K) down to mobile field devices.
|
|
8
|
+
*
|
|
9
|
+
* Breakpoints:
|
|
10
|
+
* - sm: 640px — Mobile landscape / small tablets
|
|
11
|
+
* - md: 768px — Tablets
|
|
12
|
+
* - lg: 1024px — Laptops / desktop
|
|
13
|
+
* - xl: 1280px — Large monitors
|
|
14
|
+
* - xxl: 1920px — Mission control displays (HD)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { isMobile, isTablet, isDesktop, breakpoint, width } = useBreakpoint();
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
var BREAKPOINTS = {
|
|
22
|
+
base: 0,
|
|
23
|
+
sm: 640,
|
|
24
|
+
md: 768,
|
|
25
|
+
lg: 1024,
|
|
26
|
+
xl: 1280,
|
|
27
|
+
xxl: 1920
|
|
9
28
|
};
|
|
10
|
-
|
|
29
|
+
var BREAKPOINT_ORDER = [
|
|
30
|
+
"base",
|
|
31
|
+
"sm",
|
|
32
|
+
"md",
|
|
33
|
+
"lg",
|
|
34
|
+
"xl",
|
|
35
|
+
"xxl"
|
|
36
|
+
];
|
|
11
37
|
function getBreakpoint(width) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
38
|
+
if (width >= BREAKPOINTS.xxl) return "xxl";
|
|
39
|
+
if (width >= BREAKPOINTS.xl) return "xl";
|
|
40
|
+
if (width >= BREAKPOINTS.lg) return "lg";
|
|
41
|
+
if (width >= BREAKPOINTS.md) return "md";
|
|
42
|
+
if (width >= BREAKPOINTS.sm) return "sm";
|
|
43
|
+
return "base";
|
|
18
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Hook for responsive breakpoint detection.
|
|
47
|
+
*
|
|
48
|
+
* Uses matchMedia for efficient, debounce-free breakpoint tracking.
|
|
49
|
+
* Respects SSR by defaulting to 'lg' (desktop).
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* const { isMobile, isDesktop, breakpoint } = useBreakpoint();
|
|
54
|
+
*
|
|
55
|
+
* return (
|
|
56
|
+
* <Grid columns={isMobile ? 1 : 3}>
|
|
57
|
+
* ...
|
|
58
|
+
* </Grid>
|
|
59
|
+
* );
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
19
62
|
function useBreakpoint() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
63
|
+
const [width, setWidth] = useState(() => {
|
|
64
|
+
if (typeof window !== "undefined") return window.innerWidth;
|
|
65
|
+
return 1024;
|
|
66
|
+
});
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (typeof window === "undefined") return;
|
|
69
|
+
let rafId;
|
|
70
|
+
const handleResize = () => {
|
|
71
|
+
cancelAnimationFrame(rafId);
|
|
72
|
+
rafId = requestAnimationFrame(() => {
|
|
73
|
+
setWidth(window.innerWidth);
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
window.addEventListener("resize", handleResize, { passive: true });
|
|
77
|
+
return () => {
|
|
78
|
+
window.removeEventListener("resize", handleResize);
|
|
79
|
+
cancelAnimationFrame(rafId);
|
|
80
|
+
};
|
|
81
|
+
}, []);
|
|
82
|
+
const breakpoint = useMemo(() => getBreakpoint(width), [width]);
|
|
83
|
+
const isAbove = useCallback((bp) => {
|
|
84
|
+
return width >= BREAKPOINTS[bp];
|
|
85
|
+
}, [width]);
|
|
86
|
+
const isBelow = useCallback((bp) => {
|
|
87
|
+
return width < BREAKPOINTS[bp];
|
|
88
|
+
}, [width]);
|
|
89
|
+
return useMemo(() => ({
|
|
90
|
+
breakpoint,
|
|
91
|
+
width,
|
|
92
|
+
isMobile: width < BREAKPOINTS.md,
|
|
93
|
+
isTablet: width >= BREAKPOINTS.md && width < BREAKPOINTS.lg,
|
|
94
|
+
isDesktop: width >= BREAKPOINTS.lg,
|
|
95
|
+
isWidescreen: width >= BREAKPOINTS.xxl,
|
|
96
|
+
isAbove,
|
|
97
|
+
isBelow
|
|
98
|
+
}), [
|
|
99
|
+
breakpoint,
|
|
100
|
+
width,
|
|
101
|
+
isAbove,
|
|
102
|
+
isBelow
|
|
103
|
+
]);
|
|
56
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolve a responsive value based on current breakpoint.
|
|
107
|
+
*
|
|
108
|
+
* Given `[1, 2, 3]` at breakpoint 'lg', returns 3.
|
|
109
|
+
* Falls back to the last defined value for higher breakpoints.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* resolveResponsiveValue([1, 2, 3], 'lg') // → 3
|
|
113
|
+
* resolveResponsiveValue([1, 2], 'xl') // → 2 (falls back to last defined)
|
|
114
|
+
* resolveResponsiveValue(5, 'md') // → 5 (non-array passthrough)
|
|
115
|
+
*/
|
|
57
116
|
function resolveResponsiveValue(value, breakpoint) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
for (let i = 0; i < value.length; i++) {
|
|
64
|
-
if (value[i] !== void 0 && value[i] !== null) return value[i];
|
|
65
|
-
}
|
|
66
|
-
return value[0];
|
|
117
|
+
if (!Array.isArray(value)) return value;
|
|
118
|
+
const index = BREAKPOINT_ORDER.indexOf(breakpoint);
|
|
119
|
+
for (let i = Math.min(index, value.length - 1); i >= 0; i--) if (value[i] !== void 0 && value[i] !== null) return value[i];
|
|
120
|
+
for (let i = 0; i < value.length; i++) if (value[i] !== void 0 && value[i] !== null) return value[i];
|
|
121
|
+
return value[0];
|
|
67
122
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
//# sourceMappingURL=useBreakpoint.js.map
|
|
123
|
+
//#endregion
|
|
124
|
+
export { BREAKPOINTS, resolveResponsiveValue, useBreakpoint };
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=useBreakpoint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBreakpoint.js","sources":["../../../../src/react/core/layout/useBreakpoint.ts"],"sourcesContent":["/**\
|
|
1
|
+
{"version":3,"file":"useBreakpoint.js","names":[],"sources":["../../../../src/react/core/layout/useBreakpoint.ts"],"sourcesContent":["/**\n * @zendir/ui - Responsive Breakpoint System\n *\n * Breakpoints aligned with Astro UX Design System responsive guidelines.\n * Supports mission control displays (4K) down to mobile field devices.\n *\n * Breakpoints:\n * - sm: 640px — Mobile landscape / small tablets\n * - md: 768px — Tablets\n * - lg: 1024px — Laptops / desktop\n * - xl: 1280px — Large monitors\n * - xxl: 1920px — Mission control displays (HD)\n *\n * @example\n * ```tsx\n * const { isMobile, isTablet, isDesktop, breakpoint, width } = useBreakpoint();\n * ```\n */\n\nimport { useState, useEffect, useCallback, useMemo } from \"react\";\n\nexport type Breakpoint = \"base\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n\n/** Responsive value: single value or [base, sm?, md?, lg?, xl?, xxl?] */\nexport type ResponsiveValue<T> = T | [T, T?, T?, T?, T?, T?];\n\nexport const BREAKPOINTS = {\n base: 0,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n xxl: 1920,\n} as const;\n\nconst BREAKPOINT_ORDER: Breakpoint[] = [\"base\", \"sm\", \"md\", \"lg\", \"xl\", \"xxl\"];\n\nfunction getBreakpoint(width: number): Breakpoint {\n if (width >= BREAKPOINTS.xxl) return \"xxl\";\n if (width >= BREAKPOINTS.xl) return \"xl\";\n if (width >= BREAKPOINTS.lg) return \"lg\";\n if (width >= BREAKPOINTS.md) return \"md\";\n if (width >= BREAKPOINTS.sm) return \"sm\";\n return \"base\";\n}\n\nexport interface UseBreakpointReturn {\n /** Current breakpoint name */\n breakpoint: Breakpoint;\n /** Current viewport width in px */\n width: number;\n /** True when viewport < 768px (base, sm) */\n isMobile: boolean;\n /** True when viewport >= 768px and < 1024px */\n isTablet: boolean;\n /** True when viewport >= 1024px */\n isDesktop: boolean;\n /** True when viewport >= 1920px (mission control) */\n isWidescreen: boolean;\n /** Check if viewport is at or above a given breakpoint */\n isAbove: (bp: Breakpoint) => boolean;\n /** Check if viewport is below a given breakpoint */\n isBelow: (bp: Breakpoint) => boolean;\n}\n\n/**\n * Hook for responsive breakpoint detection.\n *\n * Uses matchMedia for efficient, debounce-free breakpoint tracking.\n * Respects SSR by defaulting to 'lg' (desktop).\n *\n * @example\n * ```tsx\n * const { isMobile, isDesktop, breakpoint } = useBreakpoint();\n *\n * return (\n * <Grid columns={isMobile ? 1 : 3}>\n * ...\n * </Grid>\n * );\n * ```\n */\nexport function useBreakpoint(): UseBreakpointReturn {\n const [width, setWidth] = useState(() => {\n if (typeof window !== \"undefined\") return window.innerWidth;\n return 1024; // SSR default: desktop\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n let rafId: number;\n const handleResize = () => {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(() => {\n setWidth(window.innerWidth);\n });\n };\n\n window.addEventListener(\"resize\", handleResize, { passive: true });\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n cancelAnimationFrame(rafId);\n };\n }, []);\n\n const breakpoint = useMemo(() => getBreakpoint(width), [width]);\n\n const isAbove = useCallback(\n (bp: Breakpoint) => {\n return width >= BREAKPOINTS[bp];\n },\n [width],\n );\n\n const isBelow = useCallback(\n (bp: Breakpoint) => {\n return width < BREAKPOINTS[bp];\n },\n [width],\n );\n\n return useMemo(\n () => ({\n breakpoint,\n width,\n isMobile: width < BREAKPOINTS.md,\n isTablet: width >= BREAKPOINTS.md && width < BREAKPOINTS.lg,\n isDesktop: width >= BREAKPOINTS.lg,\n isWidescreen: width >= BREAKPOINTS.xxl,\n isAbove,\n isBelow,\n }),\n [breakpoint, width, isAbove, isBelow],\n );\n}\n\n/**\n * Resolve a responsive value based on current breakpoint.\n *\n * Given `[1, 2, 3]` at breakpoint 'lg', returns 3.\n * Falls back to the last defined value for higher breakpoints.\n *\n * @example\n * resolveResponsiveValue([1, 2, 3], 'lg') // → 3\n * resolveResponsiveValue([1, 2], 'xl') // → 2 (falls back to last defined)\n * resolveResponsiveValue(5, 'md') // → 5 (non-array passthrough)\n */\nexport function resolveResponsiveValue<T>(\n value: ResponsiveValue<T>,\n breakpoint: Breakpoint,\n): T {\n if (!Array.isArray(value)) return value;\n\n const index = BREAKPOINT_ORDER.indexOf(breakpoint);\n\n // Walk backwards from current breakpoint to find a defined value\n for (let i = Math.min(index, value.length - 1); i >= 0; i--) {\n if (value[i] !== undefined && value[i] !== null) return value[i] as T;\n }\n\n // Fallback: find first defined value in the responsive array.\n for (let i = 0; i < value.length; i++) {\n if (value[i] !== undefined && value[i] !== null) return value[i] as T;\n }\n\n return value[0] as T;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,IAAa,cAAc;CACzB,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,KAAK;AACP;AAEA,IAAM,mBAAiC;CAAC;CAAQ;CAAM;CAAM;CAAM;CAAM;AAAK;AAE7E,SAAS,cAAc,OAA2B;CAChD,IAAI,SAAS,YAAY,KAAK,OAAO;CACrC,IAAI,SAAS,YAAY,IAAI,OAAO;CACpC,IAAI,SAAS,YAAY,IAAI,OAAO;CACpC,IAAI,SAAS,YAAY,IAAI,OAAO;CACpC,IAAI,SAAS,YAAY,IAAI,OAAO;CACpC,OAAO;AACT;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,gBAAqC;CACnD,MAAM,CAAC,OAAO,YAAY,eAAe;EACvC,IAAI,OAAO,WAAW,aAAa,OAAO,OAAO;EACjD,OAAO;CACT,CAAC;CAED,gBAAgB;EACd,IAAI,OAAO,WAAW,aAAa;EAEnC,IAAI;EACJ,MAAM,qBAAqB;GACzB,qBAAqB,KAAK;GAC1B,QAAQ,4BAA4B;IAClC,SAAS,OAAO,UAAU;GAC5B,CAAC;EACH;EAEA,OAAO,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;EACjE,aAAa;GACX,OAAO,oBAAoB,UAAU,YAAY;GACjD,qBAAqB,KAAK;EAC5B;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,aAAa,cAAc,cAAc,KAAK,GAAG,CAAC,KAAK,CAAC;CAE9D,MAAM,UAAU,aACb,OAAmB;EAClB,OAAO,SAAS,YAAY;CAC9B,GACA,CAAC,KAAK,CACR;CAEA,MAAM,UAAU,aACb,OAAmB;EAClB,OAAO,QAAQ,YAAY;CAC7B,GACA,CAAC,KAAK,CACR;CAEA,OAAO,eACE;EACL;EACA;EACA,UAAU,QAAQ,YAAY;EAC9B,UAAU,SAAS,YAAY,MAAM,QAAQ,YAAY;EACzD,WAAW,SAAS,YAAY;EAChC,cAAc,SAAS,YAAY;EACnC;EACA;CACF,IACA;EAAC;EAAY;EAAO;EAAS;CAAO,CACtC;AACF;;;;;;;;;;;;AAaA,SAAgB,uBACd,OACA,YACG;CACH,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO;CAElC,MAAM,QAAQ,iBAAiB,QAAQ,UAAU;CAGjD,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,MAAM,SAAS,CAAC,GAAG,KAAK,GAAG,KACtD,IAAI,MAAM,OAAO,KAAA,KAAa,MAAM,OAAO,MAAM,OAAO,MAAM;CAIhE,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,IAAI,MAAM,OAAO,KAAA,KAAa,MAAM,OAAO,MAAM,OAAO,MAAM;CAGhE,OAAO,MAAM;AACf"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { default as React, ReactNode } from 'react';
|
|
2
2
|
import { ThemeVariant, ThemeMode } from '../../theme';
|
|
3
|
-
|
|
4
3
|
export interface AppBarBranding {
|
|
5
4
|
/** Logo image URL (takes precedence over text) */
|
|
6
5
|
logoUrl?: string;
|
|
@@ -53,7 +52,7 @@ export interface AppBarProps {
|
|
|
53
52
|
/** Let center slot grow to fill space and stay centered (e.g. simulation controls). */
|
|
54
53
|
centerGrow?: boolean;
|
|
55
54
|
/** Bar variant: default (52px) or dense (44px min height, tighter padding/gap). */
|
|
56
|
-
variant?:
|
|
55
|
+
variant?: "default" | "dense";
|
|
57
56
|
/** Callback when theme changes */
|
|
58
57
|
onThemeChange?: (theme: ThemeVariant) => void;
|
|
59
58
|
/** Callback when mode changes */
|