@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,190 +1,210 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo, useMemo } from "react";
|
|
3
1
|
import { useTheme } from "../../theme/ThemeProvider.js";
|
|
4
2
|
import { classNames } from "../../utils/index.js";
|
|
5
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
3
|
+
import { memo, useMemo } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
//#region src/react/core/navigation/Pagination.tsx
|
|
6
|
+
/**
|
|
7
|
+
* @zendir/ui - Pagination Component
|
|
8
|
+
*
|
|
9
|
+
* Pagination following Astro UX Design System.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <Pagination
|
|
14
|
+
* currentPage={page}
|
|
15
|
+
* totalPages={10}
|
|
16
|
+
* onChange={setPage}
|
|
17
|
+
* />
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
var Pagination = memo(function Pagination({ currentPage, totalPages, onChange, siblingCount = 1, showFirstLast = true, showPrevNext = true, size = "medium", displayMode = "buttons", disabled = false, className = "" }) {
|
|
21
|
+
const { tokens, theme } = useTheme();
|
|
22
|
+
const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
|
|
23
|
+
const config = {
|
|
24
|
+
small: {
|
|
25
|
+
buttonSize: "28px",
|
|
26
|
+
fontSize: tokens.typography.fontSize.xxs
|
|
27
|
+
},
|
|
28
|
+
medium: {
|
|
29
|
+
buttonSize: "34px",
|
|
30
|
+
fontSize: tokens.typography.fontSize.xs
|
|
31
|
+
}
|
|
32
|
+
}[size];
|
|
33
|
+
const pageNumbers = useMemo(() => {
|
|
34
|
+
const range = [];
|
|
35
|
+
const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
|
|
36
|
+
const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
|
|
37
|
+
const showLeftEllipsis = leftSiblingIndex > 2;
|
|
38
|
+
const showRightEllipsis = rightSiblingIndex < totalPages - 1;
|
|
39
|
+
if (!showLeftEllipsis && showRightEllipsis) {
|
|
40
|
+
const leftRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => i + 1);
|
|
41
|
+
range.push(...leftRange, "ellipsis", totalPages);
|
|
42
|
+
} else if (showLeftEllipsis && !showRightEllipsis) {
|
|
43
|
+
const rightRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => totalPages - 3 - 2 * siblingCount + i + 1);
|
|
44
|
+
range.push(1, "ellipsis", ...rightRange);
|
|
45
|
+
} else if (showLeftEllipsis && showRightEllipsis) {
|
|
46
|
+
const middleRange = Array.from({ length: 2 * siblingCount + 1 }, (_, i) => leftSiblingIndex + i);
|
|
47
|
+
range.push(1, "ellipsis", ...middleRange, "ellipsis", totalPages);
|
|
48
|
+
} else range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));
|
|
49
|
+
return range;
|
|
50
|
+
}, [
|
|
51
|
+
currentPage,
|
|
52
|
+
totalPages,
|
|
53
|
+
siblingCount
|
|
54
|
+
]);
|
|
55
|
+
const buttonStyle = {
|
|
56
|
+
width: config.buttonSize,
|
|
57
|
+
height: config.buttonSize,
|
|
58
|
+
display: "flex",
|
|
59
|
+
alignItems: "center",
|
|
60
|
+
justifyContent: "center",
|
|
61
|
+
fontSize: config.fontSize,
|
|
62
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
63
|
+
fontWeight: tokens.typography.fontWeight.medium,
|
|
64
|
+
backgroundColor: isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent",
|
|
65
|
+
border: `1px solid ${tokens.colors.border.muted}`,
|
|
66
|
+
borderRadius: tokens.borderRadius.md,
|
|
67
|
+
cursor: disabled ? "not-allowed" : "pointer",
|
|
68
|
+
opacity: disabled ? .5 : 1,
|
|
69
|
+
transition: `all ${tokens.animation.fast}`,
|
|
70
|
+
color: tokens.colors.text.primary,
|
|
71
|
+
backdropFilter: isTransparentTheme ? "blur(8px)" : void 0,
|
|
72
|
+
WebkitBackdropFilter: isTransparentTheme ? "blur(8px)" : void 0
|
|
73
|
+
};
|
|
74
|
+
const activeButtonStyle = {
|
|
75
|
+
...buttonStyle,
|
|
76
|
+
backgroundColor: tokens.colors.accent.primary,
|
|
77
|
+
borderColor: tokens.colors.accent.primary,
|
|
78
|
+
color: tokens.colors.text.inverse,
|
|
79
|
+
boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`
|
|
80
|
+
};
|
|
81
|
+
const handleClick = (page) => {
|
|
82
|
+
if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) onChange(page);
|
|
83
|
+
};
|
|
84
|
+
const NavButton = ({ direction, targetPage, children }) => {
|
|
85
|
+
const isDisabled = disabled || (direction === "first" || direction === "prev" ? currentPage <= 1 : currentPage >= totalPages);
|
|
86
|
+
return /* @__PURE__ */ jsx("button", {
|
|
87
|
+
type: "button",
|
|
88
|
+
onClick: () => handleClick(targetPage),
|
|
89
|
+
disabled: isDisabled,
|
|
90
|
+
"aria-label": direction === "first" ? "Go to first page" : direction === "prev" ? "Go to previous page" : direction === "next" ? "Go to next page" : "Go to last page",
|
|
91
|
+
style: {
|
|
92
|
+
...buttonStyle,
|
|
93
|
+
opacity: isDisabled ? .3 : 1,
|
|
94
|
+
cursor: isDisabled ? "not-allowed" : "pointer"
|
|
95
|
+
},
|
|
96
|
+
children
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
return /* @__PURE__ */ jsxs("nav", {
|
|
100
|
+
className: classNames("zendir-pagination", className),
|
|
101
|
+
"aria-label": "Pagination",
|
|
102
|
+
style: {
|
|
103
|
+
display: "flex",
|
|
104
|
+
alignItems: "center",
|
|
105
|
+
gap: tokens.spacing.xs,
|
|
106
|
+
padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,
|
|
107
|
+
borderRadius: tokens.borderRadius.lg,
|
|
108
|
+
...tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` },
|
|
109
|
+
background: isTransparentTheme ? `${tokens.colors.background.surface}66` : `${tokens.colors.background.surface}66`,
|
|
110
|
+
backdropFilter: isTransparentTheme ? "blur(10px)" : void 0,
|
|
111
|
+
WebkitBackdropFilter: isTransparentTheme ? "blur(10px)" : void 0
|
|
112
|
+
},
|
|
113
|
+
children: [
|
|
114
|
+
showFirstLast && /* @__PURE__ */ jsx(NavButton, {
|
|
115
|
+
direction: "first",
|
|
116
|
+
targetPage: 1,
|
|
117
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
118
|
+
width: "16",
|
|
119
|
+
height: "16",
|
|
120
|
+
viewBox: "0 0 24 24",
|
|
121
|
+
fill: "currentColor",
|
|
122
|
+
children: /* @__PURE__ */ jsx("path", { d: "M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z" })
|
|
123
|
+
})
|
|
124
|
+
}),
|
|
125
|
+
showPrevNext && /* @__PURE__ */ jsx(NavButton, {
|
|
126
|
+
direction: "prev",
|
|
127
|
+
targetPage: currentPage - 1,
|
|
128
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
129
|
+
width: "16",
|
|
130
|
+
height: "16",
|
|
131
|
+
viewBox: "0 0 24 24",
|
|
132
|
+
fill: "currentColor",
|
|
133
|
+
children: /* @__PURE__ */ jsx("path", { d: "M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" })
|
|
134
|
+
})
|
|
135
|
+
}),
|
|
136
|
+
displayMode === "text" ? /* @__PURE__ */ jsxs("span", {
|
|
137
|
+
style: {
|
|
138
|
+
padding: `0 ${tokens.spacing.sm}`,
|
|
139
|
+
color: tokens.colors.text.secondary,
|
|
140
|
+
fontSize: tokens.typography.fontSize.xs,
|
|
141
|
+
fontFamily: tokens.typography.fontFamily.mono,
|
|
142
|
+
letterSpacing: "0.02em",
|
|
143
|
+
whiteSpace: "nowrap"
|
|
144
|
+
},
|
|
145
|
+
children: [
|
|
146
|
+
"Page ",
|
|
147
|
+
currentPage,
|
|
148
|
+
" of ",
|
|
149
|
+
totalPages
|
|
150
|
+
]
|
|
151
|
+
}) : pageNumbers.map((page, index) => page === "ellipsis" ? /* @__PURE__ */ jsx("span", {
|
|
152
|
+
style: {
|
|
153
|
+
width: config.buttonSize,
|
|
154
|
+
display: "flex",
|
|
155
|
+
alignItems: "center",
|
|
156
|
+
justifyContent: "center",
|
|
157
|
+
color: tokens.colors.text.muted
|
|
158
|
+
},
|
|
159
|
+
children: "..."
|
|
160
|
+
}, `ellipsis-${index}`) : /* @__PURE__ */ jsx("button", {
|
|
161
|
+
type: "button",
|
|
162
|
+
onClick: () => handleClick(page),
|
|
163
|
+
disabled,
|
|
164
|
+
"aria-current": page === currentPage ? "page" : void 0,
|
|
165
|
+
style: page === currentPage ? activeButtonStyle : buttonStyle,
|
|
166
|
+
onMouseEnter: (e) => {
|
|
167
|
+
if (!disabled && page !== currentPage) {
|
|
168
|
+
e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;
|
|
169
|
+
e.currentTarget.style.borderColor = tokens.colors.accent.primary;
|
|
170
|
+
e.currentTarget.style.transform = "translateY(-1px)";
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
onMouseLeave: (e) => {
|
|
174
|
+
if (!disabled && page !== currentPage) {
|
|
175
|
+
e.currentTarget.style.backgroundColor = isTransparentTheme ? `${tokens.colors.background.surface}99` : "transparent";
|
|
176
|
+
e.currentTarget.style.borderColor = tokens.colors.border.muted;
|
|
177
|
+
e.currentTarget.style.transform = "translateY(0)";
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
children: page
|
|
181
|
+
}, page)),
|
|
182
|
+
showPrevNext && /* @__PURE__ */ jsx(NavButton, {
|
|
183
|
+
direction: "next",
|
|
184
|
+
targetPage: currentPage + 1,
|
|
185
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
186
|
+
width: "16",
|
|
187
|
+
height: "16",
|
|
188
|
+
viewBox: "0 0 24 24",
|
|
189
|
+
fill: "currentColor",
|
|
190
|
+
children: /* @__PURE__ */ jsx("path", { d: "M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" })
|
|
191
|
+
})
|
|
192
|
+
}),
|
|
193
|
+
showFirstLast && /* @__PURE__ */ jsx(NavButton, {
|
|
194
|
+
direction: "last",
|
|
195
|
+
targetPage: totalPages,
|
|
196
|
+
children: /* @__PURE__ */ jsx("svg", {
|
|
197
|
+
width: "16",
|
|
198
|
+
height: "16",
|
|
199
|
+
viewBox: "0 0 24 24",
|
|
200
|
+
fill: "currentColor",
|
|
201
|
+
children: /* @__PURE__ */ jsx("path", { d: "M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z" })
|
|
202
|
+
})
|
|
203
|
+
})
|
|
204
|
+
]
|
|
205
|
+
});
|
|
186
206
|
});
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
//# sourceMappingURL=Pagination.js.map
|
|
207
|
+
//#endregion
|
|
208
|
+
export { Pagination, Pagination as default };
|
|
209
|
+
|
|
210
|
+
//# sourceMappingURL=Pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","sources":["../../../../src/react/core/navigation/Pagination.tsx"],"sourcesContent":["/**\n * @zendir/ui - Pagination Component\n * \n * Pagination following Astro UX Design System.\n * \n * @example\n * ```tsx\n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onChange={setPage}\n * />\n * ```\n */\n\nimport React, { memo, useMemo } from 'react';\nimport { useTheme } from '../../theme';\nimport { classNames } from '../../utils';\n\nexport interface PaginationProps {\n /** Current page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Change handler */\n onChange: (page: number) => void;\n /** Number of page buttons to show */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Show prev/next buttons */\n showPrevNext?: boolean;\n /** Size variant */\n size?: 'small' | 'medium';\n /**\n * Display mode.\n * - `'buttons'` — numbered page buttons with ellipsis (default).\n * - `'text'` — compact \"Page X of Y\" label with prev/next arrows.\n */\n displayMode?: 'buttons' | 'text';\n /** Disabled state */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const Pagination = memo(function Pagination({\n currentPage,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n size = 'medium',\n displayMode = 'buttons',\n disabled = false,\n className = '',\n}: PaginationProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n \n const sizeConfig = {\n small: { buttonSize: '28px', fontSize: tokens.typography.fontSize.xxs },\n medium: { buttonSize: '34px', fontSize: tokens.typography.fontSize.xs },\n };\n const config = sizeConfig[size];\n \n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const range: (number | 'ellipsis')[] = [];\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n \n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < totalPages - 1;\n \n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = Array.from({ length: 3 + 2 * siblingCount }, (_, i) => i + 1);\n range.push(...leftRange, 'ellipsis', totalPages);\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => totalPages - 3 - 2 * siblingCount + i + 1\n );\n range.push(1, 'ellipsis', ...rightRange);\n } else if (showLeftEllipsis && showRightEllipsis) {\n const middleRange = Array.from(\n { length: 2 * siblingCount + 1 },\n (_, i) => leftSiblingIndex + i\n );\n range.push(1, 'ellipsis', ...middleRange, 'ellipsis', totalPages);\n } else {\n range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));\n }\n \n return range;\n }, [currentPage, totalPages, siblingCount]);\n \n const buttonStyle: React.CSSProperties = {\n width: config.buttonSize,\n height: config.buttonSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: config.fontSize,\n fontFamily: tokens.typography.fontFamily.mono,\n fontWeight: tokens.typography.fontWeight.medium,\n backgroundColor: isTransparentTheme ? `${tokens.colors.background.surface}99` : 'transparent',\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n transition: `all ${tokens.animation.fast}`,\n color: tokens.colors.text.primary,\n backdropFilter: isTransparentTheme ? 'blur(8px)' : undefined,\n WebkitBackdropFilter: isTransparentTheme ? 'blur(8px)' : undefined,\n };\n \n const activeButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n backgroundColor: tokens.colors.accent.primary,\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.text.inverse,\n boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`,\n };\n \n const handleClick = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onChange(page);\n }\n };\n \n const NavButton = ({ \n direction, \n targetPage, \n children \n }: { \n direction: 'first' | 'prev' | 'next' | 'last'; \n targetPage: number;\n children: React.ReactNode;\n }) => {\n const isDisabled = disabled || \n (direction === 'first' || direction === 'prev' ? currentPage <= 1 : currentPage >= totalPages);\n \n return (\n <button\n type=\"button\"\n onClick={() => handleClick(targetPage)}\n disabled={isDisabled}\n aria-label={\n direction === 'first' ? 'Go to first page' :\n direction === 'prev' ? 'Go to previous page' :\n direction === 'next' ? 'Go to next page' :\n 'Go to last page'\n }\n style={{\n ...buttonStyle,\n opacity: isDisabled ? 0.3 : 1,\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n }}\n >\n {children}\n </button>\n );\n };\n \n return (\n <nav\n className={classNames('zendir-pagination', className)}\n aria-label=\"Pagination\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.xs,\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.lg,\n ...(tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` }),\n background: isTransparentTheme ? `${tokens.colors.background.surface}66` : `${tokens.colors.background.surface}66`,\n backdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n WebkitBackdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n }}\n >\n {showFirstLast && (\n <NavButton direction=\"first\" targetPage={1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\" />\n </svg>\n </NavButton>\n )}\n \n {showPrevNext && (\n <NavButton direction=\"prev\" targetPage={currentPage - 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </NavButton>\n )}\n \n {displayMode === 'text' ? (\n <span\n style={{\n padding: `0 ${tokens.spacing.sm}`,\n color: tokens.colors.text.secondary,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.mono,\n letterSpacing: '0.02em',\n whiteSpace: 'nowrap',\n }}\n >\n Page {currentPage} of {totalPages}\n </span>\n ) : (\n pageNumbers.map((page, index) => \n page === 'ellipsis' ? (\n <span\n key={`ellipsis-${index}`}\n style={{\n width: config.buttonSize,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: tokens.colors.text.muted,\n }}\n >\n ...\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => handleClick(page)}\n disabled={disabled}\n aria-current={page === currentPage ? 'page' : undefined}\n style={page === currentPage ? activeButtonStyle : buttonStyle}\n onMouseEnter={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;\n e.currentTarget.style.borderColor = tokens.colors.accent.primary;\n e.currentTarget.style.transform = 'translateY(-1px)';\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = isTransparentTheme ? `${tokens.colors.background.surface}99` : 'transparent';\n e.currentTarget.style.borderColor = tokens.colors.border.muted;\n e.currentTarget.style.transform = 'translateY(0)';\n }\n }}\n >\n {page}\n </button>\n )\n )\n )}\n \n {showPrevNext && (\n <NavButton direction=\"next\" targetPage={currentPage + 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </NavButton>\n )}\n \n {showFirstLast && (\n <NavButton direction=\"last\" targetPage={totalPages}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\" />\n </svg>\n </NavButton>\n )}\n </nav>\n );\n});\n\nexport default Pagination;\n"],"names":["Pagination"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Pagination.js","names":[],"sources":["../../../../src/react/core/navigation/Pagination.tsx"],"sourcesContent":["/**\n * @zendir/ui - Pagination Component\n *\n * Pagination following Astro UX Design System.\n *\n * @example\n * ```tsx\n * <Pagination\n * currentPage={page}\n * totalPages={10}\n * onChange={setPage}\n * />\n * ```\n */\n\nimport React, { memo, useMemo } from \"react\";\nimport { useTheme } from \"../../theme\";\nimport { classNames } from \"../../utils\";\n\nexport interface PaginationProps {\n /** Current page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Change handler */\n onChange: (page: number) => void;\n /** Number of page buttons to show */\n siblingCount?: number;\n /** Show first/last buttons */\n showFirstLast?: boolean;\n /** Show prev/next buttons */\n showPrevNext?: boolean;\n /** Size variant */\n size?: \"small\" | \"medium\";\n /**\n * Display mode.\n * - `'buttons'` — numbered page buttons with ellipsis (default).\n * - `'text'` — compact \"Page X of Y\" label with prev/next arrows.\n */\n displayMode?: \"buttons\" | \"text\";\n /** Disabled state */\n disabled?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const Pagination = memo(function Pagination({\n currentPage,\n totalPages,\n onChange,\n siblingCount = 1,\n showFirstLast = true,\n showPrevNext = true,\n size = \"medium\",\n displayMode = \"buttons\",\n disabled = false,\n className = \"\",\n}: PaginationProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === \"transparent\" ||\n theme === \"transparent-bold\" ||\n theme === \"transparent-minimal\";\n\n const sizeConfig = {\n small: { buttonSize: \"28px\", fontSize: tokens.typography.fontSize.xxs },\n medium: { buttonSize: \"34px\", fontSize: tokens.typography.fontSize.xs },\n };\n const config = sizeConfig[size];\n\n // Calculate visible page numbers\n const pageNumbers = useMemo(() => {\n const range: (number | \"ellipsis\")[] = [];\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);\n\n const showLeftEllipsis = leftSiblingIndex > 2;\n const showRightEllipsis = rightSiblingIndex < totalPages - 1;\n\n if (!showLeftEllipsis && showRightEllipsis) {\n const leftRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => i + 1,\n );\n range.push(...leftRange, \"ellipsis\", totalPages);\n } else if (showLeftEllipsis && !showRightEllipsis) {\n const rightRange = Array.from(\n { length: 3 + 2 * siblingCount },\n (_, i) => totalPages - 3 - 2 * siblingCount + i + 1,\n );\n range.push(1, \"ellipsis\", ...rightRange);\n } else if (showLeftEllipsis && showRightEllipsis) {\n const middleRange = Array.from(\n { length: 2 * siblingCount + 1 },\n (_, i) => leftSiblingIndex + i,\n );\n range.push(1, \"ellipsis\", ...middleRange, \"ellipsis\", totalPages);\n } else {\n range.push(...Array.from({ length: totalPages }, (_, i) => i + 1));\n }\n\n return range;\n }, [currentPage, totalPages, siblingCount]);\n\n const buttonStyle: React.CSSProperties = {\n width: config.buttonSize,\n height: config.buttonSize,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: config.fontSize,\n fontFamily: tokens.typography.fontFamily.mono,\n fontWeight: tokens.typography.fontWeight.medium,\n backgroundColor: isTransparentTheme\n ? `${tokens.colors.background.surface}99`\n : \"transparent\",\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.5 : 1,\n transition: `all ${tokens.animation.fast}`,\n color: tokens.colors.text.primary,\n backdropFilter: isTransparentTheme ? \"blur(8px)\" : undefined,\n WebkitBackdropFilter: isTransparentTheme ? \"blur(8px)\" : undefined,\n };\n\n const activeButtonStyle: React.CSSProperties = {\n ...buttonStyle,\n backgroundColor: tokens.colors.accent.primary,\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.text.inverse,\n boxShadow: `0 0 0 1px ${tokens.colors.accent.primary}55, 0 0 14px ${tokens.colors.accent.primary}55`,\n };\n\n const handleClick = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onChange(page);\n }\n };\n\n const NavButton = ({\n direction,\n targetPage,\n children,\n }: {\n direction: \"first\" | \"prev\" | \"next\" | \"last\";\n targetPage: number;\n children: React.ReactNode;\n }) => {\n const isDisabled =\n disabled ||\n (direction === \"first\" || direction === \"prev\"\n ? currentPage <= 1\n : currentPage >= totalPages);\n\n return (\n <button\n type=\"button\"\n onClick={() => handleClick(targetPage)}\n disabled={isDisabled}\n aria-label={\n direction === \"first\"\n ? \"Go to first page\"\n : direction === \"prev\"\n ? \"Go to previous page\"\n : direction === \"next\"\n ? \"Go to next page\"\n : \"Go to last page\"\n }\n style={{\n ...buttonStyle,\n opacity: isDisabled ? 0.3 : 1,\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n }}\n >\n {children}\n </button>\n );\n };\n\n return (\n <nav\n className={classNames(\"zendir-pagination\", className)}\n aria-label=\"Pagination\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.xs,\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.lg,\n ...(tokens.colors.border.cardStyle ?? {\n border: `1px solid ${tokens.colors.border.muted}`,\n }),\n background: isTransparentTheme\n ? `${tokens.colors.background.surface}66`\n : `${tokens.colors.background.surface}66`,\n backdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\n WebkitBackdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\n }}\n >\n {showFirstLast && (\n <NavButton direction=\"first\" targetPage={1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M18.41 16.59L13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z\" />\n </svg>\n </NavButton>\n )}\n\n {showPrevNext && (\n <NavButton direction=\"prev\" targetPage={currentPage - 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\" />\n </svg>\n </NavButton>\n )}\n\n {displayMode === \"text\" ? (\n <span\n style={{\n padding: `0 ${tokens.spacing.sm}`,\n color: tokens.colors.text.secondary,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.mono,\n letterSpacing: \"0.02em\",\n whiteSpace: \"nowrap\",\n }}\n >\n Page {currentPage} of {totalPages}\n </span>\n ) : (\n pageNumbers.map((page, index) =>\n page === \"ellipsis\" ? (\n <span\n key={`ellipsis-${index}`}\n style={{\n width: config.buttonSize,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: tokens.colors.text.muted,\n }}\n >\n ...\n </span>\n ) : (\n <button\n key={page}\n type=\"button\"\n onClick={() => handleClick(page)}\n disabled={disabled}\n aria-current={page === currentPage ? \"page\" : undefined}\n style={page === currentPage ? activeButtonStyle : buttonStyle}\n onMouseEnter={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = `${tokens.colors.accent.primary}22`;\n e.currentTarget.style.borderColor =\n tokens.colors.accent.primary;\n e.currentTarget.style.transform = \"translateY(-1px)\";\n }\n }}\n onMouseLeave={(e) => {\n if (!disabled && page !== currentPage) {\n e.currentTarget.style.backgroundColor = isTransparentTheme\n ? `${tokens.colors.background.surface}99`\n : \"transparent\";\n e.currentTarget.style.borderColor =\n tokens.colors.border.muted;\n e.currentTarget.style.transform = \"translateY(0)\";\n }\n }}\n >\n {page}\n </button>\n ),\n )\n )}\n\n {showPrevNext && (\n <NavButton direction=\"next\" targetPage={currentPage + 1}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" />\n </svg>\n </NavButton>\n )}\n\n {showFirstLast && (\n <NavButton direction=\"last\" targetPage={totalPages}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M5.59 7.41L10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z\" />\n </svg>\n </NavButton>\n )}\n </nav>\n );\n});\n\nexport default Pagination;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
2
|
import { IconName } from '../display/Icon';
|
|
3
|
-
|
|
4
3
|
export interface SideNavProps {
|
|
5
4
|
/** Collapsed mode (icon-only). When omitted, auto-collapses on tablet viewports. */
|
|
6
5
|
collapsed?: boolean;
|
|
@@ -18,13 +17,13 @@ export interface SideNavProps {
|
|
|
18
17
|
* label — matching the v2.3 operator/admin secondary-nav mock. Default
|
|
19
18
|
* `'default'`. (TODO: row inset + mono section headings for full mock parity.)
|
|
20
19
|
*/
|
|
21
|
-
density?:
|
|
20
|
+
density?: "default" | "compact";
|
|
22
21
|
/**
|
|
23
22
|
* Mobile viewport behavior.
|
|
24
23
|
* - `'drawer'` (default): hamburger button with slide-out overlay drawer.
|
|
25
24
|
* - `'collapsed'`: persistent collapsed icon-only strip (same as tablet).
|
|
26
25
|
*/
|
|
27
|
-
mobileVariant?:
|
|
26
|
+
mobileVariant?: "drawer" | "collapsed";
|
|
28
27
|
/** Children (SideNav.Header, SideNav.Item, SideNav.Section, SideNav.Footer) */
|
|
29
28
|
children?: React.ReactNode;
|
|
30
29
|
/** Custom style */
|
|
@@ -45,7 +44,7 @@ export interface SideNavHeaderProps {
|
|
|
45
44
|
/** Role badge (e.g., "Operator", "Admin") */
|
|
46
45
|
badge?: string;
|
|
47
46
|
/** Badge variant for color */
|
|
48
|
-
badgeVariant?:
|
|
47
|
+
badgeVariant?: "info" | "success" | "warning" | "caution";
|
|
49
48
|
/**
|
|
50
49
|
* Fixed height (px) for the top logo band. Title, subtitle, and badge render below this band
|
|
51
50
|
* so different logo assets still line up across apps (dashboard vs operator).
|
|
@@ -65,7 +64,7 @@ export interface SideNavItemProps {
|
|
|
65
64
|
/** Small tag/chip displayed after the label (e.g. "v2", "NEW", "BETA") */
|
|
66
65
|
tag?: string;
|
|
67
66
|
/** Tag color variant */
|
|
68
|
-
tagVariant?:
|
|
67
|
+
tagVariant?: "default" | "info" | "success" | "warning" | "danger";
|
|
69
68
|
/** Link href (renders <a>) */
|
|
70
69
|
href?: string;
|
|
71
70
|
/** Click handler (renders <button>) */
|
|
@@ -83,7 +82,7 @@ export interface SideNavItemProps {
|
|
|
83
82
|
* Shapes per official Astro UXDS: normal = ● filled circle, standby = ◎ ring,
|
|
84
83
|
* caution = ■ square, serious = ◆ diamond, critical = ▼ triangle, off = · small circle.
|
|
85
84
|
*/
|
|
86
|
-
status?:
|
|
85
|
+
status?: "off" | "standby" | "normal" | "caution" | "serious" | "critical";
|
|
87
86
|
/** Optional status label shown as tooltip or text next to status shape */
|
|
88
87
|
statusLabel?: string;
|
|
89
88
|
/** Right-side slot — arbitrary ReactNode rendered at the end of the item row */
|