@zendir/ui 0.4.1 → 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.
Files changed (391) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -538
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +11 -5
  229. package/dist/react/core/navigation/SideNav.js +857 -602
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +312 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +217 -194
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +419 -41
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PowerOverviewChart.js","sources":["../../../../src/react/charts/unified/PowerOverviewChart.tsx"],"sourcesContent":["/**\n * Power Overview Chart - Combined Timeline Visualization\n * \n * Award-winning UX combining:\n * - Power generation timeline\n * - State regions (Running, Safe, Shutdown)\n * - Mode indicators (Inertial, Sun, Nadir, Velocity, Ground)\n * - Eclipse periods\n * - Event markers with dots on timeline\n * - Interactive tooltips\n * - Status indicators\n * \n * @module @zendir/ui/charts/PowerOverviewChart\n */\n\nimport React, { useMemo } from 'react';\nimport { AstroChart } from './AstroChart';\nimport type { AstroChartProps, ChartStatus } from './types';\nimport { useTheme } from '../../theme';\n\n// =============================================================================\n// Status Shape SVGs - Astro UX compliant (color + shape for accessibility)\n// =============================================================================\n\nconst STATUS_BORDER_COLORS: Record<ChartStatus, string> = {\n off: '#3c3e42',\n standby: '#285766',\n normal: '#005a00',\n caution: '#645600',\n serious: '#664618',\n critical: '#661102',\n};\n\ninterface StatusShapeProps {\n status: ChartStatus;\n size: number;\n color: string;\n borderColor?: string;\n glow?: boolean;\n}\n\nconst StatusShape = ({ status, size, color, borderColor, glow = true }: StatusShapeProps): React.ReactElement => {\n const hasBorder = !!borderColor;\n const strokeWidth = hasBorder ? 1 : 0;\n const glowFilter = glow && !hasBorder ? `drop-shadow(0 0 4px ${color})` : undefined;\n \n const renderShape = () => {\n switch (status) {\n case 'off':\n return <circle cx=\"6\" cy=\"6\" r={hasBorder ? 2.5 : 3} fill={color} stroke={borderColor} strokeWidth={strokeWidth} />;\n case 'standby':\n return <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />;\n case 'normal':\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r={hasBorder ? 4.5 : 5}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'caution':\n return (\n <rect\n x={hasBorder ? 1.5 : 1}\n y={hasBorder ? 1.5 : 1}\n width={hasBorder ? 9 : 10}\n height={hasBorder ? 9 : 10}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'serious':\n return (\n <polygon\n points=\"6,1 11,6 6,11 1,6\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case 'critical':\n return (\n <polygon\n points=\"6,11 1,2 11,2\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n default:\n return null;\n }\n };\n \n return (\n <svg \n viewBox=\"0 0 12 12\" \n width={size} \n height={size}\n style={{ filter: glowFilter }}\n >\n {renderShape()}\n </svg>\n );\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type PowerState = 'running' | 'safe' | 'shutdown';\nexport type OperationalMode = 'none' | 'inertial' | 'sun' | 'nadir' | 'velocity' | 'ground';\nexport type EventType = 'scenario' | 'operator' | 'spacecraft' | 'ground';\n\nexport interface PowerTimelinePoint {\n /** Timestamp (Unix ms or Date) */\n time: number | Date;\n /** Power generated (W) */\n power: number;\n /** Battery percentage (0-100) */\n battery?: number;\n /** System state */\n state: PowerState;\n /** Operational mode */\n mode: OperationalMode;\n /** Eclipse flag */\n eclipse?: boolean;\n}\n\nexport interface PowerEvent {\n /** Event timestamp */\n time: number | Date;\n /** Event type */\n type: EventType;\n /** Event label */\n label: string;\n /** Optional metadata */\n meta?: Record<string, unknown>;\n}\n\nexport interface PowerOverviewChartProps {\n /** Timeline data points */\n data: PowerTimelinePoint[];\n /** Event markers */\n events?: PowerEvent[];\n /** Chart title */\n title?: string;\n /** Chart height */\n height?: number | string;\n /** Show battery as secondary series */\n showBattery?: boolean;\n /** Show legend */\n showLegend?: boolean;\n /** Enable export */\n enableExport?: boolean;\n /** Custom class name */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n /** Show event dots on timeline */\n showEventDots?: boolean;\n /** Show status indicator */\n showStatus?: boolean;\n /** Enable zoom controls */\n enableZoom?: boolean;\n}\n\n// =============================================================================\n// Color Schemes\n// =============================================================================\n\nconst STATE_COLORS: Record<PowerState, string> = {\n running: '#0d4d4d', // Deep teal\n safe: '#8b7355', // Brown/gold\n shutdown: '#1a1a1a', // Near black\n};\n\nconst MODE_COLORS: Record<OperationalMode, string> = {\n none: '#1a2332',\n inertial: '#1e3a5f',\n sun: '#8b7355',\n nadir: '#2d5a4d',\n velocity: '#2e4a7c',\n ground: '#4a3d6e',\n};\n\nconst EVENT_COLORS: Record<EventType, string> = {\n scenario: '#ffffff',\n operator: '#ff6b9d',\n spacecraft: '#a78bfa',\n ground: '#4ade80',\n};\n\nconst ECLIPSE_COLOR = 'rgba(10, 10, 15, 0.6)';\n\n// =============================================================================\n// PowerOverviewChart Component\n// =============================================================================\n\nexport function PowerOverviewChart(props: PowerOverviewChartProps) {\n const {\n data,\n events = [],\n title = 'Power - Power Generated',\n height = 300,\n showBattery = false,\n showLegend = false,\n enableExport = true,\n className,\n compact = false,\n showEventDots = true,\n showStatus = true,\n enableZoom = true,\n } = props;\n\n const { tokens, mode } = useTheme();\n\n // Calculate current status from latest data\n const currentStatus = useMemo(() => {\n if (!data || data.length === 0) return 'off';\n const latest = data[data.length - 1];\n if (latest.state === 'shutdown') return 'critical';\n if (latest.state === 'safe') return 'caution';\n if (latest.eclipse) return 'serious';\n return 'normal';\n }, [data]);\n\n const chartConfig = useMemo<AstroChartProps>(() => {\n if (!data || data.length === 0) {\n return {\n type: 'line',\n series: [],\n height,\n };\n }\n\n // Extract time range\n const times = data.map(d => typeof d.time === 'number' ? d.time : d.time.getTime());\n const minTime = Math.min(...times);\n const maxTime = Math.max(...times);\n\n // Build state regions with proper colors\n const stateRegions: Array<[{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]> = [];\n let currentState = data[0].state;\n let regionStart = minTime;\n\n data.forEach((point, idx) => {\n const pointTime = typeof point.time === 'number' ? point.time : point.time.getTime();\n \n if (point.state !== currentState || idx === data.length - 1) {\n const regionEnd = idx === data.length - 1 ? maxTime : pointTime;\n stateRegions.push([\n { \n xAxis: regionStart,\n itemStyle: { color: STATE_COLORS[currentState] }\n },\n { xAxis: regionEnd }\n ]);\n regionStart = pointTime;\n currentState = point.state;\n }\n });\n\n // Build eclipse regions (overlay on top of state regions)\n const eclipseRegions: Array<[{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]> = [];\n let inEclipse = false;\n let eclipseStart = minTime;\n\n data.forEach((point, _idx) => {\n const pointTime = typeof point.time === 'number' ? point.time : point.time.getTime();\n \n if (point.eclipse && !inEclipse) {\n eclipseStart = pointTime;\n inEclipse = true;\n } else if (!point.eclipse && inEclipse) {\n eclipseRegions.push([\n { \n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR }\n },\n { xAxis: pointTime }\n ]);\n inEclipse = false;\n }\n });\n\n // If still in eclipse at the end\n if (inEclipse) {\n eclipseRegions.push([\n { \n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR }\n },\n { xAxis: maxTime }\n ]);\n }\n\n // Build series\n const series: AstroChartProps['series'] = [\n {\n id: 'power',\n name: 'Power (W)',\n data: data.map(d => ({\n time: typeof d.time === 'number' ? d.time : d.time.getTime(),\n value: d.power,\n })),\n color: '#ffffff',\n lineStyle: { width: 2 },\n areaStyle: { opacity: 0.3, color: 'rgba(255, 255, 255, 0.2)' },\n smooth: true,\n yAxisIndex: 0,\n },\n ];\n\n if (showBattery) {\n series.push({\n id: 'battery',\n name: 'Battery %',\n data: data.map(d => ({\n time: typeof d.time === 'number' ? d.time : d.time.getTime(),\n value: d.battery ?? 0,\n })),\n color: '#4ade80',\n lineStyle: { width: 2, type: 'dashed' },\n smooth: true,\n yAxisIndex: 1,\n });\n }\n\n // Event markers - use dots for timeline, diamonds for emphasis\n const maxPower = Math.max(...data.map(d => d.power), 100);\n \n // Event dots positioned just above the chart area\n const eventDots = showEventDots ? events.map(event => ({\n coord: [\n typeof event.time === 'number' ? event.time : event.time.getTime(),\n maxPower * 0.95\n ] as [number, number],\n name: event.label,\n symbol: event.type === 'scenario' ? 'diamond' : 'circle',\n symbolSize: event.type === 'scenario' ? 10 : 8,\n itemStyle: {\n color: EVENT_COLORS[event.type],\n borderColor: tokens.colors.background.base,\n borderWidth: 2,\n shadowBlur: 4,\n shadowColor: EVENT_COLORS[event.type],\n },\n label: {\n show: false,\n },\n emphasis: {\n scale: true,\n itemStyle: {\n borderWidth: 3,\n shadowBlur: 8,\n },\n label: {\n show: true,\n fontSize: 12,\n color: tokens.colors.text.primary,\n backgroundColor: tokens.colors.background.surface,\n borderColor: EVENT_COLORS[event.type],\n borderWidth: 1,\n padding: [6, 10],\n borderRadius: 6,\n formatter: `{b}`,\n },\n },\n })) : [];\n\n // Dual axis config\n const yAxisConfig: AstroChartProps['yAxis'] = showBattery ? [\n {\n type: 'value',\n name: 'Power (W)',\n position: 'left',\n min: 0,\n splitLine: { show: true },\n },\n {\n type: 'value',\n name: 'Battery %',\n position: 'right',\n min: 0,\n max: 100,\n splitLine: { show: false },\n },\n ] : {\n type: 'value',\n name: 'Power (W)',\n min: 0,\n splitLine: { show: true },\n };\n\n return {\n type: 'area',\n title,\n subtitle: compact ? undefined : `System states, operational modes, eclipse periods, and events`,\n height,\n series,\n xAxis: {\n type: 'time',\n showGrid: true,\n splitLine: { show: true },\n },\n yAxis: yAxisConfig,\n tooltip: {\n enabled: true,\n trigger: 'axis',\n crosshair: 'both',\n formatter: (params: any) => {\n const param = Array.isArray(params) ? params[0] : params;\n if (!param) return '';\n \n const time = new Date(param.data[0]);\n const dataPoint = data.find(d => {\n const t = typeof d.time === 'number' ? d.time : d.time.getTime();\n return t === param.data[0];\n });\n \n let html = `<div style=\"font-size: 13px; min-width: 220px; font-family: ${tokens.typography.fontFamily.primary};\">`;\n html += `<div style=\"font-weight: 600; margin-bottom: 10px; color: ${tokens.colors.text.primary}; font-size: 14px;\">${time.toLocaleTimeString()}</div>`;\n \n // Power values\n if (Array.isArray(params)) {\n params.forEach((p: any) => {\n const value = p.data[1];\n const seriesName = p.seriesName;\n const color = p.color;\n html += `<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 6px;\">`;\n html += `<span style=\"width: 12px; height: 12px; background: ${color}; border-radius: 3px; box-shadow: 0 0 4px ${color};\"></span>`;\n html += `<span style=\"color: ${tokens.colors.text.secondary};\">${seriesName}: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)}</strong></span>`;\n html += `</div>`;\n });\n } else {\n const value = param.data[1];\n html += `<div style=\"margin-bottom: 6px; color: ${tokens.colors.text.secondary};\">Power: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)} W</strong></div>`;\n }\n \n // System info\n if (dataPoint) {\n html += `<div style=\"margin-top: 10px; padding-top: 10px; border-top: 1px solid ${tokens.colors.border.muted};\">`;\n html += `<div style=\"display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; font-size: 12px;\">`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">STATE</span>`;\n html += `<span style=\"color: ${STATE_COLORS[dataPoint.state]}; font-weight: 600;\">${dataPoint.state.toUpperCase()}</span>`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">MODE</span>`;\n html += `<span style=\"color: ${MODE_COLORS[dataPoint.mode]}; font-weight: 600;\">${dataPoint.mode.toUpperCase()}</span>`;\n if (dataPoint.battery !== undefined) {\n html += `<span style=\"color: ${tokens.colors.text.muted};\">BATTERY</span>`;\n html += `<span style=\"color: ${tokens.colors.text.primary}; font-weight: 600;\">${dataPoint.battery.toFixed(1)}%</span>`;\n }\n html += `</div>`;\n if (dataPoint.eclipse) {\n html += `<div style=\"color: ${tokens.colors.status.caution}; font-weight: 600; margin-top: 8px; font-size: 12px; display: flex; align-items: center; gap: 6px;\">`;\n html += `<span style=\"font-weight: 600;\">ECLIPSE</span>`;\n html += `</div>`;\n }\n html += `</div>`;\n }\n \n html += `</div>`;\n return html;\n },\n },\n legend: showLegend ? {\n show: true,\n position: 'top',\n orient: 'horizontal',\n } : { show: false },\n zoom: enableZoom ? {\n enabled: true,\n type: 'both',\n axis: 'x',\n start: 0,\n end: 100,\n } : undefined,\n annotations: {\n markAreas: {\n data: [...stateRegions, ...eclipseRegions],\n itemStyle: {\n opacity: 1,\n },\n },\n markPoints: eventDots,\n },\n export: enableExport ? {\n enabled: true,\n formats: ['png', 'svg', 'csv'],\n getExportFileName: () => `zendir-power-overview-${Date.now()}`,\n } : undefined,\n infoTooltip: compact ? undefined : {\n content: (\n <div style={{ fontSize: '13px', lineHeight: '1.6' }}>\n <div style={{ marginBottom: '8px', fontWeight: 500 }}>Interactive Power Timeline</div>\n <div style={{ marginBottom: '4px' }}>• Background colors show system states</div>\n <div style={{ marginBottom: '4px' }}>• Dark overlays indicate eclipse periods</div>\n <div style={{ marginBottom: '4px' }}>• Diamond markers show key events</div>\n <div>• Scroll to zoom, drag to pan</div>\n </div>\n ),\n },\n className,\n };\n }, [data, events, title, height, showBattery, showLegend, enableExport, className, compact, showEventDots, enableZoom, tokens]);\n\n return (\n <div style={{ position: 'relative', width: '100%' }}>\n {showStatus && (\n <div style={{\n position: 'absolute',\n top: 10,\n right: 60,\n zIndex: 10,\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n padding: '6px 12px',\n background: tokens.colors.background.surface,\n border: `1px solid ${tokens.colors.border.default}`,\n borderRadius: tokens.borderRadius.md,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.primary,\n }}>\n <StatusShape\n status={currentStatus}\n size={10}\n color={tokens.colors.status[currentStatus] || tokens.colors.status.off}\n borderColor={mode === 'light' ? STATUS_BORDER_COLORS[currentStatus] : undefined}\n glow={mode !== 'light'}\n />\n <span style={{ \n color: tokens.colors.text.primary,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}>\n {currentStatus}\n </span>\n </div>\n )}\n <AstroChart {...chartConfig} />\n </div>\n );\n}\n\n// =============================================================================\n// Sample Data Generator\n// =============================================================================\n\nexport function generateSamplePowerData(durationSeconds = 3600): {\n data: PowerTimelinePoint[];\n events: PowerEvent[];\n} {\n const dataPoints: PowerTimelinePoint[] = [];\n const eventList: PowerEvent[] = [];\n \n const startTime = Date.now();\n const interval = 10;\n \n let currentState: PowerState = 'running';\n let currentMode: OperationalMode = 'inertial';\n let inEclipse = false;\n \n for (let i = 0; i <= durationSeconds; i += interval) {\n const time = startTime + i * 1000;\n \n // State transitions\n if (i === 300) currentState = 'safe';\n if (i === 600) currentState = 'running';\n if (i === 1800) currentState = 'shutdown';\n if (i === 2100) currentState = 'running';\n if (i === 2400) currentState = 'safe';\n if (i === 2700) currentState = 'running';\n \n // Mode transitions\n if (i === 200) currentMode = 'sun';\n if (i === 500) currentMode = 'inertial';\n if (i === 800) currentMode = 'nadir';\n if (i === 1100) currentMode = 'velocity';\n if (i === 1400) currentMode = 'ground';\n if (i === 1700) currentMode = 'sun';\n if (i === 2000) currentMode = 'inertial';\n if (i === 2300) currentMode = 'nadir';\n if (i === 2600) currentMode = 'velocity';\n if (i === 2900) currentMode = 'ground';\n if (i === 3200) currentMode = 'sun';\n \n // Eclipse periods\n if (i >= 1700 && i <= 2100) inEclipse = true;\n else if (i >= 2400 && i <= 2700) inEclipse = true;\n else inEclipse = false;\n \n // Battery\n let battery = 95;\n if (inEclipse) {\n battery = 95 - ((i - 1700) % 400) * 0.1;\n } else if (currentMode === 'sun') {\n battery = 70 + Math.sin(i * 0.01) * 15;\n } else {\n battery = 90 + Math.sin(i * 0.005) * 5;\n }\n battery = Math.max(10, Math.min(100, battery));\n \n // Power\n let power = 0;\n if (inEclipse) {\n power = 0;\n } else if (currentMode === 'sun') {\n power = 300 + Math.sin(i * 0.02) * 50;\n } else if (currentMode === 'ground' || currentMode === 'nadir') {\n power = 150 + Math.sin(i * 0.03) * 30;\n } else {\n power = 50 + Math.sin(i * 0.01) * 20;\n }\n \n if (currentState === 'safe') power *= 0.3;\n if (currentState === 'shutdown') power = 0;\n \n dataPoints.push({\n time,\n power,\n battery,\n state: currentState,\n mode: currentMode,\n eclipse: inEclipse,\n });\n }\n \n // Events\n const eventTimes = [250, 420, 550, 900, 1300, 1650, 1850, 2200, 2500, 2800, 3100, 3400];\n const eventTypes: EventType[] = ['scenario', 'operator', 'spacecraft', 'ground'];\n \n eventTimes.forEach((timeOffset, idx) => {\n eventList.push({\n time: startTime + timeOffset * 1000,\n type: eventTypes[idx % eventTypes.length],\n label: `Event ${idx + 1}`,\n });\n });\n \n return { data: dataPoints, events: eventList };\n}\n\nexport default PowerOverviewChart;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PowerOverviewChart.js","names":[],"sources":["../../../../src/react/charts/unified/PowerOverviewChart.tsx"],"sourcesContent":["/**\n * Power Overview Chart - Combined Timeline Visualization\n *\n * Award-winning UX combining:\n * - Power generation timeline\n * - State regions (Running, Safe, Shutdown)\n * - Mode indicators (Inertial, Sun, Nadir, Velocity, Ground)\n * - Eclipse periods\n * - Event markers with dots on timeline\n * - Interactive tooltips\n * - Status indicators\n *\n * @module @zendir/ui/charts/PowerOverviewChart\n */\n\nimport React, { useMemo } from \"react\";\nimport { AstroChart } from \"./AstroChart\";\nimport type { AstroChartProps, ChartStatus } from \"./types\";\nimport { useTheme } from \"../../theme\";\n\n// =============================================================================\n// Status Shape SVGs - Astro UX compliant (color + shape for accessibility)\n// =============================================================================\n\nconst STATUS_BORDER_COLORS: Record<ChartStatus, string> = {\n off: \"#3c3e42\",\n standby: \"#285766\",\n normal: \"#005a00\",\n caution: \"#645600\",\n serious: \"#664618\",\n critical: \"#661102\",\n};\n\ninterface StatusShapeProps {\n status: ChartStatus;\n size: number;\n color: string;\n borderColor?: string;\n glow?: boolean;\n}\n\nconst StatusShape = ({\n status,\n size,\n color,\n borderColor,\n glow = true,\n}: StatusShapeProps): React.ReactElement => {\n const hasBorder = !!borderColor;\n const strokeWidth = hasBorder ? 1 : 0;\n const glowFilter =\n glow && !hasBorder ? `drop-shadow(0 0 4px ${color})` : undefined;\n\n const renderShape = () => {\n switch (status) {\n case \"off\":\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r={hasBorder ? 2.5 : 3}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case \"standby\":\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3.5\"\n fill=\"none\"\n stroke={color}\n strokeWidth=\"2\"\n />\n );\n case \"normal\":\n return (\n <circle\n cx=\"6\"\n cy=\"6\"\n r={hasBorder ? 4.5 : 5}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case \"caution\":\n return (\n <rect\n x={hasBorder ? 1.5 : 1}\n y={hasBorder ? 1.5 : 1}\n width={hasBorder ? 9 : 10}\n height={hasBorder ? 9 : 10}\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case \"serious\":\n return (\n <polygon\n points=\"6,1 11,6 6,11 1,6\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n case \"critical\":\n return (\n <polygon\n points=\"6,11 1,2 11,2\"\n fill={color}\n stroke={borderColor}\n strokeWidth={strokeWidth}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <svg\n viewBox=\"0 0 12 12\"\n width={size}\n height={size}\n style={{ filter: glowFilter }}\n >\n {renderShape()}\n </svg>\n );\n};\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type PowerState = \"running\" | \"safe\" | \"shutdown\";\nexport type OperationalMode =\n | \"none\"\n | \"inertial\"\n | \"sun\"\n | \"nadir\"\n | \"velocity\"\n | \"ground\";\nexport type EventType = \"scenario\" | \"operator\" | \"spacecraft\" | \"ground\";\n\nexport interface PowerTimelinePoint {\n /** Timestamp (Unix ms or Date) */\n time: number | Date;\n /** Power generated (W) */\n power: number;\n /** Battery percentage (0-100) */\n battery?: number;\n /** System state */\n state: PowerState;\n /** Operational mode */\n mode: OperationalMode;\n /** Eclipse flag */\n eclipse?: boolean;\n}\n\nexport interface PowerEvent {\n /** Event timestamp */\n time: number | Date;\n /** Event type */\n type: EventType;\n /** Event label */\n label: string;\n /** Optional metadata */\n meta?: Record<string, unknown>;\n}\n\nexport interface PowerOverviewChartProps {\n /** Timeline data points */\n data: PowerTimelinePoint[];\n /** Event markers */\n events?: PowerEvent[];\n /** Chart title */\n title?: string;\n /** Chart height */\n height?: number | string;\n /** Show battery as secondary series */\n showBattery?: boolean;\n /** Show legend */\n showLegend?: boolean;\n /** Enable export */\n enableExport?: boolean;\n /** Custom class name */\n className?: string;\n /** Compact mode */\n compact?: boolean;\n /** Show event dots on timeline */\n showEventDots?: boolean;\n /** Show status indicator */\n showStatus?: boolean;\n /** Enable zoom controls */\n enableZoom?: boolean;\n}\n\n// =============================================================================\n// Color Schemes\n// =============================================================================\n\nconst STATE_COLORS: Record<PowerState, string> = {\n running: \"#0d4d4d\", // Deep teal\n safe: \"#8b7355\", // Brown/gold\n shutdown: \"#1a1a1a\", // Near black\n};\n\nconst MODE_COLORS: Record<OperationalMode, string> = {\n none: \"#1a2332\",\n inertial: \"#1e3a5f\",\n sun: \"#8b7355\",\n nadir: \"#2d5a4d\",\n velocity: \"#2e4a7c\",\n ground: \"#4a3d6e\",\n};\n\nconst EVENT_COLORS: Record<EventType, string> = {\n scenario: \"#ffffff\",\n operator: \"#ff6b9d\",\n spacecraft: \"#a78bfa\",\n ground: \"#4ade80\",\n};\n\nconst ECLIPSE_COLOR = \"rgba(10, 10, 15, 0.6)\";\n\n// =============================================================================\n// PowerOverviewChart Component\n// =============================================================================\n\nexport function PowerOverviewChart(props: PowerOverviewChartProps) {\n const {\n data,\n events = [],\n title = \"Power - Power Generated\",\n height = 300,\n showBattery = false,\n showLegend = false,\n enableExport = true,\n className,\n compact = false,\n showEventDots = true,\n showStatus = true,\n enableZoom = true,\n } = props;\n\n const { tokens, mode } = useTheme();\n\n // Calculate current status from latest data\n const currentStatus = useMemo(() => {\n if (!data || data.length === 0) return \"off\";\n const latest = data[data.length - 1];\n if (latest.state === \"shutdown\") return \"critical\";\n if (latest.state === \"safe\") return \"caution\";\n if (latest.eclipse) return \"serious\";\n return \"normal\";\n }, [data]);\n\n const chartConfig = useMemo<AstroChartProps>(() => {\n if (!data || data.length === 0) {\n return {\n type: \"line\",\n series: [],\n height,\n };\n }\n\n // Extract time range\n const times = data.map((d) =>\n typeof d.time === \"number\" ? d.time : d.time.getTime(),\n );\n const minTime = Math.min(...times);\n const maxTime = Math.max(...times);\n\n // Build state regions with proper colors\n const stateRegions: Array<\n [{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]\n > = [];\n let currentState = data[0].state;\n let regionStart = minTime;\n\n data.forEach((point, idx) => {\n const pointTime =\n typeof point.time === \"number\" ? point.time : point.time.getTime();\n\n if (point.state !== currentState || idx === data.length - 1) {\n const regionEnd = idx === data.length - 1 ? maxTime : pointTime;\n stateRegions.push([\n {\n xAxis: regionStart,\n itemStyle: { color: STATE_COLORS[currentState] },\n },\n { xAxis: regionEnd },\n ]);\n regionStart = pointTime;\n currentState = point.state;\n }\n });\n\n // Build eclipse regions (overlay on top of state regions)\n const eclipseRegions: Array<\n [{ xAxis: number; itemStyle?: { color: string } }, { xAxis: number }]\n > = [];\n let inEclipse = false;\n let eclipseStart = minTime;\n\n data.forEach((point, _idx) => {\n const pointTime =\n typeof point.time === \"number\" ? point.time : point.time.getTime();\n\n if (point.eclipse && !inEclipse) {\n eclipseStart = pointTime;\n inEclipse = true;\n } else if (!point.eclipse && inEclipse) {\n eclipseRegions.push([\n {\n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR },\n },\n { xAxis: pointTime },\n ]);\n inEclipse = false;\n }\n });\n\n // If still in eclipse at the end\n if (inEclipse) {\n eclipseRegions.push([\n {\n xAxis: eclipseStart,\n itemStyle: { color: ECLIPSE_COLOR },\n },\n { xAxis: maxTime },\n ]);\n }\n\n // Build series\n const series: AstroChartProps[\"series\"] = [\n {\n id: \"power\",\n name: \"Power (W)\",\n data: data.map((d) => ({\n time: typeof d.time === \"number\" ? d.time : d.time.getTime(),\n value: d.power,\n })),\n color: \"#ffffff\",\n lineStyle: { width: 2 },\n areaStyle: { opacity: 0.3, color: \"rgba(255, 255, 255, 0.2)\" },\n smooth: true,\n yAxisIndex: 0,\n },\n ];\n\n if (showBattery) {\n series.push({\n id: \"battery\",\n name: \"Battery %\",\n data: data.map((d) => ({\n time: typeof d.time === \"number\" ? d.time : d.time.getTime(),\n value: d.battery ?? 0,\n })),\n color: \"#4ade80\",\n lineStyle: { width: 2, type: \"dashed\" },\n smooth: true,\n yAxisIndex: 1,\n });\n }\n\n // Event markers - use dots for timeline, diamonds for emphasis\n const maxPower = Math.max(...data.map((d) => d.power), 100);\n\n // Event dots positioned just above the chart area\n const eventDots = showEventDots\n ? events.map((event) => ({\n coord: [\n typeof event.time === \"number\" ? event.time : event.time.getTime(),\n maxPower * 0.95,\n ] as [number, number],\n name: event.label,\n symbol: event.type === \"scenario\" ? \"diamond\" : \"circle\",\n symbolSize: event.type === \"scenario\" ? 10 : 8,\n itemStyle: {\n color: EVENT_COLORS[event.type],\n borderColor: tokens.colors.background.base,\n borderWidth: 2,\n shadowBlur: 4,\n shadowColor: EVENT_COLORS[event.type],\n },\n label: {\n show: false,\n },\n emphasis: {\n scale: true,\n itemStyle: {\n borderWidth: 3,\n shadowBlur: 8,\n },\n label: {\n show: true,\n fontSize: 12,\n color: tokens.colors.text.primary,\n backgroundColor: tokens.colors.background.surface,\n borderColor: EVENT_COLORS[event.type],\n borderWidth: 1,\n padding: [6, 10],\n borderRadius: 6,\n formatter: `{b}`,\n },\n },\n }))\n : [];\n\n // Dual axis config\n const yAxisConfig: AstroChartProps[\"yAxis\"] = showBattery\n ? [\n {\n type: \"value\",\n name: \"Power (W)\",\n position: \"left\",\n min: 0,\n splitLine: { show: true },\n },\n {\n type: \"value\",\n name: \"Battery %\",\n position: \"right\",\n min: 0,\n max: 100,\n splitLine: { show: false },\n },\n ]\n : {\n type: \"value\",\n name: \"Power (W)\",\n min: 0,\n splitLine: { show: true },\n };\n\n return {\n type: \"area\",\n title,\n subtitle: compact\n ? undefined\n : `System states, operational modes, eclipse periods, and events`,\n height,\n series,\n xAxis: {\n type: \"time\",\n showGrid: true,\n splitLine: { show: true },\n },\n yAxis: yAxisConfig,\n tooltip: {\n enabled: true,\n trigger: \"axis\",\n crosshair: \"both\",\n formatter: (params: any) => {\n const param = Array.isArray(params) ? params[0] : params;\n if (!param) return \"\";\n\n const time = new Date(param.data[0]);\n const dataPoint = data.find((d) => {\n const t = typeof d.time === \"number\" ? d.time : d.time.getTime();\n return t === param.data[0];\n });\n\n let html = `<div style=\"font-size: 13px; min-width: 220px; font-family: ${tokens.typography.fontFamily.primary};\">`;\n html += `<div style=\"font-weight: 600; margin-bottom: 10px; color: ${tokens.colors.text.primary}; font-size: 14px;\">${time.toLocaleTimeString()}</div>`;\n\n // Power values\n if (Array.isArray(params)) {\n params.forEach((p: any) => {\n const value = p.data[1];\n const seriesName = p.seriesName;\n const color = p.color;\n html += `<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 6px;\">`;\n html += `<span style=\"width: 12px; height: 12px; background: ${color}; border-radius: 3px; box-shadow: 0 0 4px ${color};\"></span>`;\n html += `<span style=\"color: ${tokens.colors.text.secondary};\">${seriesName}: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)}</strong></span>`;\n html += `</div>`;\n });\n } else {\n const value = param.data[1];\n html += `<div style=\"margin-bottom: 6px; color: ${tokens.colors.text.secondary};\">Power: <strong style=\"color: ${tokens.colors.text.primary};\">${value.toFixed(1)} W</strong></div>`;\n }\n\n // System info\n if (dataPoint) {\n html += `<div style=\"margin-top: 10px; padding-top: 10px; border-top: 1px solid ${tokens.colors.border.muted};\">`;\n html += `<div style=\"display: grid; grid-template-columns: auto 1fr; gap: 8px 12px; font-size: 12px;\">`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">STATE</span>`;\n html += `<span style=\"color: ${STATE_COLORS[dataPoint.state]}; font-weight: 600;\">${dataPoint.state.toUpperCase()}</span>`;\n html += `<span style=\"color: ${tokens.colors.text.muted};\">MODE</span>`;\n html += `<span style=\"color: ${MODE_COLORS[dataPoint.mode]}; font-weight: 600;\">${dataPoint.mode.toUpperCase()}</span>`;\n if (dataPoint.battery !== undefined) {\n html += `<span style=\"color: ${tokens.colors.text.muted};\">BATTERY</span>`;\n html += `<span style=\"color: ${tokens.colors.text.primary}; font-weight: 600;\">${dataPoint.battery.toFixed(1)}%</span>`;\n }\n html += `</div>`;\n if (dataPoint.eclipse) {\n html += `<div style=\"color: ${tokens.colors.status.caution}; font-weight: 600; margin-top: 8px; font-size: 12px; display: flex; align-items: center; gap: 6px;\">`;\n html += `<span style=\"font-weight: 600;\">ECLIPSE</span>`;\n html += `</div>`;\n }\n html += `</div>`;\n }\n\n html += `</div>`;\n return html;\n },\n },\n legend: showLegend\n ? {\n show: true,\n position: \"top\",\n orient: \"horizontal\",\n }\n : { show: false },\n zoom: enableZoom\n ? {\n enabled: true,\n type: \"both\",\n axis: \"x\",\n start: 0,\n end: 100,\n }\n : undefined,\n annotations: {\n markAreas: {\n data: [...stateRegions, ...eclipseRegions],\n itemStyle: {\n opacity: 1,\n },\n },\n markPoints: eventDots,\n },\n export: enableExport\n ? {\n enabled: true,\n formats: [\"png\", \"svg\", \"csv\"],\n getExportFileName: () => `zendir-power-overview-${Date.now()}`,\n }\n : undefined,\n infoTooltip: compact\n ? undefined\n : {\n content: (\n <div style={{ fontSize: \"13px\", lineHeight: \"1.6\" }}>\n <div style={{ marginBottom: \"8px\", fontWeight: 500 }}>\n Interactive Power Timeline\n </div>\n <div style={{ marginBottom: \"4px\" }}>\n • Background colors show system states\n </div>\n <div style={{ marginBottom: \"4px\" }}>\n • Dark overlays indicate eclipse periods\n </div>\n <div style={{ marginBottom: \"4px\" }}>\n • Diamond markers show key events\n </div>\n <div>• Scroll to zoom, drag to pan</div>\n </div>\n ),\n },\n className,\n };\n }, [\n data,\n events,\n title,\n height,\n showBattery,\n showLegend,\n enableExport,\n className,\n compact,\n showEventDots,\n enableZoom,\n tokens,\n ]);\n\n return (\n <div style={{ position: \"relative\", width: \"100%\" }}>\n {showStatus && (\n <div\n style={{\n position: \"absolute\",\n top: 10,\n right: 60,\n zIndex: 10,\n display: \"flex\",\n alignItems: \"center\",\n gap: 8,\n padding: \"6px 12px\",\n background: tokens.colors.background.surface,\n border: `1px solid ${tokens.colors.border.default}`,\n borderRadius: tokens.borderRadius.md,\n fontSize: tokens.typography.fontSize.xs,\n fontFamily: tokens.typography.fontFamily.primary,\n }}\n >\n <StatusShape\n status={currentStatus}\n size={10}\n color={\n tokens.colors.status[currentStatus] || tokens.colors.status.off\n }\n borderColor={\n mode === \"light\" ? STATUS_BORDER_COLORS[currentStatus] : undefined\n }\n glow={mode !== \"light\"}\n />\n <span\n style={{\n color: tokens.colors.text.primary,\n fontWeight: 500,\n textTransform: \"uppercase\",\n letterSpacing: \"0.5px\",\n }}\n >\n {currentStatus}\n </span>\n </div>\n )}\n <AstroChart {...chartConfig} />\n </div>\n );\n}\n\n// =============================================================================\n// Sample Data Generator\n// =============================================================================\n\nexport function generateSamplePowerData(durationSeconds = 3600): {\n data: PowerTimelinePoint[];\n events: PowerEvent[];\n} {\n const dataPoints: PowerTimelinePoint[] = [];\n const eventList: PowerEvent[] = [];\n\n const startTime = Date.now();\n const interval = 10;\n\n let currentState: PowerState = \"running\";\n let currentMode: OperationalMode = \"inertial\";\n let inEclipse = false;\n\n for (let i = 0; i <= durationSeconds; i += interval) {\n const time = startTime + i * 1000;\n\n // State transitions\n if (i === 300) currentState = \"safe\";\n if (i === 600) currentState = \"running\";\n if (i === 1800) currentState = \"shutdown\";\n if (i === 2100) currentState = \"running\";\n if (i === 2400) currentState = \"safe\";\n if (i === 2700) currentState = \"running\";\n\n // Mode transitions\n if (i === 200) currentMode = \"sun\";\n if (i === 500) currentMode = \"inertial\";\n if (i === 800) currentMode = \"nadir\";\n if (i === 1100) currentMode = \"velocity\";\n if (i === 1400) currentMode = \"ground\";\n if (i === 1700) currentMode = \"sun\";\n if (i === 2000) currentMode = \"inertial\";\n if (i === 2300) currentMode = \"nadir\";\n if (i === 2600) currentMode = \"velocity\";\n if (i === 2900) currentMode = \"ground\";\n if (i === 3200) currentMode = \"sun\";\n\n // Eclipse periods\n if (i >= 1700 && i <= 2100) inEclipse = true;\n else if (i >= 2400 && i <= 2700) inEclipse = true;\n else inEclipse = false;\n\n // Battery\n let battery = 95;\n if (inEclipse) {\n battery = 95 - ((i - 1700) % 400) * 0.1;\n } else if (currentMode === \"sun\") {\n battery = 70 + Math.sin(i * 0.01) * 15;\n } else {\n battery = 90 + Math.sin(i * 0.005) * 5;\n }\n battery = Math.max(10, Math.min(100, battery));\n\n // Power\n let power = 0;\n if (inEclipse) {\n power = 0;\n } else if (currentMode === \"sun\") {\n power = 300 + Math.sin(i * 0.02) * 50;\n } else if (currentMode === \"ground\" || currentMode === \"nadir\") {\n power = 150 + Math.sin(i * 0.03) * 30;\n } else {\n power = 50 + Math.sin(i * 0.01) * 20;\n }\n\n if (currentState === \"safe\") power *= 0.3;\n if (currentState === \"shutdown\") power = 0;\n\n dataPoints.push({\n time,\n power,\n battery,\n state: currentState,\n mode: currentMode,\n eclipse: inEclipse,\n });\n }\n\n // Events\n const eventTimes = [\n 250, 420, 550, 900, 1300, 1650, 1850, 2200, 2500, 2800, 3100, 3400,\n ];\n const eventTypes: EventType[] = [\n \"scenario\",\n \"operator\",\n \"spacecraft\",\n \"ground\",\n ];\n\n eventTimes.forEach((timeOffset, idx) => {\n eventList.push({\n time: startTime + timeOffset * 1000,\n type: eventTypes[idx % eventTypes.length],\n label: `Event ${idx + 1}`,\n });\n });\n\n return { data: dataPoints, events: eventList };\n}\n\nexport default PowerOverviewChart;\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  import { AstroChartHandle } from './AstroChart';
3
3
  import { PowerChartData, AttitudeChartData, ThermalChartData, LinkBudgetChartData, ContactWindowData, SpectrumDataPoint, ManeuverBudgetData, EclipseTimelineData, ExportOptions, InfoTooltipOptions, CoverageGridData, WaterfallDataPoint, WaterfallSignalMarker, DopplerTrackPoint, SatellitePassInfo, LinkMarginPoint } from './types';
4
-
5
4
  interface CommonChartProps {
6
5
  /** Export options */
7
6
  export?: ExportOptions;
@@ -16,7 +15,7 @@ interface CommonChartProps {
16
15
  * Status for the header icon (shows as colored dot)
17
16
  * Uses AstroUXDS status colors
18
17
  */
19
- iconStatus?: 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';
18
+ iconStatus?: "off" | "standby" | "normal" | "caution" | "serious" | "critical";
20
19
  /**
21
20
  * Status message shown on hover over the status icon
22
21
  */
@@ -256,7 +255,7 @@ export interface HeliocentricOrbitProps extends CommonChartProps {
256
255
  /** Show labels on bodies */
257
256
  showLabels?: boolean;
258
257
  /** Visualization mode: 2D or 3D */
259
- mode?: '2d' | '3d';
258
+ mode?: "2d" | "3d";
260
259
  /** Loading state */
261
260
  loading?: boolean;
262
261
  /** Custom className */
@@ -329,7 +328,7 @@ export interface Bar3DChartProps extends CommonChartProps {
329
328
  /** Z-axis label */
330
329
  zAxisLabel?: string;
331
330
  /** Bar shading style */
332
- shading?: 'color' | 'lambert' | 'realistic';
331
+ shading?: "color" | "lambert" | "realistic";
333
332
  /** Auto rotate */
334
333
  autoRotate?: boolean;
335
334
  /** Loading state */
@@ -363,7 +362,7 @@ export interface Surface3DChartProps extends CommonChartProps {
363
362
  /** Z-axis label */
364
363
  zAxisLabel?: string;
365
364
  /** Surface shading style */
366
- shading?: 'color' | 'lambert' | 'realistic';
365
+ shading?: "color" | "lambert" | "realistic";
367
366
  /** Auto rotate */
368
367
  autoRotate?: boolean;
369
368
  /** Loading state */
@@ -429,7 +428,7 @@ export interface SphericalRadar3DData {
429
428
  /** Range/distance */
430
429
  range: number;
431
430
  /** Object category */
432
- category?: 'satellite' | 'debris' | 'unknown' | 'friendly' | 'hostile';
431
+ category?: "satellite" | "debris" | "unknown" | "friendly" | "hostile";
433
432
  /** Color override */
434
433
  color?: string;
435
434
  /** Size override */
@@ -474,7 +473,7 @@ export interface TransferOrbitSegment {
474
473
  y: number;
475
474
  z: number;
476
475
  }>;
477
- type: 'coast' | 'burn' | 'gravity-assist' | 'spiral';
476
+ type: "coast" | "burn" | "gravity-assist" | "spiral";
478
477
  deltaV?: number;
479
478
  color?: string;
480
479
  }
@@ -485,7 +484,7 @@ export interface TransferOrbitWaypoint {
485
484
  y: number;
486
485
  z: number;
487
486
  };
488
- type: 'departure' | 'arrival' | 'flyby' | 'node' | 'burn';
487
+ type: "departure" | "arrival" | "flyby" | "node" | "burn";
489
488
  deltaV?: number;
490
489
  tof?: number;
491
490
  }
@@ -535,7 +534,7 @@ export interface AttitudeHistory3DChartProps extends CommonChartProps {
535
534
  title?: string;
536
535
  width?: number | string;
537
536
  height?: number;
538
- mode?: 'euler' | 'pointing-error';
537
+ mode?: "euler" | "pointing-error";
539
538
  showModeTransitions?: boolean;
540
539
  autoRotate?: boolean;
541
540
  loading?: boolean;
@@ -603,7 +602,7 @@ export interface LaunchCorridorData {
603
602
  corridors: Array<{
604
603
  id: string;
605
604
  name: string;
606
- type: 'nominal' | 'abort' | 'safety' | 'exclusion';
605
+ type: "nominal" | "abort" | "safety" | "exclusion";
607
606
  groundFootprint: Array<{
608
607
  lat: number;
609
608
  lon: number;
@@ -693,7 +692,7 @@ export interface WaterfallChartProps extends CommonChartProps {
693
692
  /** FFT bins */
694
693
  fftBins?: number;
695
694
  /** Color map: viridis, plasma, inferno, magma */
696
- colorMap?: 'viridis' | 'plasma' | 'inferno' | 'magma';
695
+ colorMap?: "viridis" | "plasma" | "inferno" | "magma";
697
696
  /** Power range [min, max] in dBm */
698
697
  powerRange?: [number, number];
699
698
  /** Time window in seconds */
@@ -752,7 +751,7 @@ export interface LinkMarginChartProps extends CommonChartProps {
752
751
  /** Minimum acceptable margin (dB) */
753
752
  minMargin: number;
754
753
  /** Show uplink, downlink, or both */
755
- mode?: 'uplink' | 'downlink' | 'both';
754
+ mode?: "uplink" | "downlink" | "both";
756
755
  /** Show rain fade overlay */
757
756
  showRainFade?: boolean;
758
757
  title?: string;
@@ -781,7 +780,7 @@ export interface ConstellationCoverageChartProps extends CommonChartProps {
781
780
  /** Coverage metric unit */
782
781
  metricUnit?: string;
783
782
  /** Color map: viridis, jet, plasma, thermal */
784
- colorMap?: 'viridis' | 'jet' | 'plasma' | 'thermal';
783
+ colorMap?: "viridis" | "jet" | "plasma" | "thermal";
785
784
  /** Value range [min, max] */
786
785
  valueRange?: [number, number];
787
786
  /** Show satellite positions */