@zendir/ui 0.1.8 → 0.1.10
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/dist/index.js +0 -169
- package/dist/index.js.map +1 -1
- package/dist/react/context/DisplaySettingsContext.js +0 -12
- package/dist/react/context/DisplaySettingsContext.js.map +1 -1
- package/dist/react/core/AstroIcon.js +1 -816
- package/dist/react/core/AstroIcon.js.map +1 -1
- package/dist/react/core/index.d.ts +0 -1
- package/dist/react/index.d.ts +2 -42
- package/dist/react/utils/index.js +0 -8
- package/dist/react/utils/index.js.map +1 -1
- package/dist/react.js +0 -169
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/dist/react/3d/EarthViewer.js +0 -836
- package/dist/react/3d/EarthViewer.js.map +0 -1
- package/dist/react/3d/SolarSystemViewer.js +0 -372
- package/dist/react/3d/SolarSystemViewer.js.map +0 -1
- package/dist/react/3d/ZenSpace3D.js +0 -1253
- package/dist/react/3d/ZenSpace3D.js.map +0 -1
- package/dist/react/3d/ZenSpace3DCesium.js +0 -186
- package/dist/react/3d/ZenSpace3DCesium.js.map +0 -1
- package/dist/react/3d/ZenSpace3DShaders.js +0 -94
- package/dist/react/3d/ZenSpace3DShaders.js.map +0 -1
- package/dist/react/3d/ZenSpace3DUtils.js +0 -213
- package/dist/react/3d/ZenSpace3DUtils.js.map +0 -1
- package/dist/react/3d/threeLoader.js +0 -18
- package/dist/react/3d/threeLoader.js.map +0 -1
- package/dist/react/cards/AccessCard.js +0 -410
- package/dist/react/cards/AccessCard.js.map +0 -1
- package/dist/react/cards/OrbitCard.js +0 -372
- package/dist/react/cards/OrbitCard.js.map +0 -1
- package/dist/react/cards/SpacecraftCard.js +0 -941
- package/dist/react/cards/SpacecraftCard.js.map +0 -1
- package/dist/react/cards/TelemetryCard.js +0 -742
- package/dist/react/cards/TelemetryCard.js.map +0 -1
- package/dist/react/cards/TelemetryStreamCard.js +0 -309
- package/dist/react/cards/TelemetryStreamCard.js.map +0 -1
- package/dist/react/charts/GroundTrackMap.js +0 -1123
- package/dist/react/charts/GroundTrackMap.js.map +0 -1
- package/dist/react/charts/GroundTrackMapLeaflet.js +0 -571
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +0 -1
- package/dist/react/charts/groundTrackMapLeafletTiles.js +0 -11
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +0 -1
- package/dist/react/charts/groundTrackMapLeafletUtils.js +0 -109
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +0 -1
- package/dist/react/charts/unified/AstroChart.js +0 -1405
- package/dist/react/charts/unified/AstroChart.js.map +0 -1
- package/dist/react/charts/unified/PowerOverviewChart.js +0 -488
- package/dist/react/charts/unified/PowerOverviewChart.js.map +0 -1
- package/dist/react/charts/unified/domain.js +0 -3168
- package/dist/react/charts/unified/domain.js.map +0 -1
- package/dist/react/charts/unified/generators.js +0 -518
- package/dist/react/charts/unified/generators.js.map +0 -1
- package/dist/react/charts/unified/presets.js +0 -999
- package/dist/react/charts/unified/presets.js.map +0 -1
- package/dist/react/charts/unified/sync.js +0 -219
- package/dist/react/charts/unified/sync.js.map +0 -1
- package/dist/react/charts/unified/theme.js +0 -562
- package/dist/react/charts/unified/theme.js.map +0 -1
- package/dist/react/charts/unified/useChartStream.js +0 -226
- package/dist/react/charts/unified/useChartStream.js.map +0 -1
- package/dist/react/chatgpt/AppCard.js +0 -306
- package/dist/react/chatgpt/AppCard.js.map +0 -1
- package/dist/react/chatgpt/index.js +0 -166
- package/dist/react/chatgpt/index.js.map +0 -1
- package/dist/react/hooks/useSpacecraftPosition.js +0 -89
- package/dist/react/hooks/useSpacecraftPosition.js.map +0 -1
- package/dist/react/hooks/useTelemetry.js +0 -73
- package/dist/react/hooks/useTelemetry.js.map +0 -1
- package/dist/react/hooks/useZendirSession.js +0 -148
- package/dist/react/hooks/useZendirSession.js.map +0 -1
- package/dist/react/visualizations/EclipseTimerCard.js +0 -250
- package/dist/react/visualizations/EclipseTimerCard.js.map +0 -1
- package/dist/react/visualizations/LinkBudgetCard.js +0 -444
- package/dist/react/visualizations/LinkBudgetCard.js.map +0 -1
- package/dist/react/visualizations/NavBallCard.js +0 -243
- package/dist/react/visualizations/NavBallCard.js.map +0 -1
- package/dist/react/visualizations/PropulsionCard.js +0 -298
- package/dist/react/visualizations/PropulsionCard.js.map +0 -1
- package/dist/react/visualizations/SensorFootprintCard.js +0 -326
- package/dist/react/visualizations/SensorFootprintCard.js.map +0 -1
- package/dist/react/visualizations/ThermalHeatmapCard.js +0 -372
- package/dist/react/visualizations/ThermalHeatmapCard.js.map +0 -1
- package/dist/shaders/atmosphere.frag.js +0 -5
- package/dist/shaders/atmosphere.frag.js.map +0 -1
- package/dist/shaders/atmosphere.vert.js +0 -5
- package/dist/shaders/atmosphere.vert.js.map +0 -1
- package/dist/shaders/stars.frag.js +0 -5
- package/dist/shaders/stars.frag.js.map +0 -1
- package/dist/shaders/stars.vert.js +0 -5
- package/dist/shaders/stars.vert.js.map +0 -1
- package/dist/style.css +0 -143
package/dist/index.js
CHANGED
|
@@ -1,33 +1,10 @@
|
|
|
1
1
|
import { ErrorBoundary, withErrorBoundary } from "./react/shared/ErrorBoundary.js";
|
|
2
2
|
import { Skeleton3D, SkeletonBox, SkeletonCard, SkeletonChart, SkeletonCircle, SkeletonText } from "./react/shared/Skeleton.js";
|
|
3
3
|
import { STATUS_COLORS, addAlpha, clamp, classNames, focusRingStyle, formatAltitude, formatCoordinate, formatCountdown, formatDataRate, formatDecibels, formatDegrees, formatDistance, formatDuration, formatFrequency, formatLatLon, formatNumber, formatPercentage, formatPower, formatTabular, formatTemperature, formatTime, formatUTC, formatVelocity, getStatusColor, getStatusFromValue, getStatusSeverity, getWorstStatus, isStatusLevel, isValidNumber, lerp, mapRange, normalizeStatus, safeAccentText, safeNumber, tabularNumsStyle, transitions, withNullSafety } from "./react/utils/index.js";
|
|
4
|
-
import { SpacecraftCard } from "./react/cards/SpacecraftCard.js";
|
|
5
|
-
import { TelemetryCard } from "./react/cards/TelemetryCard.js";
|
|
6
|
-
import { AccessCard } from "./react/cards/AccessCard.js";
|
|
7
|
-
import { OrbitCard } from "./react/cards/OrbitCard.js";
|
|
8
|
-
import { TelemetryStreamCard } from "./react/cards/TelemetryStreamCard.js";
|
|
9
|
-
import { EclipseTimerCard } from "./react/visualizations/EclipseTimerCard.js";
|
|
10
|
-
import { NavBallCard } from "./react/visualizations/NavBallCard.js";
|
|
11
|
-
import { LinkBudgetCard } from "./react/visualizations/LinkBudgetCard.js";
|
|
12
|
-
import { ThermalHeatmapCard } from "./react/visualizations/ThermalHeatmapCard.js";
|
|
13
|
-
import { PropulsionCard } from "./react/visualizations/PropulsionCard.js";
|
|
14
|
-
import { SensorFootprintCard } from "./react/visualizations/SensorFootprintCard.js";
|
|
15
|
-
import { EarthViewer } from "./react/3d/EarthViewer.js";
|
|
16
|
-
import { SolarSystemViewer } from "./react/3d/SolarSystemViewer.js";
|
|
17
|
-
import { useZendirSession } from "./react/hooks/useZendirSession.js";
|
|
18
|
-
import { useTelemetry } from "./react/hooks/useTelemetry.js";
|
|
19
|
-
import { useSpacecraftPosition } from "./react/hooks/useSpacecraftPosition.js";
|
|
20
4
|
import { useCompactMode } from "./react/hooks/useCompactMode.js";
|
|
21
|
-
import { isInChatGPT, useCallTool, useChatGPTTheme, useDisplayMode, useIntrinsicHeight, useLocale, useMaxHeight, useOpenAiGlobal, useOpenExternal, useSendMessage, useToolInput, useToolOutput, useWidgetState } from "./react/chatgpt/index.js";
|
|
22
|
-
import { AppCard, ChatGPTCard } from "./react/chatgpt/AppCard.js";
|
|
23
5
|
import { PLANETS, auToKm, estimateOrbitalPeriod, estimateOrbitalVelocity, getPlanet, normalizePlanetName } from "./react/types.js";
|
|
24
|
-
import { ASTRO_DATA_VIZ_COLORS, STATUS_COLORS as STATUS_COLORS2, calculateAxisBounds, createAreaGradient, createAstroEChartsTheme, formatTimeLabel, formatValueWithUnit, getSeriesColor } from "./react/charts/unified/theme.js";
|
|
25
|
-
import { ASTRO_ICON_NAMES, AstroIcon, getAllIconNames, getAstroIconNames, getIconAliases, isAstroIconsAvailable, isIconAlias, preloadAstroIcons } from "./react/core/AstroIcon.js";
|
|
26
6
|
import { ActivityPlanner } from "./react/core/ActivityPlanner.js";
|
|
27
|
-
import { AntennaPattern3DChart, AttitudeChart, AttitudeHistory3DChart, Bar3DChart, ConjunctionAssessment3DChart, ConjunctionChart, ConstellationCoverageChart, ContactWindowChart, DopplerTrackChart, EclipseTimelineChart, HeliocentricOrbitPlot, LaunchCorridor3DChart, Lines3DChart, LinkBudgetChart, LinkMarginChart, ManeuverBudgetChart, OrbitChart, PowerChart, RoseDiagram, Scatter3DChart, SpectrumChart, SphericalRadar3DChart, SubsystemGauge, Surface3DChart, ThermalHeatmapChart, TransferOrbit3DChart, WaterfallChart } from "./react/charts/unified/domain.js";
|
|
28
7
|
import { AppBar } from "./react/core/AppBar.js";
|
|
29
|
-
import { AreaChart, BarChart, BubbleChart, CandlestickChart, DonutChart, DualAxisChart, GaugeChart, GraphChart, HeatmapChart, HistogramChart, LineChart, ParallelChart, PieChart, RadarChart, SankeyChart, ScatterChart, StackedAreaChart, StackedBarChart, SunburstChart, TimeSeriesChart, TreemapChart } from "./react/charts/unified/presets.js";
|
|
30
|
-
import { AstroChart } from "./react/charts/unified/AstroChart.js";
|
|
31
8
|
import { BREAKPOINTS, useBreakpoint } from "./react/core/layout/useBreakpoint.js";
|
|
32
9
|
import { Badge } from "./react/core/Badge.js";
|
|
33
10
|
import { Body1, Body2, Body3, Compact, DataText, Display1, Display2, FONT_FAMILY_MONO, FONT_FAMILY_PRIMARY, FONT_WEIGHTS, H1, H2, H3, H4, H5, H6, Label, Micro, Mono, Typography } from "./react/core/Typography.js";
|
|
@@ -51,13 +28,11 @@ import { DataValue, DataValueGroup } from "./react/core/DataValue.js";
|
|
|
51
28
|
import { Dialog } from "./react/core/Dialog.js";
|
|
52
29
|
import { DisplaySettingsProvider, GLASS_TINTS, PRESET_COLORS, getEffectiveCompactMode, useDisplaySettings, useDisplaySettingsOptional } from "./react/context/DisplaySettingsContext.js";
|
|
53
30
|
import { Divider } from "./react/core/layout/Divider.js";
|
|
54
|
-
import { EARTH_RADIUS_KM, KM_TO_SCENE, SCENE_EARTH_RADIUS, calculateVisibilityConeGeometry, cartesianToLatLonAlt, generateHexGrid, generateOrbitPath, latLonAltToCartesian, parseTLE, propagateSGP4Simple, propagateSatellite } from "./react/3d/ZenSpace3DUtils.js";
|
|
55
31
|
import { FileExplorer } from "./react/core/FileExplorer.js";
|
|
56
32
|
import { Flex } from "./react/core/layout/Flex.js";
|
|
57
33
|
import { GLASS_COLOR_OVERLAYS, GlassCard } from "./react/core/GlassCard.js";
|
|
58
34
|
import { GlobalStatusBar } from "./react/astro/GlobalStatusBar.js";
|
|
59
35
|
import { Grid } from "./react/core/layout/Grid.js";
|
|
60
|
-
import { GroundTrackMap } from "./react/charts/GroundTrackMap.js";
|
|
61
36
|
import { HStack, Stack, VStack } from "./react/core/layout/Stack.js";
|
|
62
37
|
import { HeaderIconWithStatus } from "./react/core/HeaderIconWithStatus.js";
|
|
63
38
|
import { HexViewer, REGION_BORDER_COLORS, REGION_COLORS } from "./react/core/HexViewer.js";
|
|
@@ -77,7 +52,6 @@ import { NumberInput } from "./react/core/NumberInput.js";
|
|
|
77
52
|
import { PacketViewer } from "./react/core/PacketViewer.js";
|
|
78
53
|
import { Pagination } from "./react/core/Pagination.js";
|
|
79
54
|
import { PinInput } from "./react/core/PinInput.js";
|
|
80
|
-
import { PowerOverviewChart, generateSamplePowerData } from "./react/charts/unified/PowerOverviewChart.js";
|
|
81
55
|
import { Progress } from "./react/astro/Progress.js";
|
|
82
56
|
import { Select } from "./react/core/Select.js";
|
|
83
57
|
import { SideNav } from "./react/core/SideNav.js";
|
|
@@ -90,50 +64,28 @@ import { UnifiedTimeline } from "./react/astro/UnifiedTimeline.js";
|
|
|
90
64
|
import { ToastProvider, useToast, useToastManager } from "./react/core/Toast.js";
|
|
91
65
|
import { Toggle } from "./react/core/Toggle.js";
|
|
92
66
|
import { Tooltip } from "./react/core/Tooltip.js";
|
|
93
|
-
import { ZenSpace3D } from "./react/3d/ZenSpace3D.js";
|
|
94
|
-
import { ZenSpace3DCesium } from "./react/3d/ZenSpace3DCesium.js";
|
|
95
|
-
import { atmosphereFragmentShader, atmosphereVertexShader, starsFragmentShader, starsVertexShader } from "./react/3d/ZenSpace3DShaders.js";
|
|
96
|
-
import { dispatchToGroup, exportGroupAsCSV, exportGroupAsImages, getGroupCharts, hideGroupTooltip, resetGroupZoom, showGroupTooltip, syncZoomRange, useChartSync } from "./react/charts/unified/sync.js";
|
|
97
|
-
import { generateAttitudeData, generateConjunctionEvents, generateConstellationCoverage, generateContactWindows, generateDopplerData, generateEclipseTimeline, generateHeliocentricOrbits, generatePowerData, generateSpectrum, generateWaterfallData } from "./react/charts/unified/generators.js";
|
|
98
67
|
import { resolveResponsive, resolveSpacing } from "./react/core/layout/responsive.js";
|
|
99
|
-
import { useChartStream, useWebSocketStream } from "./react/charts/unified/useChartStream.js";
|
|
100
68
|
export {
|
|
101
|
-
ASTRO_DATA_VIZ_COLORS,
|
|
102
|
-
ASTRO_ICON_NAMES,
|
|
103
|
-
AccessCard,
|
|
104
69
|
ActivityPlanner,
|
|
105
|
-
AntennaPattern3DChart,
|
|
106
70
|
AppBar,
|
|
107
|
-
AppCard,
|
|
108
|
-
AreaChart,
|
|
109
|
-
AstroChart,
|
|
110
|
-
AstroIcon,
|
|
111
|
-
AttitudeChart,
|
|
112
|
-
AttitudeHistory3DChart,
|
|
113
71
|
BREAKPOINTS,
|
|
114
72
|
Badge,
|
|
115
|
-
Bar3DChart,
|
|
116
|
-
BarChart,
|
|
117
73
|
Body1,
|
|
118
74
|
Body2,
|
|
119
75
|
Body3,
|
|
120
76
|
Box,
|
|
121
|
-
BubbleChart,
|
|
122
77
|
Button,
|
|
123
78
|
CARD_ACCENT_COLORS,
|
|
124
79
|
CATEGORY_ICONS,
|
|
125
80
|
CATEGORY_LABELS,
|
|
126
|
-
STATUS_COLORS2 as CHART_STATUS_COLORS,
|
|
127
81
|
CHAT_RESPONSE_JSON_PROMPT,
|
|
128
82
|
CHAT_RESPONSE_MCP_TOOL,
|
|
129
83
|
CHAT_RESPONSE_TOOL_SCHEMA,
|
|
130
84
|
CHAT_RESPONSE_YAML_PROMPT,
|
|
131
85
|
CHAT_STATUS_RULES_PROMPT,
|
|
132
|
-
CandlestickChart,
|
|
133
86
|
CardAccentProvider,
|
|
134
87
|
CardHeader,
|
|
135
88
|
Center,
|
|
136
|
-
ChatGPTCard,
|
|
137
89
|
ChatPanel,
|
|
138
90
|
Checkbox,
|
|
139
91
|
ClassificationBanner,
|
|
@@ -142,11 +94,7 @@ export {
|
|
|
142
94
|
Compact,
|
|
143
95
|
ConfirmDialog,
|
|
144
96
|
ConfirmProvider,
|
|
145
|
-
ConjunctionAssessment3DChart,
|
|
146
|
-
ConjunctionChart,
|
|
147
97
|
ConnectionForm,
|
|
148
|
-
ConstellationCoverageChart,
|
|
149
|
-
ContactWindowChart,
|
|
150
98
|
Container,
|
|
151
99
|
CopyButton,
|
|
152
100
|
DataTable,
|
|
@@ -159,13 +107,6 @@ export {
|
|
|
159
107
|
Display2,
|
|
160
108
|
DisplaySettingsProvider,
|
|
161
109
|
Divider,
|
|
162
|
-
DonutChart,
|
|
163
|
-
DopplerTrackChart,
|
|
164
|
-
DualAxisChart,
|
|
165
|
-
EARTH_RADIUS_KM,
|
|
166
|
-
EarthViewer,
|
|
167
|
-
EclipseTimelineChart,
|
|
168
|
-
EclipseTimerCard,
|
|
169
110
|
ErrorBoundary,
|
|
170
111
|
FONT_FAMILY_MONO,
|
|
171
112
|
FONT_FAMILY_PRIMARY,
|
|
@@ -174,12 +115,9 @@ export {
|
|
|
174
115
|
Flex,
|
|
175
116
|
GLASS_COLOR_OVERLAYS,
|
|
176
117
|
GLASS_TINTS,
|
|
177
|
-
GaugeChart,
|
|
178
118
|
GlassCard,
|
|
179
119
|
GlobalStatusBar,
|
|
180
|
-
GraphChart,
|
|
181
120
|
Grid,
|
|
182
|
-
GroundTrackMap,
|
|
183
121
|
H1,
|
|
184
122
|
H2,
|
|
185
123
|
H3,
|
|
@@ -188,24 +126,13 @@ export {
|
|
|
188
126
|
H6,
|
|
189
127
|
HStack,
|
|
190
128
|
HeaderIconWithStatus,
|
|
191
|
-
HeatmapChart,
|
|
192
|
-
HeliocentricOrbitPlot,
|
|
193
129
|
HexViewer,
|
|
194
|
-
HistogramChart,
|
|
195
130
|
Icon,
|
|
196
131
|
ImageGallery,
|
|
197
132
|
Input,
|
|
198
|
-
KM_TO_SCENE,
|
|
199
133
|
Label,
|
|
200
|
-
LaunchCorridor3DChart,
|
|
201
134
|
LimitsBar,
|
|
202
|
-
LineChart,
|
|
203
|
-
Lines3DChart,
|
|
204
|
-
LinkBudgetCard,
|
|
205
|
-
LinkBudgetChart,
|
|
206
|
-
LinkMarginChart,
|
|
207
135
|
LogViewer,
|
|
208
|
-
ManeuverBudgetChart,
|
|
209
136
|
Menu,
|
|
210
137
|
MessageStream,
|
|
211
138
|
Micro,
|
|
@@ -214,36 +141,21 @@ export {
|
|
|
214
141
|
MissionClock,
|
|
215
142
|
MonitoringIcon,
|
|
216
143
|
Mono,
|
|
217
|
-
NavBallCard,
|
|
218
144
|
Notification,
|
|
219
145
|
NumberInput,
|
|
220
|
-
OrbitCard,
|
|
221
|
-
OrbitChart,
|
|
222
146
|
PLANETS,
|
|
223
147
|
PRESET_COLORS,
|
|
224
148
|
PROPERTY_PRESETS,
|
|
225
149
|
PacketViewer,
|
|
226
150
|
Pagination,
|
|
227
|
-
ParallelChart,
|
|
228
|
-
PieChart,
|
|
229
151
|
PinInput,
|
|
230
152
|
Popover,
|
|
231
|
-
PowerChart,
|
|
232
|
-
PowerOverviewChart,
|
|
233
153
|
Progress,
|
|
234
|
-
PropulsionCard,
|
|
235
154
|
REGION_BORDER_COLORS,
|
|
236
155
|
REGION_COLORS,
|
|
237
|
-
RadarChart,
|
|
238
|
-
RoseDiagram,
|
|
239
|
-
SCENE_EARTH_RADIUS,
|
|
240
156
|
SPACE_SYSTEM_COLORS,
|
|
241
157
|
STATUS_COLORS,
|
|
242
|
-
SankeyChart,
|
|
243
|
-
Scatter3DChart,
|
|
244
|
-
ScatterChart,
|
|
245
158
|
Select,
|
|
246
|
-
SensorFootprintCard,
|
|
247
159
|
SideNav,
|
|
248
160
|
SidePanel,
|
|
249
161
|
SimulationControls,
|
|
@@ -254,56 +166,27 @@ export {
|
|
|
254
166
|
SkeletonChart,
|
|
255
167
|
SkeletonCircle,
|
|
256
168
|
SkeletonText,
|
|
257
|
-
SolarSystemViewer,
|
|
258
|
-
SpacecraftCard,
|
|
259
169
|
Spacer,
|
|
260
|
-
SpectrumChart,
|
|
261
|
-
SphericalRadar3DChart,
|
|
262
170
|
Stack,
|
|
263
|
-
StackedAreaChart,
|
|
264
|
-
StackedBarChart,
|
|
265
171
|
StatusIndicator,
|
|
266
|
-
SubsystemGauge,
|
|
267
|
-
SunburstChart,
|
|
268
|
-
Surface3DChart,
|
|
269
172
|
Tabs,
|
|
270
|
-
TelemetryCard,
|
|
271
|
-
TelemetryStreamCard,
|
|
272
173
|
ThemeProvider,
|
|
273
|
-
ThermalHeatmapCard,
|
|
274
|
-
ThermalHeatmapChart,
|
|
275
|
-
TimeSeriesChart,
|
|
276
174
|
UnifiedTimeline as Timeline,
|
|
277
175
|
ToastProvider,
|
|
278
176
|
Toggle,
|
|
279
177
|
Tooltip,
|
|
280
|
-
TransferOrbit3DChart,
|
|
281
|
-
TreemapChart,
|
|
282
178
|
Typography,
|
|
283
179
|
VStack,
|
|
284
|
-
WaterfallChart,
|
|
285
|
-
ZenSpace3D,
|
|
286
|
-
ZenSpace3DCesium,
|
|
287
180
|
addAlpha,
|
|
288
|
-
atmosphereFragmentShader,
|
|
289
|
-
atmosphereVertexShader,
|
|
290
181
|
auToKm,
|
|
291
|
-
calculateAxisBounds,
|
|
292
|
-
calculateVisibilityConeGeometry,
|
|
293
|
-
cartesianToLatLonAlt,
|
|
294
182
|
clamp,
|
|
295
183
|
classNames,
|
|
296
|
-
createAreaGradient,
|
|
297
|
-
createAstroEChartsTheme,
|
|
298
184
|
createChatResponseParser,
|
|
299
185
|
createPropertyConfig,
|
|
300
186
|
deriveBatteryStatus,
|
|
301
187
|
deriveStatus,
|
|
302
|
-
dispatchToGroup,
|
|
303
188
|
estimateOrbitalPeriod,
|
|
304
189
|
estimateOrbitalVelocity,
|
|
305
|
-
exportGroupAsCSV,
|
|
306
|
-
exportGroupAsImages,
|
|
307
190
|
focusRingStyle,
|
|
308
191
|
formatAltitude,
|
|
309
192
|
formatCoordinate,
|
|
@@ -323,98 +206,46 @@ export {
|
|
|
323
206
|
formatTabular,
|
|
324
207
|
formatTemperature,
|
|
325
208
|
formatTime,
|
|
326
|
-
formatTimeLabel,
|
|
327
209
|
formatUTC,
|
|
328
|
-
formatValueWithUnit,
|
|
329
210
|
formatVelocity,
|
|
330
|
-
generateAttitudeData,
|
|
331
|
-
generateConjunctionEvents,
|
|
332
|
-
generateConstellationCoverage,
|
|
333
|
-
generateContactWindows,
|
|
334
|
-
generateDopplerData,
|
|
335
|
-
generateEclipseTimeline,
|
|
336
|
-
generateHeliocentricOrbits,
|
|
337
|
-
generateHexGrid,
|
|
338
|
-
generateOrbitPath,
|
|
339
|
-
generatePowerData,
|
|
340
|
-
generateSamplePowerData,
|
|
341
|
-
generateSpectrum,
|
|
342
|
-
generateWaterfallData,
|
|
343
211
|
getAccentColorOptions,
|
|
344
|
-
getAllIconNames,
|
|
345
|
-
getAstroIconNames,
|
|
346
212
|
getEffectiveCompactMode,
|
|
347
|
-
getGroupCharts,
|
|
348
|
-
getIconAliases,
|
|
349
213
|
getIconNames,
|
|
350
214
|
getPlanet,
|
|
351
215
|
getPropertiesByCategory,
|
|
352
216
|
getPropertyConfig,
|
|
353
|
-
getSeriesColor,
|
|
354
217
|
getStatusColor,
|
|
355
218
|
getStatusFromValue,
|
|
356
219
|
getStatusSeverity,
|
|
357
220
|
getSystemAccentColor,
|
|
358
221
|
getWorstStatus,
|
|
359
|
-
hideGroupTooltip,
|
|
360
|
-
isAstroIconsAvailable,
|
|
361
|
-
isIconAlias,
|
|
362
|
-
isInChatGPT,
|
|
363
222
|
isStatusLevel,
|
|
364
223
|
isValidIconName,
|
|
365
224
|
isValidNumber,
|
|
366
|
-
latLonAltToCartesian,
|
|
367
225
|
lerp,
|
|
368
226
|
mapRange,
|
|
369
227
|
normalizePlanetName,
|
|
370
228
|
normalizeStatus,
|
|
371
229
|
parseChatResponse,
|
|
372
230
|
parseMcpToolResult,
|
|
373
|
-
parseTLE,
|
|
374
|
-
preloadAstroIcons,
|
|
375
|
-
propagateSGP4Simple,
|
|
376
|
-
propagateSatellite,
|
|
377
|
-
resetGroupZoom,
|
|
378
231
|
resolveResponsive,
|
|
379
232
|
resolveSpacing,
|
|
380
233
|
safeAccentText,
|
|
381
234
|
safeNumber,
|
|
382
|
-
showGroupTooltip,
|
|
383
|
-
starsFragmentShader,
|
|
384
|
-
starsVertexShader,
|
|
385
|
-
syncZoomRange,
|
|
386
235
|
tabularNumsStyle,
|
|
387
236
|
transitions,
|
|
388
237
|
useBreakpoint,
|
|
389
|
-
useCallTool,
|
|
390
238
|
useCardAccent,
|
|
391
|
-
useChartStream,
|
|
392
|
-
useChartSync,
|
|
393
|
-
useChatGPTTheme,
|
|
394
239
|
useCompactMode,
|
|
395
240
|
useConfirm,
|
|
396
241
|
useCopyToClipboard,
|
|
397
|
-
useDisplayMode,
|
|
398
242
|
useDisplaySettings,
|
|
399
243
|
useDisplaySettingsOptional,
|
|
400
|
-
useIntrinsicHeight,
|
|
401
|
-
useLocale,
|
|
402
|
-
useMaxHeight,
|
|
403
|
-
useOpenAiGlobal,
|
|
404
|
-
useOpenExternal,
|
|
405
244
|
useScrollbarStyles,
|
|
406
|
-
useSendMessage,
|
|
407
|
-
useSpacecraftPosition,
|
|
408
|
-
useTelemetry,
|
|
409
245
|
useTheme,
|
|
410
246
|
useThemeTokens,
|
|
411
247
|
useToast,
|
|
412
248
|
useToastManager,
|
|
413
|
-
useToolInput,
|
|
414
|
-
useToolOutput,
|
|
415
|
-
useWebSocketStream,
|
|
416
|
-
useWidgetState,
|
|
417
|
-
useZendirSession,
|
|
418
249
|
withErrorBoundary,
|
|
419
250
|
withNullSafety
|
|
420
251
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -146,23 +146,11 @@ function getEffectiveCompactMode(propValue, contextValue) {
|
|
|
146
146
|
if (contextValue !== void 0) return contextValue;
|
|
147
147
|
return false;
|
|
148
148
|
}
|
|
149
|
-
function useCardBorderStyle(tokens, isTransparentTheme) {
|
|
150
|
-
const displaySettings = useDisplaySettingsOptional();
|
|
151
|
-
const accentBorders = (displaySettings == null ? void 0 : displaySettings.accentBorders) ?? true;
|
|
152
|
-
if (!isTransparentTheme) {
|
|
153
|
-
return tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` };
|
|
154
|
-
}
|
|
155
|
-
if (accentBorders) {
|
|
156
|
-
return tokens.colors.border.cardStyle ?? {};
|
|
157
|
-
}
|
|
158
|
-
return { border: "1px solid rgba(255, 255, 255, 0.08)" };
|
|
159
|
-
}
|
|
160
149
|
export {
|
|
161
150
|
DisplaySettingsProvider,
|
|
162
151
|
GLASS_TINTS,
|
|
163
152
|
PRESET_COLORS,
|
|
164
153
|
getEffectiveCompactMode,
|
|
165
|
-
useCardBorderStyle,
|
|
166
154
|
useDisplaySettings,
|
|
167
155
|
useDisplaySettingsOptional
|
|
168
156
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisplaySettingsContext.js","sources":["../../../src/react/context/DisplaySettingsContext.tsx"],"sourcesContent":["/**\n * @zendir/ui - DisplaySettingsContext\n * \n * Centralized context for app-wide display preferences.\n * Controls compact mode, accent colors, glass tint, and other display settings.\n * \n * Features:\n * - Compact mode toggle (affects all cards globally)\n * - Accent color selection (for card accents)\n * - Glass tint selection (for transparent themes)\n * - Color target control (both, accent-only, glass-only)\n * - LocalStorage persistence\n * \n * @example\n * ```tsx\n * import { DisplaySettingsProvider, useDisplaySettings } from '@zendir/ui';\n * \n * // Wrap your app\n * <DisplaySettingsProvider>\n * <App />\n * </DisplaySettingsProvider>\n * \n * // Use in components\n * function MyCard() {\n * const { compactMode, accentColor } = useDisplaySettings();\n * return <Card compact={compactMode} />;\n * }\n * ```\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo, useEffect, type ReactNode } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ColorTarget = 'both' | 'accent' | 'glass';\n\nexport interface DisplaySettings {\n /** Global compact mode - affects all cards */\n compactMode: boolean;\n \n /** Accent color for cards and UI elements */\n accentColor: string;\n \n /** Glass tint color for transparent themes */\n glassTint: string;\n \n /** Which color setting to apply: both, accent-only, or glass-only */\n colorTarget: ColorTarget;\n \n /** Enable accent-colored borders on cards (for transparent themes) */\n accentBorders: boolean;\n}\n\nexport interface DisplaySettingsContextValue extends DisplaySettings {\n /** Set compact mode on/off */\n setCompactMode: (value: boolean) => void;\n \n /** Toggle compact mode */\n toggleCompactMode: () => void;\n \n /** Set accent color */\n setAccentColor: (color: string) => void;\n \n /** Set glass tint color */\n setGlassTint: (color: string) => void;\n \n /** Set which color setting to apply */\n setColorTarget: (target: ColorTarget) => void;\n \n /** Set a color that applies based on current target */\n setColor: (color: string) => void;\n \n /** Set accent borders on/off */\n setAccentBorders: (value: boolean) => void;\n \n /** Toggle accent borders */\n toggleAccentBorders: () => void;\n \n /** Reset all settings to defaults */\n resetSettings: () => void;\n}\n\n// =============================================================================\n// Preset Colors\n// =============================================================================\n\nexport const PRESET_COLORS = {\n purple: '#8b5cf6',\n blue: '#3b82f6',\n cyan: '#06b6d4',\n teal: '#14b8a6',\n green: '#10b981',\n lime: '#84cc16',\n amber: '#f59e0b',\n orange: '#f97316',\n pink: '#ec4899',\n red: '#ef4444',\n slate: '#64748b',\n} as const;\n\nexport const GLASS_TINTS = {\n ...PRESET_COLORS,\n clear: 'rgba(255,255,255,0.05)',\n dark: 'rgba(0,0,0,0.3)',\n} as const;\n\nexport type PresetColorKey = keyof typeof PRESET_COLORS;\nexport type GlassTintKey = keyof typeof GLASS_TINTS;\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_SETTINGS: DisplaySettings = {\n compactMode: false,\n accentColor: PRESET_COLORS.purple,\n glassTint: PRESET_COLORS.purple,\n colorTarget: 'both',\n accentBorders: true,\n};\n\nconst STORAGE_KEY = 'zendir-display-settings';\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst DisplaySettingsContext = createContext<DisplaySettingsContextValue | null>(null);\n\n// =============================================================================\n// Provider Props\n// =============================================================================\n\nexport interface DisplaySettingsProviderProps {\n children: ReactNode;\n \n /** Initial compact mode state */\n defaultCompactMode?: boolean;\n \n /** Initial accent color */\n defaultAccentColor?: string;\n \n /** Initial glass tint color */\n defaultGlassTint?: string;\n \n /** Initial color target */\n defaultColorTarget?: ColorTarget;\n \n /** Initial accent borders state */\n defaultAccentBorders?: boolean;\n \n /** Enable localStorage persistence (default: true) */\n persist?: boolean;\n}\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\nexport function DisplaySettingsProvider({\n children,\n defaultCompactMode,\n defaultAccentColor,\n defaultGlassTint,\n defaultColorTarget,\n defaultAccentBorders,\n persist = true,\n}: DisplaySettingsProviderProps): React.ReactElement {\n // Initialize state from localStorage or defaults\n const [settings, setSettings] = useState<DisplaySettings>(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n return {\n compactMode: parsed.compactMode ?? defaultCompactMode ?? DEFAULT_SETTINGS.compactMode,\n accentColor: parsed.accentColor ?? defaultAccentColor ?? DEFAULT_SETTINGS.accentColor,\n glassTint: parsed.glassTint ?? defaultGlassTint ?? DEFAULT_SETTINGS.glassTint,\n colorTarget: parsed.colorTarget ?? defaultColorTarget ?? DEFAULT_SETTINGS.colorTarget,\n accentBorders: parsed.accentBorders ?? defaultAccentBorders ?? DEFAULT_SETTINGS.accentBorders,\n };\n }\n } catch {\n // Ignore parse errors\n }\n }\n \n return {\n compactMode: defaultCompactMode ?? DEFAULT_SETTINGS.compactMode,\n accentColor: defaultAccentColor ?? DEFAULT_SETTINGS.accentColor,\n glassTint: defaultGlassTint ?? DEFAULT_SETTINGS.glassTint,\n colorTarget: defaultColorTarget ?? DEFAULT_SETTINGS.colorTarget,\n accentBorders: defaultAccentBorders ?? DEFAULT_SETTINGS.accentBorders,\n };\n });\n \n // Persist to localStorage when settings change\n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(settings));\n } catch {\n // Ignore storage errors\n }\n }\n }, [settings, persist]);\n \n // Setters\n const setCompactMode = useCallback((value: boolean) => {\n setSettings(prev => ({ ...prev, compactMode: value }));\n }, []);\n \n const toggleCompactMode = useCallback(() => {\n setSettings(prev => ({ ...prev, compactMode: !prev.compactMode }));\n }, []);\n \n const setAccentColor = useCallback((color: string) => {\n setSettings(prev => ({ ...prev, accentColor: color }));\n }, []);\n \n const setGlassTint = useCallback((color: string) => {\n setSettings(prev => ({ ...prev, glassTint: color }));\n }, []);\n \n const setColorTarget = useCallback((target: ColorTarget) => {\n setSettings(prev => ({ ...prev, colorTarget: target }));\n }, []);\n \n // Set color based on current target\n const setColor = useCallback((color: string) => {\n setSettings(prev => {\n switch (prev.colorTarget) {\n case 'accent':\n return { ...prev, accentColor: color };\n case 'glass':\n return { ...prev, glassTint: color };\n case 'both':\n default:\n return { ...prev, accentColor: color, glassTint: color };\n }\n });\n }, []);\n \n const setAccentBorders = useCallback((value: boolean) => {\n setSettings(prev => ({ ...prev, accentBorders: value }));\n }, []);\n \n const toggleAccentBorders = useCallback(() => {\n setSettings(prev => ({ ...prev, accentBorders: !prev.accentBorders }));\n }, []);\n \n const resetSettings = useCallback(() => {\n setSettings(DEFAULT_SETTINGS);\n }, []);\n \n // Memoized context value\n const value = useMemo<DisplaySettingsContextValue>(() => ({\n ...settings,\n setCompactMode,\n toggleCompactMode,\n setAccentColor,\n setGlassTint,\n setColorTarget,\n setColor,\n setAccentBorders,\n toggleAccentBorders,\n resetSettings,\n }), [\n settings,\n setCompactMode,\n toggleCompactMode,\n setAccentColor,\n setGlassTint,\n setColorTarget,\n setColor,\n setAccentBorders,\n toggleAccentBorders,\n resetSettings,\n ]);\n \n return (\n <DisplaySettingsContext.Provider value={value}>\n {children}\n </DisplaySettingsContext.Provider>\n );\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Access display settings context\n * Must be used within a DisplaySettingsProvider\n */\nexport function useDisplaySettings(): DisplaySettingsContextValue {\n const context = useContext(DisplaySettingsContext);\n \n if (!context) {\n throw new Error('useDisplaySettings must be used within a DisplaySettingsProvider');\n }\n \n return context;\n}\n\n/**\n * Optional hook that returns null if not within provider\n * Useful for components that should work with or without the provider\n */\nexport function useDisplaySettingsOptional(): DisplaySettingsContextValue | null {\n return useContext(DisplaySettingsContext);\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get effective compact mode value\n * Priority: explicit prop > context value > default (false)\n */\nexport function getEffectiveCompactMode(\n propValue: boolean | undefined,\n contextValue: boolean | undefined\n): boolean {\n if (propValue !== undefined) return propValue;\n if (contextValue !== undefined) return contextValue;\n return false;\n}\n\n/**\n * Get effective accent borders value\n * Priority: explicit prop > context value > default (true)\n */\nexport function getEffectiveAccentBorders(\n propValue: boolean | undefined,\n contextValue: boolean | undefined\n): boolean {\n if (propValue !== undefined) return propValue;\n if (contextValue !== undefined) return contextValue;\n return true;\n}\n\n/**\n * Hook to get card border style based on accentBorders setting\n * Returns the appropriate border style for transparent themes\n */\nexport function useCardBorderStyle(\n tokens: any,\n isTransparentTheme: boolean\n): React.CSSProperties {\n const displaySettings = useDisplaySettingsOptional();\n const accentBorders = displaySettings?.accentBorders ?? true;\n \n if (!isTransparentTheme) {\n return tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` };\n }\n \n if (accentBorders) {\n return tokens.colors.border.cardStyle ?? {};\n }\n \n // Fallback to subtle neutral border when accent borders disabled\n return { border: '1px solid rgba(255, 255, 255, 0.08)' };\n}\n\nexport default DisplaySettingsProvider;\n"],"names":["value"],"mappings":";;AAwFO,MAAM,gBAAgB;AAAA,EAC3B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AACT;AAEO,MAAM,cAAc;AAAA,EACzB,GAAG;AAAA,EACH,OAAO;AAAA,EACP,MAAM;AACR;AASA,MAAM,mBAAoC;AAAA,EACxC,aAAa;AAAA,EACb,aAAa,cAAc;AAAA,EAC3B,WAAW,cAAc;AAAA,EACzB,aAAa;AAAA,EACb,eAAe;AACjB;AAEA,MAAM,cAAc;AAMpB,MAAM,yBAAyB,cAAkD,IAAI;AAgC9E,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAAqD;AAEnD,QAAM,CAAC,UAAU,WAAW,IAAI,SAA0B,MAAM;AAC9D,QAAI,WAAW,OAAO,WAAW,aAAa;AAC5C,UAAI;AACF,cAAM,SAAS,aAAa,QAAQ,WAAW;AAC/C,YAAI,QAAQ;AACV,gBAAM,SAAS,KAAK,MAAM,MAAM;AAChC,iBAAO;AAAA,YACL,aAAa,OAAO,eAAe,sBAAsB,iBAAiB;AAAA,YAC1E,aAAa,OAAO,eAAe,sBAAsB,iBAAiB;AAAA,YAC1E,WAAW,OAAO,aAAa,oBAAoB,iBAAiB;AAAA,YACpE,aAAa,OAAO,eAAe,sBAAsB,iBAAiB;AAAA,YAC1E,eAAe,OAAO,iBAAiB,wBAAwB,iBAAiB;AAAA,UAAA;AAAA,QAEpF;AAAA,MACF,QAAQ;AAAA,MAER;AAAA,IACF;AAEA,WAAO;AAAA,MACL,aAAa,sBAAsB,iBAAiB;AAAA,MACpD,aAAa,sBAAsB,iBAAiB;AAAA,MACpD,WAAW,oBAAoB,iBAAiB;AAAA,MAChD,aAAa,sBAAsB,iBAAiB;AAAA,MACpD,eAAe,wBAAwB,iBAAiB;AAAA,IAAA;AAAA,EAE5D,CAAC;AAGD,YAAU,MAAM;AACd,QAAI,WAAW,OAAO,WAAW,aAAa;AAC5C,UAAI;AACF,qBAAa,QAAQ,aAAa,KAAK,UAAU,QAAQ,CAAC;AAAA,MAC5D,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,OAAO,CAAC;AAGtB,QAAM,iBAAiB,YAAY,CAACA,WAAmB;AACrD,gBAAY,WAAS,EAAE,GAAG,MAAM,aAAaA,SAAQ;AAAA,EACvD,GAAG,CAAA,CAAE;AAEL,QAAM,oBAAoB,YAAY,MAAM;AAC1C,gBAAY,CAAA,UAAS,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,cAAc;AAAA,EACnE,GAAG,CAAA,CAAE;AAEL,QAAM,iBAAiB,YAAY,CAAC,UAAkB;AACpD,gBAAY,WAAS,EAAE,GAAG,MAAM,aAAa,QAAQ;AAAA,EACvD,GAAG,CAAA,CAAE;AAEL,QAAM,eAAe,YAAY,CAAC,UAAkB;AAClD,gBAAY,WAAS,EAAE,GAAG,MAAM,WAAW,QAAQ;AAAA,EACrD,GAAG,CAAA,CAAE;AAEL,QAAM,iBAAiB,YAAY,CAAC,WAAwB;AAC1D,gBAAY,WAAS,EAAE,GAAG,MAAM,aAAa,SAAS;AAAA,EACxD,GAAG,CAAA,CAAE;AAGL,QAAM,WAAW,YAAY,CAAC,UAAkB;AAC9C,gBAAY,CAAA,SAAQ;AAClB,cAAQ,KAAK,aAAA;AAAA,QACX,KAAK;AACH,iBAAO,EAAE,GAAG,MAAM,aAAa,MAAA;AAAA,QACjC,KAAK;AACH,iBAAO,EAAE,GAAG,MAAM,WAAW,MAAA;AAAA,QAC/B,KAAK;AAAA,QACL;AACE,iBAAO,EAAE,GAAG,MAAM,aAAa,OAAO,WAAW,MAAA;AAAA,MAAM;AAAA,IAE7D,CAAC;AAAA,EACH,GAAG,CAAA,CAAE;AAEL,QAAM,mBAAmB,YAAY,CAACA,WAAmB;AACvD,gBAAY,WAAS,EAAE,GAAG,MAAM,eAAeA,SAAQ;AAAA,EACzD,GAAG,CAAA,CAAE;AAEL,QAAM,sBAAsB,YAAY,MAAM;AAC5C,gBAAY,CAAA,UAAS,EAAE,GAAG,MAAM,eAAe,CAAC,KAAK,gBAAgB;AAAA,EACvE,GAAG,CAAA,CAAE;AAEL,QAAM,gBAAgB,YAAY,MAAM;AACtC,gBAAY,gBAAgB;AAAA,EAC9B,GAAG,CAAA,CAAE;AAGL,QAAM,QAAQ,QAAqC,OAAO;AAAA,IACxD,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,SACE,oBAAC,uBAAuB,UAAvB,EAAgC,OAC9B,SAAA,CACH;AAEJ;AAUO,SAAS,qBAAkD;AAChE,QAAM,UAAU,WAAW,sBAAsB;AAEjD,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAEA,SAAO;AACT;AAMO,SAAS,6BAAiE;AAC/E,SAAO,WAAW,sBAAsB;AAC1C;AAUO,SAAS,wBACd,WACA,cACS;AACT,MAAI,cAAc,OAAW,QAAO;AACpC,MAAI,iBAAiB,OAAW,QAAO;AACvC,SAAO;AACT;AAmBO,SAAS,mBACd,QACA,oBACqB;AACrB,QAAM,kBAAkB,2BAAA;AACxB,QAAM,iBAAgB,mDAAiB,kBAAiB;AAExD,MAAI,CAAC,oBAAoB;AACvB,WAAO,OAAO,OAAO,OAAO,aAAa,EAAE,QAAQ,aAAa,OAAO,OAAO,OAAO,KAAK,GAAA;AAAA,EAC5F;AAEA,MAAI,eAAe;AACjB,WAAO,OAAO,OAAO,OAAO,aAAa,CAAA;AAAA,EAC3C;AAGA,SAAO,EAAE,QAAQ,sCAAA;AACnB;"}
|
|
1
|
+
{"version":3,"file":"DisplaySettingsContext.js","sources":["../../../src/react/context/DisplaySettingsContext.tsx"],"sourcesContent":["/**\n * @zendir/ui - DisplaySettingsContext\n * \n * Centralized context for app-wide display preferences.\n * Controls compact mode, accent colors, glass tint, and other display settings.\n * \n * Features:\n * - Compact mode toggle (affects all cards globally)\n * - Accent color selection (for card accents)\n * - Glass tint selection (for transparent themes)\n * - Color target control (both, accent-only, glass-only)\n * - LocalStorage persistence\n * \n * @example\n * ```tsx\n * import { DisplaySettingsProvider, useDisplaySettings } from '@zendir/ui';\n * \n * // Wrap your app\n * <DisplaySettingsProvider>\n * <App />\n * </DisplaySettingsProvider>\n * \n * // Use in components\n * function MyCard() {\n * const { compactMode, accentColor } = useDisplaySettings();\n * return <Card compact={compactMode} />;\n * }\n * ```\n */\n\nimport React, { createContext, useContext, useState, useCallback, useMemo, useEffect, type ReactNode } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type ColorTarget = 'both' | 'accent' | 'glass';\n\nexport interface DisplaySettings {\n /** Global compact mode - affects all cards */\n compactMode: boolean;\n \n /** Accent color for cards and UI elements */\n accentColor: string;\n \n /** Glass tint color for transparent themes */\n glassTint: string;\n \n /** Which color setting to apply: both, accent-only, or glass-only */\n colorTarget: ColorTarget;\n \n /** Enable accent-colored borders on cards (for transparent themes) */\n accentBorders: boolean;\n}\n\nexport interface DisplaySettingsContextValue extends DisplaySettings {\n /** Set compact mode on/off */\n setCompactMode: (value: boolean) => void;\n \n /** Toggle compact mode */\n toggleCompactMode: () => void;\n \n /** Set accent color */\n setAccentColor: (color: string) => void;\n \n /** Set glass tint color */\n setGlassTint: (color: string) => void;\n \n /** Set which color setting to apply */\n setColorTarget: (target: ColorTarget) => void;\n \n /** Set a color that applies based on current target */\n setColor: (color: string) => void;\n \n /** Set accent borders on/off */\n setAccentBorders: (value: boolean) => void;\n \n /** Toggle accent borders */\n toggleAccentBorders: () => void;\n \n /** Reset all settings to defaults */\n resetSettings: () => void;\n}\n\n// =============================================================================\n// Preset Colors\n// =============================================================================\n\nexport const PRESET_COLORS = {\n purple: '#8b5cf6',\n blue: '#3b82f6',\n cyan: '#06b6d4',\n teal: '#14b8a6',\n green: '#10b981',\n lime: '#84cc16',\n amber: '#f59e0b',\n orange: '#f97316',\n pink: '#ec4899',\n red: '#ef4444',\n slate: '#64748b',\n} as const;\n\nexport const GLASS_TINTS = {\n ...PRESET_COLORS,\n clear: 'rgba(255,255,255,0.05)',\n dark: 'rgba(0,0,0,0.3)',\n} as const;\n\nexport type PresetColorKey = keyof typeof PRESET_COLORS;\nexport type GlassTintKey = keyof typeof GLASS_TINTS;\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_SETTINGS: DisplaySettings = {\n compactMode: false,\n accentColor: PRESET_COLORS.purple,\n glassTint: PRESET_COLORS.purple,\n colorTarget: 'both',\n accentBorders: true,\n};\n\nconst STORAGE_KEY = 'zendir-display-settings';\n\n// =============================================================================\n// Context\n// =============================================================================\n\nconst DisplaySettingsContext = createContext<DisplaySettingsContextValue | null>(null);\n\n// =============================================================================\n// Provider Props\n// =============================================================================\n\nexport interface DisplaySettingsProviderProps {\n children: ReactNode;\n \n /** Initial compact mode state */\n defaultCompactMode?: boolean;\n \n /** Initial accent color */\n defaultAccentColor?: string;\n \n /** Initial glass tint color */\n defaultGlassTint?: string;\n \n /** Initial color target */\n defaultColorTarget?: ColorTarget;\n \n /** Initial accent borders state */\n defaultAccentBorders?: boolean;\n \n /** Enable localStorage persistence (default: true) */\n persist?: boolean;\n}\n\n// =============================================================================\n// Provider Component\n// =============================================================================\n\nexport function DisplaySettingsProvider({\n children,\n defaultCompactMode,\n defaultAccentColor,\n defaultGlassTint,\n defaultColorTarget,\n defaultAccentBorders,\n persist = true,\n}: DisplaySettingsProviderProps): React.ReactElement {\n // Initialize state from localStorage or defaults\n const [settings, setSettings] = useState<DisplaySettings>(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (stored) {\n const parsed = JSON.parse(stored);\n return {\n compactMode: parsed.compactMode ?? defaultCompactMode ?? DEFAULT_SETTINGS.compactMode,\n accentColor: parsed.accentColor ?? defaultAccentColor ?? DEFAULT_SETTINGS.accentColor,\n glassTint: parsed.glassTint ?? defaultGlassTint ?? DEFAULT_SETTINGS.glassTint,\n colorTarget: parsed.colorTarget ?? defaultColorTarget ?? DEFAULT_SETTINGS.colorTarget,\n accentBorders: parsed.accentBorders ?? defaultAccentBorders ?? DEFAULT_SETTINGS.accentBorders,\n };\n }\n } catch {\n // Ignore parse errors\n }\n }\n \n return {\n compactMode: defaultCompactMode ?? DEFAULT_SETTINGS.compactMode,\n accentColor: defaultAccentColor ?? DEFAULT_SETTINGS.accentColor,\n glassTint: defaultGlassTint ?? DEFAULT_SETTINGS.glassTint,\n colorTarget: defaultColorTarget ?? DEFAULT_SETTINGS.colorTarget,\n accentBorders: defaultAccentBorders ?? DEFAULT_SETTINGS.accentBorders,\n };\n });\n \n // Persist to localStorage when settings change\n useEffect(() => {\n if (persist && typeof window !== 'undefined') {\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(settings));\n } catch {\n // Ignore storage errors\n }\n }\n }, [settings, persist]);\n \n // Setters\n const setCompactMode = useCallback((value: boolean) => {\n setSettings(prev => ({ ...prev, compactMode: value }));\n }, []);\n \n const toggleCompactMode = useCallback(() => {\n setSettings(prev => ({ ...prev, compactMode: !prev.compactMode }));\n }, []);\n \n const setAccentColor = useCallback((color: string) => {\n setSettings(prev => ({ ...prev, accentColor: color }));\n }, []);\n \n const setGlassTint = useCallback((color: string) => {\n setSettings(prev => ({ ...prev, glassTint: color }));\n }, []);\n \n const setColorTarget = useCallback((target: ColorTarget) => {\n setSettings(prev => ({ ...prev, colorTarget: target }));\n }, []);\n \n // Set color based on current target\n const setColor = useCallback((color: string) => {\n setSettings(prev => {\n switch (prev.colorTarget) {\n case 'accent':\n return { ...prev, accentColor: color };\n case 'glass':\n return { ...prev, glassTint: color };\n case 'both':\n default:\n return { ...prev, accentColor: color, glassTint: color };\n }\n });\n }, []);\n \n const setAccentBorders = useCallback((value: boolean) => {\n setSettings(prev => ({ ...prev, accentBorders: value }));\n }, []);\n \n const toggleAccentBorders = useCallback(() => {\n setSettings(prev => ({ ...prev, accentBorders: !prev.accentBorders }));\n }, []);\n \n const resetSettings = useCallback(() => {\n setSettings(DEFAULT_SETTINGS);\n }, []);\n \n // Memoized context value\n const value = useMemo<DisplaySettingsContextValue>(() => ({\n ...settings,\n setCompactMode,\n toggleCompactMode,\n setAccentColor,\n setGlassTint,\n setColorTarget,\n setColor,\n setAccentBorders,\n toggleAccentBorders,\n resetSettings,\n }), [\n settings,\n setCompactMode,\n toggleCompactMode,\n setAccentColor,\n setGlassTint,\n setColorTarget,\n setColor,\n setAccentBorders,\n toggleAccentBorders,\n resetSettings,\n ]);\n \n return (\n <DisplaySettingsContext.Provider value={value}>\n {children}\n </DisplaySettingsContext.Provider>\n );\n}\n\n// =============================================================================\n// Hook\n// =============================================================================\n\n/**\n * Access display settings context\n * Must be used within a DisplaySettingsProvider\n */\nexport function useDisplaySettings(): DisplaySettingsContextValue {\n const context = useContext(DisplaySettingsContext);\n \n if (!context) {\n throw new Error('useDisplaySettings must be used within a DisplaySettingsProvider');\n }\n \n return context;\n}\n\n/**\n * Optional hook that returns null if not within provider\n * Useful for components that should work with or without the provider\n */\nexport function useDisplaySettingsOptional(): DisplaySettingsContextValue | null {\n return useContext(DisplaySettingsContext);\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get effective compact mode value\n * Priority: explicit prop > context value > default (false)\n */\nexport function getEffectiveCompactMode(\n propValue: boolean | undefined,\n contextValue: boolean | undefined\n): boolean {\n if (propValue !== undefined) return propValue;\n if (contextValue !== undefined) return contextValue;\n return false;\n}\n\n/**\n * Get effective accent borders value\n * Priority: explicit prop > context value > default (true)\n */\nexport function getEffectiveAccentBorders(\n propValue: boolean | undefined,\n contextValue: boolean | undefined\n): boolean {\n if (propValue !== undefined) return propValue;\n if (contextValue !== undefined) return contextValue;\n return true;\n}\n\n/**\n * Hook to get card border style based on accentBorders setting\n * Returns the appropriate border style for transparent themes\n */\nexport function useCardBorderStyle(\n tokens: any,\n isTransparentTheme: boolean\n): React.CSSProperties {\n const displaySettings = useDisplaySettingsOptional();\n const accentBorders = displaySettings?.accentBorders ?? true;\n \n if (!isTransparentTheme) {\n return tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` };\n }\n \n if (accentBorders) {\n return tokens.colors.border.cardStyle ?? {};\n }\n \n // Fallback to subtle neutral border when accent borders disabled\n return { border: '1px solid rgba(255, 255, 255, 0.08)' };\n}\n\nexport default DisplaySettingsProvider;\n"],"names":["value"],"mappings":"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"}
|