@zendir/ui 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +20 -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 -571
  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 +5 -6
  229. package/dist/react/core/navigation/SideNav.js +855 -629
  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,83 +1,99 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { memo } from "react";
3
1
  import { useTheme } from "../theme/ThemeProvider.js";
4
2
  import { classNames } from "../utils/index.js";
5
- const CLASSIFICATION_STYLES = {
6
- unclassified: {
7
- bg: "#007a33",
8
- text: "#ffffff",
9
- label: "UNCLASSIFIED"
10
- },
11
- cui: {
12
- bg: "#502b85",
13
- text: "#ffffff",
14
- label: "CUI"
15
- },
16
- controlled: {
17
- bg: "#502b85",
18
- text: "#ffffff",
19
- label: "CONTROLLED"
20
- },
21
- confidential: {
22
- bg: "#0033a0",
23
- text: "#ffffff",
24
- label: "CONFIDENTIAL"
25
- },
26
- secret: {
27
- bg: "#c8102e",
28
- text: "#ffffff",
29
- label: "SECRET"
30
- },
31
- "top-secret": {
32
- bg: "#ff8c00",
33
- text: "#000000",
34
- label: "TOP SECRET"
35
- },
36
- "top-secret-sci": {
37
- bg: "#fce83a",
38
- text: "#000000",
39
- label: "TOP SECRET//SCI"
40
- }
3
+ import { memo } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/react/astro/ClassificationBanner.tsx
6
+ /**
7
+ * @zendir/ui - ClassificationBanner Component (Pure React)
8
+ *
9
+ * Security classification banner following Astro UX Design System.
10
+ * Required for U.S. Space Force applications to display security classification.
11
+ *
12
+ * Features:
13
+ * - Theme-integrated via useTheme()
14
+ * - Official classification colors per DoD standards
15
+ * - Top/bottom positioning
16
+ * - Accessible (screen reader announces classification)
17
+ */
18
+ var CLASSIFICATION_STYLES = {
19
+ unclassified: {
20
+ bg: "#007a33",
21
+ text: "#ffffff",
22
+ label: "UNCLASSIFIED"
23
+ },
24
+ cui: {
25
+ bg: "#502b85",
26
+ text: "#ffffff",
27
+ label: "CUI"
28
+ },
29
+ controlled: {
30
+ bg: "#502b85",
31
+ text: "#ffffff",
32
+ label: "CONTROLLED"
33
+ },
34
+ confidential: {
35
+ bg: "#0033a0",
36
+ text: "#ffffff",
37
+ label: "CONFIDENTIAL"
38
+ },
39
+ secret: {
40
+ bg: "#c8102e",
41
+ text: "#ffffff",
42
+ label: "SECRET"
43
+ },
44
+ "top-secret": {
45
+ bg: "#ff8c00",
46
+ text: "#000000",
47
+ label: "TOP SECRET"
48
+ },
49
+ "top-secret-sci": {
50
+ bg: "#fce83a",
51
+ text: "#000000",
52
+ label: "TOP SECRET//SCI"
53
+ }
41
54
  };
42
- const ClassificationBanner = memo(function ClassificationBanner2({
43
- classification,
44
- label,
45
- position = "top",
46
- className = ""
47
- }) {
48
- const { tokens } = useTheme();
49
- const style = CLASSIFICATION_STYLES[classification] ?? CLASSIFICATION_STYLES.unclassified;
50
- const displayLabel = label ?? style.label;
51
- return /* @__PURE__ */ jsx(
52
- "div",
53
- {
54
- className: classNames("zendir-classification-banner", className),
55
- role: "banner",
56
- "aria-label": `Security classification: ${displayLabel}`,
57
- style: {
58
- position: "fixed",
59
- left: 0,
60
- right: 0,
61
- [position]: 0,
62
- zIndex: 9999,
63
- display: "flex",
64
- alignItems: "center",
65
- justifyContent: "center",
66
- height: 20,
67
- backgroundColor: style.bg,
68
- color: style.text,
69
- fontSize: tokens.typography.fontSize.xs,
70
- fontWeight: tokens.typography.fontWeight.bold,
71
- letterSpacing: tokens.typography.letterSpacing.wide,
72
- textTransform: "uppercase",
73
- fontFamily: tokens.typography.fontFamily.primary,
74
- userSelect: "none"
75
- },
76
- children: displayLabel
77
- }
78
- );
55
+ /**
56
+ * ClassificationBanner - Pure React classification banner
57
+ *
58
+ * Displays security classification level. Required for U.S. Space Force applications.
59
+ *
60
+ * @example
61
+ * ```tsx
62
+ * <ClassificationBanner classification="unclassified" />
63
+ * <ClassificationBanner classification="secret" position="bottom" />
64
+ * ```
65
+ */
66
+ var ClassificationBanner = memo(function ClassificationBanner({ classification, label, position = "top", className = "" }) {
67
+ const { tokens } = useTheme();
68
+ const style = CLASSIFICATION_STYLES[classification] ?? CLASSIFICATION_STYLES.unclassified;
69
+ const displayLabel = label ?? style.label;
70
+ return /* @__PURE__ */ jsx("div", {
71
+ className: classNames("zendir-classification-banner", className),
72
+ role: "banner",
73
+ "aria-label": `Security classification: ${displayLabel}`,
74
+ style: {
75
+ position: "fixed",
76
+ left: 0,
77
+ right: 0,
78
+ [position]: 0,
79
+ zIndex: 9999,
80
+ display: "flex",
81
+ alignItems: "center",
82
+ justifyContent: "center",
83
+ height: 20,
84
+ backgroundColor: style.bg,
85
+ color: style.text,
86
+ fontSize: tokens.typography.fontSize.xs,
87
+ fontWeight: tokens.typography.fontWeight.bold,
88
+ letterSpacing: tokens.typography.letterSpacing.wide,
89
+ textTransform: "uppercase",
90
+ fontFamily: tokens.typography.fontFamily.primary,
91
+ userSelect: "none"
92
+ },
93
+ children: displayLabel
94
+ });
79
95
  });
80
- export {
81
- ClassificationBanner
82
- };
83
- //# sourceMappingURL=ClassificationBanner.js.map
96
+ //#endregion
97
+ export { ClassificationBanner };
98
+
99
+ //# sourceMappingURL=ClassificationBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClassificationBanner.js","sources":["../../../src/react/astro/ClassificationBanner.tsx"],"sourcesContent":["/**\n * @zendir/ui - ClassificationBanner Component (Pure React)\n * \n * Security classification banner following Astro UX Design System.\n * Required for U.S. Space Force applications to display security classification.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - Official classification colors per DoD standards\n * - Top/bottom positioning\n * - Accessible (screen reader announces classification)\n */\n\nimport React, { memo } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames } from '../utils';\n\nexport type ClassificationLevel =\n | 'unclassified'\n | 'cui'\n | 'controlled'\n | 'confidential'\n | 'secret'\n | 'top-secret'\n | 'top-secret-sci';\n\nexport interface ClassificationBannerProps {\n /** Classification level */\n classification: ClassificationLevel;\n /** Custom label (overrides default text) */\n label?: string;\n /** Position of the banner */\n position?: 'top' | 'bottom';\n /** Custom className */\n className?: string;\n}\n\n// Official DoD classification colors\nconst CLASSIFICATION_STYLES: Record<\n ClassificationLevel,\n { bg: string; text: string; label: string }\n> = {\n unclassified: {\n bg: '#007a33',\n text: '#ffffff',\n label: 'UNCLASSIFIED',\n },\n cui: {\n bg: '#502b85',\n text: '#ffffff',\n label: 'CUI',\n },\n controlled: {\n bg: '#502b85',\n text: '#ffffff',\n label: 'CONTROLLED',\n },\n confidential: {\n bg: '#0033a0',\n text: '#ffffff',\n label: 'CONFIDENTIAL',\n },\n secret: {\n bg: '#c8102e',\n text: '#ffffff',\n label: 'SECRET',\n },\n 'top-secret': {\n bg: '#ff8c00',\n text: '#000000',\n label: 'TOP SECRET',\n },\n 'top-secret-sci': {\n bg: '#fce83a',\n text: '#000000',\n label: 'TOP SECRET//SCI',\n },\n};\n\n/**\n * ClassificationBanner - Pure React classification banner\n * \n * Displays security classification level. Required for U.S. Space Force applications.\n * \n * @example\n * ```tsx\n * <ClassificationBanner classification=\"unclassified\" />\n * <ClassificationBanner classification=\"secret\" position=\"bottom\" />\n * ```\n */\nexport const ClassificationBanner = memo(function ClassificationBanner({\n classification,\n label,\n position = 'top',\n className = '',\n}: ClassificationBannerProps): React.ReactElement {\n const { tokens } = useTheme();\n const style = CLASSIFICATION_STYLES[classification] ?? CLASSIFICATION_STYLES.unclassified;\n const displayLabel = label ?? style.label;\n\n return (\n <div\n className={classNames('zendir-classification-banner', className)}\n role=\"banner\"\n aria-label={`Security classification: ${displayLabel}`}\n style={{\n position: 'fixed',\n left: 0,\n right: 0,\n [position]: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 20,\n backgroundColor: style.bg,\n color: style.text,\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.bold,\n letterSpacing: tokens.typography.letterSpacing.wide,\n textTransform: 'uppercase',\n fontFamily: tokens.typography.fontFamily.primary,\n userSelect: 'none',\n }}\n >\n {displayLabel}\n </div>\n );\n});\n"],"names":["ClassificationBanner"],"mappings":";;;;AAsCA,MAAM,wBAGF;AAAA,EACF,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,KAAK;AAAA,IACH,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAAA,EAET,kBAAkB;AAAA,IAChB,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,EAAA;AAEX;AAaO,MAAM,uBAAuB,KAAK,SAASA,sBAAqB;AAAA,EACrE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AACd,GAAkD;AAChD,QAAM,EAAE,OAAA,IAAW,SAAA;AACnB,QAAM,QAAQ,sBAAsB,cAAc,KAAK,sBAAsB;AAC7E,QAAM,eAAe,SAAS,MAAM;AAEpC,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,WAAW,gCAAgC,SAAS;AAAA,MAC/D,MAAK;AAAA,MACL,cAAY,4BAA4B,YAAY;AAAA,MACpD,OAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,QACP,CAAC,QAAQ,GAAG;AAAA,QACZ,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,iBAAiB,MAAM;AAAA,QACvB,OAAO,MAAM;AAAA,QACb,UAAU,OAAO,WAAW,SAAS;AAAA,QACrC,YAAY,OAAO,WAAW,WAAW;AAAA,QACzC,eAAe,OAAO,WAAW,cAAc;AAAA,QAC/C,eAAe;AAAA,QACf,YAAY,OAAO,WAAW,WAAW;AAAA,QACzC,YAAY;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;"}
1
+ {"version":3,"file":"ClassificationBanner.js","names":[],"sources":["../../../src/react/astro/ClassificationBanner.tsx"],"sourcesContent":["/**\n * @zendir/ui - ClassificationBanner Component (Pure React)\n *\n * Security classification banner following Astro UX Design System.\n * Required for U.S. Space Force applications to display security classification.\n *\n * Features:\n * - Theme-integrated via useTheme()\n * - Official classification colors per DoD standards\n * - Top/bottom positioning\n * - Accessible (screen reader announces classification)\n */\n\nimport React, { memo } from \"react\";\nimport { useTheme } from \"../theme\";\nimport { classNames } from \"../utils\";\n\nexport type ClassificationLevel =\n | \"unclassified\"\n | \"cui\"\n | \"controlled\"\n | \"confidential\"\n | \"secret\"\n | \"top-secret\"\n | \"top-secret-sci\";\n\nexport interface ClassificationBannerProps {\n /** Classification level */\n classification: ClassificationLevel;\n /** Custom label (overrides default text) */\n label?: string;\n /** Position of the banner */\n position?: \"top\" | \"bottom\";\n /** Custom className */\n className?: string;\n}\n\n// Official DoD classification colors\nconst CLASSIFICATION_STYLES: Record<\n ClassificationLevel,\n { bg: string; text: string; label: string }\n> = {\n unclassified: {\n bg: \"#007a33\",\n text: \"#ffffff\",\n label: \"UNCLASSIFIED\",\n },\n cui: {\n bg: \"#502b85\",\n text: \"#ffffff\",\n label: \"CUI\",\n },\n controlled: {\n bg: \"#502b85\",\n text: \"#ffffff\",\n label: \"CONTROLLED\",\n },\n confidential: {\n bg: \"#0033a0\",\n text: \"#ffffff\",\n label: \"CONFIDENTIAL\",\n },\n secret: {\n bg: \"#c8102e\",\n text: \"#ffffff\",\n label: \"SECRET\",\n },\n \"top-secret\": {\n bg: \"#ff8c00\",\n text: \"#000000\",\n label: \"TOP SECRET\",\n },\n \"top-secret-sci\": {\n bg: \"#fce83a\",\n text: \"#000000\",\n label: \"TOP SECRET//SCI\",\n },\n};\n\n/**\n * ClassificationBanner - Pure React classification banner\n *\n * Displays security classification level. Required for U.S. Space Force applications.\n *\n * @example\n * ```tsx\n * <ClassificationBanner classification=\"unclassified\" />\n * <ClassificationBanner classification=\"secret\" position=\"bottom\" />\n * ```\n */\nexport const ClassificationBanner = memo(function ClassificationBanner({\n classification,\n label,\n position = \"top\",\n className = \"\",\n}: ClassificationBannerProps): React.ReactElement {\n const { tokens } = useTheme();\n const style =\n CLASSIFICATION_STYLES[classification] ?? CLASSIFICATION_STYLES.unclassified;\n const displayLabel = label ?? style.label;\n\n return (\n <div\n className={classNames(\"zendir-classification-banner\", className)}\n role=\"banner\"\n aria-label={`Security classification: ${displayLabel}`}\n style={{\n position: \"fixed\",\n left: 0,\n right: 0,\n [position]: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 20,\n backgroundColor: style.bg,\n color: style.text,\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.bold,\n letterSpacing: tokens.typography.letterSpacing.wide,\n textTransform: \"uppercase\",\n fontFamily: tokens.typography.fontFamily.primary,\n userSelect: \"none\",\n }}\n >\n {displayLabel}\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;AAsCA,IAAM,wBAGF;CACF,cAAc;EACZ,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,KAAK;EACH,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,YAAY;EACV,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,cAAc;EACZ,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,QAAQ;EACN,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,cAAc;EACZ,IAAI;EACJ,MAAM;EACN,OAAO;CACT;CACA,kBAAkB;EAChB,IAAI;EACJ,MAAM;EACN,OAAO;CACT;AACF;;;;;;;;;;;;AAaA,IAAa,uBAAuB,KAAK,SAAS,qBAAqB,EACrE,gBACA,OACA,WAAW,OACX,YAAY,MACoC;CAChD,MAAM,EAAE,WAAW,SAAS;CAC5B,MAAM,QACJ,sBAAsB,mBAAmB,sBAAsB;CACjE,MAAM,eAAe,SAAS,MAAM;CAEpC,OACE,oBAAC,OAAD;EACE,WAAW,WAAW,gCAAgC,SAAS;EAC/D,MAAK;EACL,cAAY,4BAA4B;EACxC,OAAO;GACL,UAAU;GACV,MAAM;GACN,OAAO;IACN,WAAW;GACZ,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,iBAAiB,MAAM;GACvB,OAAO,MAAM;GACb,UAAU,OAAO,WAAW,SAAS;GACrC,YAAY,OAAO,WAAW,WAAW;GACzC,eAAe,OAAO,WAAW,cAAc;GAC/C,eAAe;GACf,YAAY,OAAO,WAAW,WAAW;GACzC,YAAY;EACd;YAEC;CACE,CAAA;AAET,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { default as React, ReactNode } from 'react';
2
-
3
2
  export interface GlobalStatusBarProps {
4
3
  /** Application name */
5
4
  appName?: string;
@@ -1,165 +1,159 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { memo } from "react";
3
1
  import { useTheme } from "../theme/ThemeProvider.js";
4
- import { safeAccentText, classNames } from "../utils/index.js";
5
- const GlobalStatusBar = memo(function GlobalStatusBar2({
6
- appName = "Zendir",
7
- appDomain,
8
- appVersion,
9
- username,
10
- leftSlot,
11
- centerSlot,
12
- rightSlot,
13
- children,
14
- className = ""
15
- }) {
16
- const { tokens, theme } = useTheme();
17
- const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
18
- return /* @__PURE__ */ jsxs(
19
- "header",
20
- {
21
- className: classNames("zendir-global-status-bar", className),
22
- role: "banner",
23
- style: {
24
- display: "flex",
25
- alignItems: "center",
26
- justifyContent: "space-between",
27
- height: 56,
28
- padding: `0 ${tokens.spacing.lg}`,
29
- backgroundColor: isTransparentTheme ? "transparent" : tokens.colors.background.surface,
30
- ...isTransparentTheme && { backdropFilter: "blur(12px)", WebkitBackdropFilter: "blur(12px)" },
31
- borderBottom: `1px solid ${tokens.colors.border.muted}`,
32
- color: tokens.colors.text.primary,
33
- fontFamily: tokens.typography.fontFamily.primary
34
- },
35
- children: [
36
- /* @__PURE__ */ jsxs(
37
- "div",
38
- {
39
- style: {
40
- display: "flex",
41
- alignItems: "center",
42
- gap: tokens.spacing.lg,
43
- flex: "1 1 0"
44
- },
45
- children: [
46
- leftSlot,
47
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "baseline", gap: tokens.spacing.sm }, children: [
48
- appDomain && /* @__PURE__ */ jsx(
49
- "span",
50
- {
51
- style: {
52
- fontSize: tokens.typography.fontSize.sm,
53
- fontWeight: tokens.typography.fontWeight.normal,
54
- color: tokens.colors.text.tertiary,
55
- textTransform: "uppercase",
56
- letterSpacing: tokens.typography.letterSpacing.wide
57
- },
58
- children: appDomain
59
- }
60
- ),
61
- /* @__PURE__ */ jsx(
62
- "span",
63
- {
64
- style: {
65
- fontSize: tokens.typography.fontSize.xl,
66
- fontWeight: tokens.typography.fontWeight.semibold,
67
- letterSpacing: tokens.typography.letterSpacing.tight,
68
- color: tokens.colors.text.primary
69
- },
70
- children: appName
71
- }
72
- ),
73
- appVersion && /* @__PURE__ */ jsxs(
74
- "span",
75
- {
76
- style: {
77
- fontSize: tokens.typography.fontSize.xs,
78
- fontWeight: tokens.typography.fontWeight.normal,
79
- color: tokens.colors.text.tertiary
80
- },
81
- children: [
82
- "v",
83
- appVersion
84
- ]
85
- }
86
- )
87
- ] })
88
- ]
89
- }
90
- ),
91
- /* @__PURE__ */ jsxs(
92
- "div",
93
- {
94
- style: {
95
- display: "flex",
96
- alignItems: "center",
97
- justifyContent: "center",
98
- flex: "0 0 auto"
99
- },
100
- children: [
101
- centerSlot,
102
- children
103
- ]
104
- }
105
- ),
106
- /* @__PURE__ */ jsxs(
107
- "div",
108
- {
109
- style: {
110
- display: "flex",
111
- alignItems: "center",
112
- justifyContent: "flex-end",
113
- gap: tokens.spacing.lg,
114
- flex: "1 1 0"
115
- },
116
- children: [
117
- rightSlot,
118
- username && /* @__PURE__ */ jsxs(
119
- "div",
120
- {
121
- style: {
122
- display: "flex",
123
- alignItems: "center",
124
- gap: tokens.spacing.sm,
125
- paddingLeft: tokens.spacing.lg,
126
- borderLeft: `1px solid ${tokens.colors.border.muted}`
127
- },
128
- children: [
129
- /* @__PURE__ */ jsx(
130
- "div",
131
- {
132
- style: {
133
- width: 28,
134
- height: 28,
135
- borderRadius: tokens.borderRadius.full,
136
- backgroundColor: `${tokens.colors.accent.primary}20`,
137
- display: "flex",
138
- alignItems: "center",
139
- justifyContent: "center",
140
- fontSize: tokens.typography.fontSize.sm,
141
- fontWeight: tokens.typography.fontWeight.semibold,
142
- color: safeAccentText(tokens.colors.accent.primary)
143
- },
144
- children: username.charAt(0).toUpperCase()
145
- }
146
- ),
147
- /* @__PURE__ */ jsx("span", { style: {
148
- fontSize: tokens.typography.fontSize.sm,
149
- fontWeight: tokens.typography.fontWeight.medium,
150
- color: tokens.colors.text.primary
151
- }, children: username })
152
- ]
153
- }
154
- )
155
- ]
156
- }
157
- )
158
- ]
159
- }
160
- );
2
+ import { classNames, safeAccentText } from "../utils/index.js";
3
+ import { memo } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/react/astro/GlobalStatusBar.tsx
6
+ /**
7
+ * @zendir/ui - GlobalStatusBar Component (Pure React)
8
+ *
9
+ * Primary header component for space applications following Astro UX patterns.
10
+ *
11
+ * Features:
12
+ * - Theme-integrated via useTheme()
13
+ * - App identity (name, domain, version)
14
+ * - Clock slot
15
+ * - Monitoring icons slot
16
+ * - Username display
17
+ * - Responsive design
18
+ */
19
+ /**
20
+ * GlobalStatusBar - Pure React global status bar
21
+ *
22
+ * Primary header component for space applications. Includes slots for:
23
+ * - App switcher (left)
24
+ * - Global clock (center)
25
+ * - Monitoring icons (right)
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * <GlobalStatusBar
30
+ * appName="Mission Control"
31
+ * appDomain="Zendir"
32
+ * username="Demo User"
33
+ * centerSlot={<MissionClock />}
34
+ * rightSlot={<MonitoringIcons />}
35
+ * />
36
+ * ```
37
+ */
38
+ var GlobalStatusBar = memo(function GlobalStatusBar({ appName = "Zendir", appDomain, appVersion, username, leftSlot, centerSlot, rightSlot, children, className = "" }) {
39
+ const { tokens, theme } = useTheme();
40
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
41
+ return /* @__PURE__ */ jsxs("header", {
42
+ className: classNames("zendir-global-status-bar", className),
43
+ role: "banner",
44
+ style: {
45
+ display: "flex",
46
+ alignItems: "center",
47
+ justifyContent: "space-between",
48
+ height: 56,
49
+ padding: `0 ${tokens.spacing.lg}`,
50
+ backgroundColor: isTransparentTheme ? "transparent" : tokens.colors.background.surface,
51
+ ...isTransparentTheme && {
52
+ backdropFilter: "blur(12px)",
53
+ WebkitBackdropFilter: "blur(12px)"
54
+ },
55
+ borderBottom: `1px solid ${tokens.colors.border.muted}`,
56
+ color: tokens.colors.text.primary,
57
+ fontFamily: tokens.typography.fontFamily.primary
58
+ },
59
+ children: [
60
+ /* @__PURE__ */ jsxs("div", {
61
+ style: {
62
+ display: "flex",
63
+ alignItems: "center",
64
+ gap: tokens.spacing.lg,
65
+ flex: "1 1 0"
66
+ },
67
+ children: [leftSlot, /* @__PURE__ */ jsxs("div", {
68
+ style: {
69
+ display: "flex",
70
+ alignItems: "baseline",
71
+ gap: tokens.spacing.sm
72
+ },
73
+ children: [
74
+ appDomain && /* @__PURE__ */ jsx("span", {
75
+ style: {
76
+ fontSize: tokens.typography.fontSize.sm,
77
+ fontWeight: tokens.typography.fontWeight.normal,
78
+ color: tokens.colors.text.tertiary,
79
+ textTransform: "uppercase",
80
+ letterSpacing: tokens.typography.letterSpacing.wide
81
+ },
82
+ children: appDomain
83
+ }),
84
+ /* @__PURE__ */ jsx("span", {
85
+ style: {
86
+ fontSize: tokens.typography.fontSize.xl,
87
+ fontWeight: tokens.typography.fontWeight.semibold,
88
+ letterSpacing: tokens.typography.letterSpacing.tight,
89
+ color: tokens.colors.text.primary
90
+ },
91
+ children: appName
92
+ }),
93
+ appVersion && /* @__PURE__ */ jsxs("span", {
94
+ style: {
95
+ fontSize: tokens.typography.fontSize.xs,
96
+ fontWeight: tokens.typography.fontWeight.normal,
97
+ color: tokens.colors.text.tertiary
98
+ },
99
+ children: ["v", appVersion]
100
+ })
101
+ ]
102
+ })]
103
+ }),
104
+ /* @__PURE__ */ jsxs("div", {
105
+ style: {
106
+ display: "flex",
107
+ alignItems: "center",
108
+ justifyContent: "center",
109
+ flex: "0 0 auto"
110
+ },
111
+ children: [centerSlot, children]
112
+ }),
113
+ /* @__PURE__ */ jsxs("div", {
114
+ style: {
115
+ display: "flex",
116
+ alignItems: "center",
117
+ justifyContent: "flex-end",
118
+ gap: tokens.spacing.lg,
119
+ flex: "1 1 0"
120
+ },
121
+ children: [rightSlot, username && /* @__PURE__ */ jsxs("div", {
122
+ style: {
123
+ display: "flex",
124
+ alignItems: "center",
125
+ gap: tokens.spacing.sm,
126
+ paddingLeft: tokens.spacing.lg,
127
+ borderLeft: `1px solid ${tokens.colors.border.muted}`
128
+ },
129
+ children: [/* @__PURE__ */ jsx("div", {
130
+ style: {
131
+ width: 28,
132
+ height: 28,
133
+ borderRadius: tokens.borderRadius.full,
134
+ backgroundColor: `${tokens.colors.accent.primary}20`,
135
+ display: "flex",
136
+ alignItems: "center",
137
+ justifyContent: "center",
138
+ fontSize: tokens.typography.fontSize.sm,
139
+ fontWeight: tokens.typography.fontWeight.semibold,
140
+ color: safeAccentText(tokens.colors.accent.primary)
141
+ },
142
+ children: username.charAt(0).toUpperCase()
143
+ }), /* @__PURE__ */ jsx("span", {
144
+ style: {
145
+ fontSize: tokens.typography.fontSize.sm,
146
+ fontWeight: tokens.typography.fontWeight.medium,
147
+ color: tokens.colors.text.primary
148
+ },
149
+ children: username
150
+ })]
151
+ })]
152
+ })
153
+ ]
154
+ });
161
155
  });
162
- export {
163
- GlobalStatusBar
164
- };
165
- //# sourceMappingURL=GlobalStatusBar.js.map
156
+ //#endregion
157
+ export { GlobalStatusBar };
158
+
159
+ //# sourceMappingURL=GlobalStatusBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalStatusBar.js","sources":["../../../src/react/astro/GlobalStatusBar.tsx"],"sourcesContent":["/**\n * @zendir/ui - GlobalStatusBar Component (Pure React)\n * \n * Primary header component for space applications following Astro UX patterns.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - App identity (name, domain, version)\n * - Clock slot\n * - Monitoring icons slot\n * - Username display\n * - Responsive design\n */\n\nimport React, { memo, ReactNode } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames, safeAccentText } from '../utils';\n\nexport interface GlobalStatusBarProps {\n /** Application name */\n appName?: string;\n /** Application domain (organization/mission) */\n appDomain?: string;\n /** Application version */\n appVersion?: string;\n /** Username to display */\n username?: string;\n /** Left slot content (app switcher, etc.) */\n leftSlot?: ReactNode;\n /** Center slot content (typically clock) */\n centerSlot?: ReactNode;\n /** Right slot content (monitoring icons, controls) */\n rightSlot?: ReactNode;\n /** Additional children */\n children?: ReactNode;\n /** Custom className */\n className?: string;\n}\n\n/**\n * GlobalStatusBar - Pure React global status bar\n * \n * Primary header component for space applications. Includes slots for:\n * - App switcher (left)\n * - Global clock (center)\n * - Monitoring icons (right)\n * \n * @example\n * ```tsx\n * <GlobalStatusBar\n * appName=\"Mission Control\"\n * appDomain=\"Zendir\"\n * username=\"Demo User\"\n * centerSlot={<MissionClock />}\n * rightSlot={<MonitoringIcons />}\n * />\n * ```\n */\nexport const GlobalStatusBar = memo(function GlobalStatusBar({\n appName = 'Zendir',\n appDomain,\n appVersion,\n username,\n leftSlot,\n centerSlot,\n rightSlot,\n children,\n className = '',\n}: GlobalStatusBarProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme = theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n return (\n <header\n className={classNames('zendir-global-status-bar', className)}\n role=\"banner\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n height: 56,\n padding: `0 ${tokens.spacing.lg}`,\n backgroundColor: isTransparentTheme ? 'transparent' : tokens.colors.background.surface,\n ...(isTransparentTheme && { backdropFilter: 'blur(12px)', WebkitBackdropFilter: 'blur(12px)' as const }),\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n color: tokens.colors.text.primary,\n fontFamily: tokens.typography.fontFamily.primary,\n }}\n >\n {/* Left section: App identity */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.lg,\n flex: '1 1 0',\n }}\n >\n {leftSlot}\n \n <div style={{ display: 'flex', alignItems: 'baseline', gap: tokens.spacing.sm }}>\n {appDomain && (\n <span\n style={{\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.normal,\n color: tokens.colors.text.tertiary,\n textTransform: 'uppercase',\n letterSpacing: tokens.typography.letterSpacing.wide,\n }}\n >\n {appDomain}\n </span>\n )}\n <span\n style={{\n fontSize: tokens.typography.fontSize.xl,\n fontWeight: tokens.typography.fontWeight.semibold,\n letterSpacing: tokens.typography.letterSpacing.tight,\n color: tokens.colors.text.primary,\n }}\n >\n {appName}\n </span>\n {appVersion && (\n <span\n style={{\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.normal,\n color: tokens.colors.text.tertiary,\n }}\n >\n v{appVersion}\n </span>\n )}\n </div>\n </div>\n\n {/* Center section: Clock */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: '0 0 auto',\n }}\n >\n {centerSlot}\n {children}\n </div>\n\n {/* Right section: Monitoring + User */}\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: tokens.spacing.lg,\n flex: '1 1 0',\n }}\n >\n {rightSlot}\n \n {username && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n paddingLeft: tokens.spacing.lg,\n borderLeft: `1px solid ${tokens.colors.border.muted}`,\n }}\n >\n {/* User avatar */}\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: tokens.borderRadius.full,\n backgroundColor: `${tokens.colors.accent.primary}20`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.semibold,\n color: safeAccentText(tokens.colors.accent.primary),\n }}\n >\n {username.charAt(0).toUpperCase()}\n </div>\n <span style={{ \n fontSize: tokens.typography.fontSize.sm, \n fontWeight: tokens.typography.fontWeight.medium,\n color: tokens.colors.text.primary,\n }}>\n {username}\n </span>\n </div>\n )}\n </div>\n </header>\n );\n});\n"],"names":["GlobalStatusBar"],"mappings":"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"}
1
+ {"version":3,"file":"GlobalStatusBar.js","names":[],"sources":["../../../src/react/astro/GlobalStatusBar.tsx"],"sourcesContent":["/**\n * @zendir/ui - GlobalStatusBar Component (Pure React)\n *\n * Primary header component for space applications following Astro UX patterns.\n *\n * Features:\n * - Theme-integrated via useTheme()\n * - App identity (name, domain, version)\n * - Clock slot\n * - Monitoring icons slot\n * - Username display\n * - Responsive design\n */\n\nimport React, { memo, ReactNode } from \"react\";\nimport { useTheme } from \"../theme\";\nimport { classNames, safeAccentText } from \"../utils\";\n\nexport interface GlobalStatusBarProps {\n /** Application name */\n appName?: string;\n /** Application domain (organization/mission) */\n appDomain?: string;\n /** Application version */\n appVersion?: string;\n /** Username to display */\n username?: string;\n /** Left slot content (app switcher, etc.) */\n leftSlot?: ReactNode;\n /** Center slot content (typically clock) */\n centerSlot?: ReactNode;\n /** Right slot content (monitoring icons, controls) */\n rightSlot?: ReactNode;\n /** Additional children */\n children?: ReactNode;\n /** Custom className */\n className?: string;\n}\n\n/**\n * GlobalStatusBar - Pure React global status bar\n *\n * Primary header component for space applications. Includes slots for:\n * - App switcher (left)\n * - Global clock (center)\n * - Monitoring icons (right)\n *\n * @example\n * ```tsx\n * <GlobalStatusBar\n * appName=\"Mission Control\"\n * appDomain=\"Zendir\"\n * username=\"Demo User\"\n * centerSlot={<MissionClock />}\n * rightSlot={<MonitoringIcons />}\n * />\n * ```\n */\nexport const GlobalStatusBar = memo(function GlobalStatusBar({\n appName = \"Zendir\",\n appDomain,\n appVersion,\n username,\n leftSlot,\n centerSlot,\n rightSlot,\n children,\n className = \"\",\n}: GlobalStatusBarProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === \"transparent\" ||\n theme === \"transparent-bold\" ||\n theme === \"transparent-minimal\";\n return (\n <header\n className={classNames(\"zendir-global-status-bar\", className)}\n role=\"banner\"\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: 56,\n padding: `0 ${tokens.spacing.lg}`,\n backgroundColor: isTransparentTheme\n ? \"transparent\"\n : tokens.colors.background.surface,\n ...(isTransparentTheme && {\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\" as const,\n }),\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n color: tokens.colors.text.primary,\n fontFamily: tokens.typography.fontFamily.primary,\n }}\n >\n {/* Left section: App identity */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.lg,\n flex: \"1 1 0\",\n }}\n >\n {leftSlot}\n\n <div\n style={{\n display: \"flex\",\n alignItems: \"baseline\",\n gap: tokens.spacing.sm,\n }}\n >\n {appDomain && (\n <span\n style={{\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.normal,\n color: tokens.colors.text.tertiary,\n textTransform: \"uppercase\",\n letterSpacing: tokens.typography.letterSpacing.wide,\n }}\n >\n {appDomain}\n </span>\n )}\n <span\n style={{\n fontSize: tokens.typography.fontSize.xl,\n fontWeight: tokens.typography.fontWeight.semibold,\n letterSpacing: tokens.typography.letterSpacing.tight,\n color: tokens.colors.text.primary,\n }}\n >\n {appName}\n </span>\n {appVersion && (\n <span\n style={{\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.normal,\n color: tokens.colors.text.tertiary,\n }}\n >\n v{appVersion}\n </span>\n )}\n </div>\n </div>\n\n {/* Center section: Clock */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flex: \"0 0 auto\",\n }}\n >\n {centerSlot}\n {children}\n </div>\n\n {/* Right section: Monitoring + User */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: tokens.spacing.lg,\n flex: \"1 1 0\",\n }}\n >\n {rightSlot}\n\n {username && (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: tokens.spacing.sm,\n paddingLeft: tokens.spacing.lg,\n borderLeft: `1px solid ${tokens.colors.border.muted}`,\n }}\n >\n {/* User avatar */}\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: tokens.borderRadius.full,\n backgroundColor: `${tokens.colors.accent.primary}20`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.semibold,\n color: safeAccentText(tokens.colors.accent.primary),\n }}\n >\n {username.charAt(0).toUpperCase()}\n </div>\n <span\n style={{\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.medium,\n color: tokens.colors.text.primary,\n }}\n >\n {username}\n </span>\n </div>\n )}\n </div>\n </header>\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DA,IAAa,kBAAkB,KAAK,SAAS,gBAAgB,EAC3D,UAAU,UACV,WACA,YACA,UACA,UACA,YACA,WACA,UACA,YAAY,MAC+B;CAC3C,MAAM,EAAE,QAAQ,UAAU,SAAS;CACnC,MAAM,qBACJ,UAAU,iBACV,UAAU,sBACV,UAAU;CACZ,OACE,qBAAC,UAAD;EACE,WAAW,WAAW,4BAA4B,SAAS;EAC3D,MAAK;EACL,OAAO;GACL,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,QAAQ;GACR,SAAS,KAAK,OAAO,QAAQ;GAC7B,iBAAiB,qBACb,gBACA,OAAO,OAAO,WAAW;GAC7B,GAAI,sBAAsB;IACxB,gBAAgB;IAChB,sBAAsB;GACxB;GACA,cAAc,aAAa,OAAO,OAAO,OAAO;GAChD,OAAO,OAAO,OAAO,KAAK;GAC1B,YAAY,OAAO,WAAW,WAAW;EAC3C;YAnBF;GAsBE,qBAAC,OAAD;IACE,OAAO;KACL,SAAS;KACT,YAAY;KACZ,KAAK,OAAO,QAAQ;KACpB,MAAM;IACR;cANF,CAQG,UAED,qBAAC,OAAD;KACE,OAAO;MACL,SAAS;MACT,YAAY;MACZ,KAAK,OAAO,QAAQ;KACtB;eALF;MAOG,aACC,oBAAC,QAAD;OACE,OAAO;QACL,UAAU,OAAO,WAAW,SAAS;QACrC,YAAY,OAAO,WAAW,WAAW;QACzC,OAAO,OAAO,OAAO,KAAK;QAC1B,eAAe;QACf,eAAe,OAAO,WAAW,cAAc;OACjD;iBAEC;MACG,CAAA;MAER,oBAAC,QAAD;OACE,OAAO;QACL,UAAU,OAAO,WAAW,SAAS;QACrC,YAAY,OAAO,WAAW,WAAW;QACzC,eAAe,OAAO,WAAW,cAAc;QAC/C,OAAO,OAAO,OAAO,KAAK;OAC5B;iBAEC;MACG,CAAA;MACL,cACC,qBAAC,QAAD;OACE,OAAO;QACL,UAAU,OAAO,WAAW,SAAS;QACrC,YAAY,OAAO,WAAW,WAAW;QACzC,OAAO,OAAO,OAAO,KAAK;OAC5B;iBALF,CAMC,KACG,UACE;;KAEL;MACF;;GAGL,qBAAC,OAAD;IACE,OAAO;KACL,SAAS;KACT,YAAY;KACZ,gBAAgB;KAChB,MAAM;IACR;cANF,CAQG,YACA,QACE;;GAGL,qBAAC,OAAD;IACE,OAAO;KACL,SAAS;KACT,YAAY;KACZ,gBAAgB;KAChB,KAAK,OAAO,QAAQ;KACpB,MAAM;IACR;cAPF,CASG,WAEA,YACC,qBAAC,OAAD;KACE,OAAO;MACL,SAAS;MACT,YAAY;MACZ,KAAK,OAAO,QAAQ;MACpB,aAAa,OAAO,QAAQ;MAC5B,YAAY,aAAa,OAAO,OAAO,OAAO;KAChD;eAPF,CAUE,oBAAC,OAAD;MACE,OAAO;OACL,OAAO;OACP,QAAQ;OACR,cAAc,OAAO,aAAa;OAClC,iBAAiB,GAAG,OAAO,OAAO,OAAO,QAAQ;OACjD,SAAS;OACT,YAAY;OACZ,gBAAgB;OAChB,UAAU,OAAO,WAAW,SAAS;OACrC,YAAY,OAAO,WAAW,WAAW;OACzC,OAAO,eAAe,OAAO,OAAO,OAAO,OAAO;MACpD;gBAEC,SAAS,OAAO,CAAC,CAAC,CAAC,YAAY;KAC7B,CAAA,GACL,oBAAC,QAAD;MACE,OAAO;OACL,UAAU,OAAO,WAAW,SAAS;OACrC,YAAY,OAAO,WAAW,WAAW;OACzC,OAAO,OAAO,OAAO,KAAK;MAC5B;gBAEC;KACG,CAAA,CACH;MAEJ;;EACC;;AAEZ,CAAC"}