@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,309 +1,335 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { memo, useMemo } from "react";
3
1
  import { useTheme } from "../theme/ThemeProvider.js";
4
2
  import { Icon } from "../core/display/Icon.js";
5
- import { CardHeader } from "../core/display/CardHeader.js";
6
3
  import { classNames } from "../utils/index.js";
4
+ import { CardHeader } from "../core/display/CardHeader.js";
7
5
  import { useCompactMode } from "../hooks/useCompactMode.js";
6
+ import { memo, useMemo } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/react/cards/TelemetryStreamCard.tsx
9
+ /**
10
+ * @zendir/ui - TelemetryStreamCard Component
11
+ *
12
+ * Compact streaming telemetry card showing individual metric channels.
13
+ * Designed for real-time data display with configurable metrics.
14
+ *
15
+ * Features:
16
+ * - Configurable metric channels
17
+ * - Streaming status indicator
18
+ * - Color-coded values based on thresholds
19
+ * - WCAG 2.1 AA accessibility
20
+ */
21
+ /**
22
+ * Get status color for a metric value
23
+ */
8
24
  function getMetricColor(status, tokens) {
9
- if (!status || status === "normal") return tokens.colors.status.normal;
10
- if (status === "caution") return tokens.colors.status.caution;
11
- if (status === "critical") return tokens.colors.status.critical;
12
- if (status === "standby") return tokens.colors.status.standby;
13
- return tokens.colors.text.primary;
25
+ if (!status || status === "normal") return tokens.colors.status.normal;
26
+ if (status === "caution") return tokens.colors.status.caution;
27
+ if (status === "critical") return tokens.colors.status.critical;
28
+ if (status === "standby") return tokens.colors.status.standby;
29
+ return tokens.colors.text.primary;
14
30
  }
15
- const TelemetryStreamCard = memo(function TelemetryStreamCard2({
16
- title = "Telemetry",
17
- channelCount = 12,
18
- frequency = 1,
19
- isStreaming = true,
20
- metrics = [],
21
- loading = false,
22
- className = "",
23
- compact = false,
24
- defaultExpanded = false,
25
- onPinChange
26
- }) {
27
- const { tokens, theme, prefersReducedMotion } = useTheme();
28
- const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
29
- const isBoldVariant = theme === "transparent-bold";
30
- const isMinimalVariant = theme === "transparent-minimal";
31
- const useGlassMode = isBoldVariant || isMinimalVariant;
32
- const glassAccentColor = tokens.colors.accent.primary;
33
- const glassAccentMuted = `${glassAccentColor}66`;
34
- const { expanded, isPinned, handlers, transitionDuration } = useCompactMode({
35
- compact,
36
- defaultExpanded,
37
- onPinChange
38
- });
39
- const glassContainerStyle = useGlassMode ? {
40
- backgroundColor: "rgba(10, 15, 25, 0.35)",
41
- backdropFilter: "blur(12px)",
42
- WebkitBackdropFilter: "blur(12px)",
43
- border: `1px solid ${glassAccentMuted}`,
44
- borderTop: isBoldVariant ? `2px solid ${glassAccentColor}` : `1px solid ${glassAccentColor}`
45
- } : {};
46
- const cardStyle = useMemo(() => ({
47
- position: "relative",
48
- overflow: "hidden",
49
- ...useGlassMode ? glassContainerStyle : {
50
- backgroundColor: isTransparentTheme ? "transparent" : tokens.colors.background.surface,
51
- ...isTransparentTheme && {
52
- backdropFilter: "blur(12px)",
53
- WebkitBackdropFilter: "blur(12px)"
54
- },
55
- ...tokens.colors.border.cardStyleDefault ?? { border: `1px solid ${tokens.colors.border.default}` }
56
- },
57
- borderRadius: tokens.borderRadius.lg,
58
- padding: tokens.spacing.md
59
- }), [tokens, isTransparentTheme, useGlassMode, glassContainerStyle]);
60
- const metricBoxStyle = useMemo(() => ({
61
- backgroundColor: tokens.colors.background.elevated,
62
- borderRadius: tokens.borderRadius.md,
63
- padding: tokens.spacing.sm
64
- }), [tokens]);
65
- if (loading) {
66
- return /* @__PURE__ */ jsxs(
67
- "article",
68
- {
69
- className: classNames("zendir-telemetry-stream-card", className),
70
- style: cardStyle,
71
- "aria-busy": "true",
72
- "aria-label": "Loading telemetry stream",
73
- children: [
74
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 16 }, children: [
75
- /* @__PURE__ */ jsxs("div", { children: [
76
- /* @__PURE__ */ jsx("div", { style: {
77
- height: 16,
78
- width: 80,
79
- backgroundColor: tokens.colors.background.elevated,
80
- borderRadius: 4,
81
- marginBottom: 4
82
- } }),
83
- /* @__PURE__ */ jsx("div", { style: {
84
- height: 12,
85
- width: 100,
86
- backgroundColor: tokens.colors.background.elevated,
87
- borderRadius: 4
88
- } })
89
- ] }),
90
- /* @__PURE__ */ jsx("div", { style: {
91
- height: 24,
92
- width: 70,
93
- backgroundColor: tokens.colors.background.elevated,
94
- borderRadius: 12
95
- } })
96
- ] }),
97
- /* @__PURE__ */ jsx("div", { style: { display: "grid", gridTemplateColumns: "repeat(2, 1fr)", gap: 12 }, children: [1, 2, 3, 4].map((i) => /* @__PURE__ */ jsxs("div", { style: metricBoxStyle, children: [
98
- /* @__PURE__ */ jsx("div", { style: {
99
- height: 10,
100
- width: 60,
101
- backgroundColor: tokens.colors.background.base,
102
- borderRadius: 4,
103
- marginBottom: 8
104
- } }),
105
- /* @__PURE__ */ jsx("div", { style: {
106
- height: 20,
107
- width: 80,
108
- backgroundColor: tokens.colors.background.base,
109
- borderRadius: 4
110
- } })
111
- ] }, i)) })
112
- ]
113
- }
114
- );
115
- }
116
- if (compact && !expanded) {
117
- return /* @__PURE__ */ jsxs(
118
- "article",
119
- {
120
- className: classNames("zendir-telemetry-stream-card", "compact", className),
121
- ...handlers,
122
- style: {
123
- ...cardStyle,
124
- padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,
125
- cursor: "pointer",
126
- transition: `all ${transitionDuration} ease-out`
127
- },
128
- onMouseEnter: (e) => {
129
- handlers.onMouseEnter();
130
- if (!prefersReducedMotion) {
131
- e.currentTarget.style.transform = "scale(1.01)";
132
- e.currentTarget.style.boxShadow = `0 4px 12px ${tokens.colors.accent.primary}20`;
133
- }
134
- },
135
- onMouseLeave: (e) => {
136
- handlers.onMouseLeave();
137
- e.currentTarget.style.transform = "scale(1)";
138
- e.currentTarget.style.boxShadow = "";
139
- },
140
- "aria-label": `${title} (compact)`,
141
- children: [
142
- useGlassMode && /* @__PURE__ */ jsx(
143
- "div",
144
- {
145
- style: {
146
- position: "absolute",
147
- inset: 0,
148
- background: "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, transparent 50%, rgba(0,0,0,0.1) 100%)",
149
- pointerEvents: "none",
150
- zIndex: 0
151
- }
152
- }
153
- ),
154
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: tokens.spacing.md, position: "relative", zIndex: 1 }, children: [
155
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.sm, flex: 1, minWidth: 0 }, children: [
156
- /* @__PURE__ */ jsx(
157
- "div",
158
- {
159
- style: {
160
- width: 8,
161
- height: 8,
162
- borderRadius: "50%",
163
- backgroundColor: isStreaming ? tokens.colors.status.normal : tokens.colors.status.off,
164
- boxShadow: isStreaming ? `0 0 6px ${tokens.colors.status.normal}` : "none",
165
- flexShrink: 0
166
- }
167
- }
168
- ),
169
- /* @__PURE__ */ jsx("span", { style: {
170
- fontWeight: tokens.typography.fontWeight.medium,
171
- color: useGlassMode ? glassAccentColor : void 0,
172
- textShadow: useGlassMode ? `0 0 16px ${glassAccentMuted}` : void 0
173
- }, children: title.split(" ")[0] }),
174
- useGlassMode && /* @__PURE__ */ jsx("div", { style: {
175
- flex: 1,
176
- height: isBoldVariant ? "2px" : "1px",
177
- minWidth: 20,
178
- background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 60%, transparent 100%)`,
179
- boxShadow: isBoldVariant ? `0 0 8px ${glassAccentMuted}` : void 0
180
- } })
181
- ] }),
182
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: tokens.spacing.sm, flexShrink: 0 }, children: [
183
- /* @__PURE__ */ jsxs("span", { style: {
184
- color: tokens.colors.text.tertiary,
185
- fontSize: tokens.typography.fontSize.xs,
186
- backgroundColor: useGlassMode ? `${glassAccentColor}20` : void 0,
187
- padding: useGlassMode ? "1px 6px" : void 0,
188
- borderRadius: tokens.borderRadius.sm
189
- }, children: [
190
- channelCount,
191
- "ch"
192
- ] }),
193
- metrics.slice(0, 2).map((metric) => /* @__PURE__ */ jsxs(
194
- "span",
195
- {
196
- style: {
197
- fontVariantNumeric: "tabular-nums",
198
- fontFamily: tokens.typography.fontFamily.mono,
199
- fontSize: tokens.typography.fontSize.xs,
200
- color: getMetricColor(metric.status, tokens)
201
- },
202
- children: [
203
- metric.value,
204
- metric.unit ? metric.unit : ""
205
- ]
206
- },
207
- metric.id
208
- )),
209
- isPinned && /* @__PURE__ */ jsx(Icon, { name: "lock", size: 12, color: tokens.colors.accent.primary })
210
- ] })
211
- ] })
212
- ]
213
- }
214
- );
215
- }
216
- return /* @__PURE__ */ jsxs(
217
- "article",
218
- {
219
- className: classNames("zendir-telemetry-stream-card", compact ? "expanded" : "", className),
220
- ...compact ? handlers : {},
221
- role: compact ? handlers.role : "article",
222
- tabIndex: compact ? handlers.tabIndex : void 0,
223
- "aria-expanded": compact ? handlers["aria-expanded"] : void 0,
224
- style: {
225
- ...cardStyle,
226
- cursor: compact ? "pointer" : void 0,
227
- transition: compact ? `all ${transitionDuration} ease-out` : void 0
228
- },
229
- "aria-label": `${title} - ${isStreaming ? "Streaming" : "Paused"}`,
230
- "aria-live": "polite",
231
- children: [
232
- useGlassMode && /* @__PURE__ */ jsx(
233
- "div",
234
- {
235
- style: {
236
- position: "absolute",
237
- inset: 0,
238
- background: "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, transparent 50%, rgba(0,0,0,0.1) 100%)",
239
- pointerEvents: "none",
240
- zIndex: 0
241
- }
242
- }
243
- ),
244
- /* @__PURE__ */ jsx(
245
- CardHeader,
246
- {
247
- icon: "antenna-receive",
248
- title,
249
- subtitle: `${channelCount} channels • ${frequency} Hz`,
250
- status: isStreaming ? "normal" : "standby",
251
- badge: isStreaming ? "Streaming" : "Paused",
252
- badgeColor: isStreaming ? tokens.colors.status.normal : tokens.colors.status.standby
253
- }
254
- ),
255
- /* @__PURE__ */ jsx("div", { style: {
256
- display: "grid",
257
- gridTemplateColumns: "repeat(2, 1fr)",
258
- gap: 12
259
- }, children: metrics.map((metric) => /* @__PURE__ */ jsxs(
260
- "div",
261
- {
262
- style: metricBoxStyle,
263
- role: "group",
264
- "aria-label": `${metric.label}: ${metric.value}${metric.unit || ""}`,
265
- children: [
266
- /* @__PURE__ */ jsx("div", { style: {
267
- fontSize: tokens.typography.fontSize.xxs,
268
- // 0.625rem / 10px (AstroUXDS compact)
269
- fontWeight: tokens.typography.fontWeight.medium,
270
- // 500 (AstroUXDS medium)
271
- textTransform: "uppercase",
272
- letterSpacing: "0.05em",
273
- color: tokens.colors.text.tertiary,
274
- marginBottom: 4
275
- }, children: metric.label }),
276
- /* @__PURE__ */ jsxs("div", { style: {
277
- fontSize: tokens.typography.fontSize.lg,
278
- fontWeight: tokens.typography.fontWeight.bold,
279
- // 700 (AstroUXDS bold)
280
- fontFamily: tokens.typography.fontFamily.mono,
281
- fontVariantNumeric: "tabular-nums",
282
- color: getMetricColor(metric.status, tokens)
283
- }, children: [
284
- typeof metric.value === "number" ? metric.format ? metric.format(metric.value) : metric.value.toLocaleString() : metric.value,
285
- metric.unit && /* @__PURE__ */ jsx("span", { style: {
286
- fontSize: tokens.typography.fontSize.sm,
287
- fontWeight: tokens.typography.fontWeight.normal,
288
- // 400 (AstroUXDS normal)
289
- marginLeft: 2
290
- }, children: metric.unit })
291
- ] })
292
- ]
293
- },
294
- metric.id
295
- )) }),
296
- /* @__PURE__ */ jsx("style", { children: `
31
+ /**
32
+ * TelemetryStreamCard - Compact streaming telemetry display
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * <TelemetryStreamCard
37
+ * title="Telemetry"
38
+ * channelCount={12}
39
+ * frequency={1}
40
+ * isStreaming={true}
41
+ * metrics={[
42
+ * { id: 'cpu', label: 'CPU Temp', value: 42, unit: '°C', status: 'normal' },
43
+ * { id: 'voltage', label: 'Bus Voltage', value: 28.4, unit: 'V' },
44
+ * { id: 'wheel', label: 'Wheel Speed', value: 2450, unit: 'rpm' },
45
+ * { id: 'memory', label: 'Memory', value: 78, unit: '%', status: 'caution' },
46
+ * ]}
47
+ * />
48
+ * ```
49
+ */
50
+ var TelemetryStreamCard = memo(function TelemetryStreamCard({ title = "Telemetry", channelCount = 12, frequency = 1, isStreaming = true, metrics = [], loading = false, className = "", compact = false, defaultExpanded = false, onPinChange }) {
51
+ const { tokens, theme, prefersReducedMotion } = useTheme();
52
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
53
+ const isBoldVariant = theme === "transparent-bold";
54
+ const useGlassMode = isBoldVariant || theme === "transparent-minimal";
55
+ const glassAccentColor = tokens.colors.accent.primary;
56
+ const glassAccentMuted = `${glassAccentColor}66`;
57
+ const { expanded, isPinned, handlers, transitionDuration } = useCompactMode({
58
+ compact,
59
+ defaultExpanded,
60
+ onPinChange
61
+ });
62
+ const glassContainerStyle = useGlassMode ? {
63
+ backgroundColor: "rgba(10, 15, 25, 0.35)",
64
+ backdropFilter: "blur(12px)",
65
+ WebkitBackdropFilter: "blur(12px)",
66
+ border: `1px solid ${glassAccentMuted}`,
67
+ borderTop: isBoldVariant ? `2px solid ${glassAccentColor}` : `1px solid ${glassAccentColor}`
68
+ } : {};
69
+ const cardStyle = useMemo(() => ({
70
+ position: "relative",
71
+ overflow: "hidden",
72
+ ...useGlassMode ? glassContainerStyle : {
73
+ backgroundColor: isTransparentTheme ? "transparent" : tokens.colors.background.surface,
74
+ ...isTransparentTheme && {
75
+ backdropFilter: "blur(12px)",
76
+ WebkitBackdropFilter: "blur(12px)"
77
+ },
78
+ ...tokens.colors.border.cardStyleDefault ?? { border: `1px solid ${tokens.colors.border.default}` }
79
+ },
80
+ borderRadius: tokens.borderRadius.lg,
81
+ padding: tokens.spacing.md
82
+ }), [
83
+ tokens,
84
+ isTransparentTheme,
85
+ useGlassMode,
86
+ glassContainerStyle
87
+ ]);
88
+ const metricBoxStyle = useMemo(() => ({
89
+ backgroundColor: tokens.colors.background.elevated,
90
+ borderRadius: tokens.borderRadius.md,
91
+ padding: tokens.spacing.sm
92
+ }), [tokens]);
93
+ if (loading) return /* @__PURE__ */ jsxs("article", {
94
+ className: classNames("zendir-telemetry-stream-card", className),
95
+ style: cardStyle,
96
+ "aria-busy": "true",
97
+ "aria-label": "Loading telemetry stream",
98
+ children: [/* @__PURE__ */ jsxs("div", {
99
+ style: {
100
+ display: "flex",
101
+ justifyContent: "space-between",
102
+ marginBottom: 16
103
+ },
104
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", { style: {
105
+ height: 16,
106
+ width: 80,
107
+ backgroundColor: tokens.colors.background.elevated,
108
+ borderRadius: 4,
109
+ marginBottom: 4
110
+ } }), /* @__PURE__ */ jsx("div", { style: {
111
+ height: 12,
112
+ width: 100,
113
+ backgroundColor: tokens.colors.background.elevated,
114
+ borderRadius: 4
115
+ } })] }), /* @__PURE__ */ jsx("div", { style: {
116
+ height: 24,
117
+ width: 70,
118
+ backgroundColor: tokens.colors.background.elevated,
119
+ borderRadius: 12
120
+ } })]
121
+ }), /* @__PURE__ */ jsx("div", {
122
+ style: {
123
+ display: "grid",
124
+ gridTemplateColumns: "repeat(2, 1fr)",
125
+ gap: 12
126
+ },
127
+ children: [
128
+ 1,
129
+ 2,
130
+ 3,
131
+ 4
132
+ ].map((i) => /* @__PURE__ */ jsxs("div", {
133
+ style: metricBoxStyle,
134
+ children: [/* @__PURE__ */ jsx("div", { style: {
135
+ height: 10,
136
+ width: 60,
137
+ backgroundColor: tokens.colors.background.base,
138
+ borderRadius: 4,
139
+ marginBottom: 8
140
+ } }), /* @__PURE__ */ jsx("div", { style: {
141
+ height: 20,
142
+ width: 80,
143
+ backgroundColor: tokens.colors.background.base,
144
+ borderRadius: 4
145
+ } })]
146
+ }, i))
147
+ })]
148
+ });
149
+ if (compact && !expanded) return /* @__PURE__ */ jsxs("article", {
150
+ className: classNames("zendir-telemetry-stream-card", "compact", className),
151
+ ...handlers,
152
+ style: {
153
+ ...cardStyle,
154
+ padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,
155
+ cursor: "pointer",
156
+ transition: `all ${transitionDuration} ease-out`
157
+ },
158
+ onMouseEnter: (e) => {
159
+ handlers.onMouseEnter();
160
+ if (!prefersReducedMotion) {
161
+ e.currentTarget.style.transform = "scale(1.01)";
162
+ e.currentTarget.style.boxShadow = `0 4px 12px ${tokens.colors.accent.primary}20`;
163
+ }
164
+ },
165
+ onMouseLeave: (e) => {
166
+ handlers.onMouseLeave();
167
+ e.currentTarget.style.transform = "scale(1)";
168
+ e.currentTarget.style.boxShadow = "";
169
+ },
170
+ "aria-label": `${title} (compact)`,
171
+ children: [useGlassMode && /* @__PURE__ */ jsx("div", { style: {
172
+ position: "absolute",
173
+ inset: 0,
174
+ background: "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, transparent 50%, rgba(0,0,0,0.1) 100%)",
175
+ pointerEvents: "none",
176
+ zIndex: 0
177
+ } }), /* @__PURE__ */ jsxs("div", {
178
+ style: {
179
+ display: "flex",
180
+ alignItems: "center",
181
+ justifyContent: "space-between",
182
+ gap: tokens.spacing.md,
183
+ position: "relative",
184
+ zIndex: 1
185
+ },
186
+ children: [/* @__PURE__ */ jsxs("div", {
187
+ style: {
188
+ display: "flex",
189
+ alignItems: "center",
190
+ gap: tokens.spacing.sm,
191
+ flex: 1,
192
+ minWidth: 0
193
+ },
194
+ children: [
195
+ /* @__PURE__ */ jsx("div", { style: {
196
+ width: 8,
197
+ height: 8,
198
+ borderRadius: "50%",
199
+ backgroundColor: isStreaming ? tokens.colors.status.normal : tokens.colors.status.off,
200
+ boxShadow: isStreaming ? `0 0 6px ${tokens.colors.status.normal}` : "none",
201
+ flexShrink: 0
202
+ } }),
203
+ /* @__PURE__ */ jsx("span", {
204
+ style: {
205
+ fontWeight: tokens.typography.fontWeight.medium,
206
+ color: useGlassMode ? glassAccentColor : void 0,
207
+ textShadow: useGlassMode ? `0 0 16px ${glassAccentMuted}` : void 0
208
+ },
209
+ children: title.split(" ")[0]
210
+ }),
211
+ useGlassMode && /* @__PURE__ */ jsx("div", { style: {
212
+ flex: 1,
213
+ height: isBoldVariant ? "2px" : "1px",
214
+ minWidth: 20,
215
+ background: `linear-gradient(90deg, ${glassAccentColor} 0%, ${glassAccentMuted} 60%, transparent 100%)`,
216
+ boxShadow: isBoldVariant ? `0 0 8px ${glassAccentMuted}` : void 0
217
+ } })
218
+ ]
219
+ }), /* @__PURE__ */ jsxs("div", {
220
+ style: {
221
+ display: "flex",
222
+ alignItems: "center",
223
+ gap: tokens.spacing.sm,
224
+ flexShrink: 0
225
+ },
226
+ children: [
227
+ /* @__PURE__ */ jsxs("span", {
228
+ style: {
229
+ color: tokens.colors.text.tertiary,
230
+ fontSize: tokens.typography.fontSize.xs,
231
+ backgroundColor: useGlassMode ? `${glassAccentColor}20` : void 0,
232
+ padding: useGlassMode ? "1px 6px" : void 0,
233
+ borderRadius: tokens.borderRadius.sm
234
+ },
235
+ children: [channelCount, "ch"]
236
+ }),
237
+ metrics.slice(0, 2).map((metric) => /* @__PURE__ */ jsxs("span", {
238
+ style: {
239
+ fontVariantNumeric: "tabular-nums",
240
+ fontFamily: tokens.typography.fontFamily.mono,
241
+ fontSize: tokens.typography.fontSize.xs,
242
+ color: getMetricColor(metric.status, tokens)
243
+ },
244
+ children: [metric.value, metric.unit ? metric.unit : ""]
245
+ }, metric.id)),
246
+ isPinned && /* @__PURE__ */ jsx(Icon, {
247
+ name: "lock",
248
+ size: 12,
249
+ color: tokens.colors.accent.primary
250
+ })
251
+ ]
252
+ })]
253
+ })]
254
+ });
255
+ return /* @__PURE__ */ jsxs("article", {
256
+ className: classNames("zendir-telemetry-stream-card", compact ? "expanded" : "", className),
257
+ ...compact ? handlers : {},
258
+ role: compact ? handlers.role : "article",
259
+ tabIndex: compact ? handlers.tabIndex : void 0,
260
+ "aria-expanded": compact ? handlers["aria-expanded"] : void 0,
261
+ style: {
262
+ ...cardStyle,
263
+ cursor: compact ? "pointer" : void 0,
264
+ transition: compact ? `all ${transitionDuration} ease-out` : void 0
265
+ },
266
+ "aria-label": `${title} - ${isStreaming ? "Streaming" : "Paused"}`,
267
+ "aria-live": "polite",
268
+ children: [
269
+ useGlassMode && /* @__PURE__ */ jsx("div", { style: {
270
+ position: "absolute",
271
+ inset: 0,
272
+ background: "linear-gradient(135deg, rgba(255,255,255,0.03) 0%, transparent 50%, rgba(0,0,0,0.1) 100%)",
273
+ pointerEvents: "none",
274
+ zIndex: 0
275
+ } }),
276
+ /* @__PURE__ */ jsx(CardHeader, {
277
+ icon: "antenna-receive",
278
+ title,
279
+ subtitle: `${channelCount} channels • ${frequency} Hz`,
280
+ status: isStreaming ? "normal" : "standby",
281
+ badge: isStreaming ? "Streaming" : "Paused",
282
+ badgeColor: isStreaming ? tokens.colors.status.normal : tokens.colors.status.standby
283
+ }),
284
+ /* @__PURE__ */ jsx("div", {
285
+ style: {
286
+ display: "grid",
287
+ gridTemplateColumns: "repeat(2, 1fr)",
288
+ gap: 12
289
+ },
290
+ children: metrics.map((metric) => /* @__PURE__ */ jsxs("div", {
291
+ style: metricBoxStyle,
292
+ role: "group",
293
+ "aria-label": `${metric.label}: ${metric.value}${metric.unit || ""}`,
294
+ children: [/* @__PURE__ */ jsx("div", {
295
+ style: {
296
+ fontSize: tokens.typography.fontSize.xxs,
297
+ fontWeight: tokens.typography.fontWeight.medium,
298
+ textTransform: "uppercase",
299
+ letterSpacing: "0.05em",
300
+ color: tokens.colors.text.tertiary,
301
+ marginBottom: 4
302
+ },
303
+ children: metric.label
304
+ }), /* @__PURE__ */ jsxs("div", {
305
+ style: {
306
+ fontSize: tokens.typography.fontSize.lg,
307
+ fontWeight: tokens.typography.fontWeight.bold,
308
+ fontFamily: tokens.typography.fontFamily.mono,
309
+ fontVariantNumeric: "tabular-nums",
310
+ color: getMetricColor(metric.status, tokens)
311
+ },
312
+ children: [typeof metric.value === "number" ? metric.format ? metric.format(metric.value) : metric.value.toLocaleString() : metric.value, metric.unit && /* @__PURE__ */ jsx("span", {
313
+ style: {
314
+ fontSize: tokens.typography.fontSize.sm,
315
+ fontWeight: tokens.typography.fontWeight.normal,
316
+ marginLeft: 2
317
+ },
318
+ children: metric.unit
319
+ })]
320
+ })]
321
+ }, metric.id))
322
+ }),
323
+ /* @__PURE__ */ jsx("style", { children: `
297
324
  @keyframes pulse {
298
325
  0%, 100% { opacity: 1; }
299
326
  50% { opacity: 0.5; }
300
327
  }
301
328
  ` })
302
- ]
303
- }
304
- );
329
+ ]
330
+ });
305
331
  });
306
- export {
307
- TelemetryStreamCard
308
- };
309
- //# sourceMappingURL=TelemetryStreamCard.js.map
332
+ //#endregion
333
+ export { TelemetryStreamCard };
334
+
335
+ //# sourceMappingURL=TelemetryStreamCard.js.map