@zendir/ui 0.1.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 (359) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +589 -0
  4. package/dist/index.d.ts +8 -0
  5. package/dist/index.js +421 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/react/3d/EarthViewer.d.ts +46 -0
  8. package/dist/react/3d/EarthViewer.js +836 -0
  9. package/dist/react/3d/EarthViewer.js.map +1 -0
  10. package/dist/react/3d/SolarSystemViewer.d.ts +43 -0
  11. package/dist/react/3d/SolarSystemViewer.js +372 -0
  12. package/dist/react/3d/SolarSystemViewer.js.map +1 -0
  13. package/dist/react/3d/ZenSpace3D.d.ts +16 -0
  14. package/dist/react/3d/ZenSpace3D.js +1253 -0
  15. package/dist/react/3d/ZenSpace3D.js.map +1 -0
  16. package/dist/react/3d/ZenSpace3DCesium.d.ts +9 -0
  17. package/dist/react/3d/ZenSpace3DCesium.js +186 -0
  18. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -0
  19. package/dist/react/3d/ZenSpace3DShaders.d.ts +78 -0
  20. package/dist/react/3d/ZenSpace3DShaders.js +94 -0
  21. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -0
  22. package/dist/react/3d/ZenSpace3DTypes.d.ts +614 -0
  23. package/dist/react/3d/ZenSpace3DUtils.d.ts +183 -0
  24. package/dist/react/3d/ZenSpace3DUtils.js +213 -0
  25. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -0
  26. package/dist/react/3d/index.d.ts +23 -0
  27. package/dist/react/3d/threeLoader.d.ts +22 -0
  28. package/dist/react/3d/threeLoader.js +18 -0
  29. package/dist/react/3d/threeLoader.js.map +1 -0
  30. package/dist/react/astro/ClassificationBanner.d.ts +25 -0
  31. package/dist/react/astro/ClassificationBanner.js +83 -0
  32. package/dist/react/astro/ClassificationBanner.js.map +1 -0
  33. package/dist/react/astro/GlobalStatusBar.d.ts +42 -0
  34. package/dist/react/astro/GlobalStatusBar.js +165 -0
  35. package/dist/react/astro/GlobalStatusBar.js.map +1 -0
  36. package/dist/react/astro/MissionClock.d.ts +169 -0
  37. package/dist/react/astro/MissionClock.js +411 -0
  38. package/dist/react/astro/MissionClock.js.map +1 -0
  39. package/dist/react/astro/MonitoringIcon.d.ts +60 -0
  40. package/dist/react/astro/MonitoringIcon.js +369 -0
  41. package/dist/react/astro/MonitoringIcon.js.map +1 -0
  42. package/dist/react/astro/Notification.d.ts +42 -0
  43. package/dist/react/astro/Notification.js +156 -0
  44. package/dist/react/astro/Notification.js.map +1 -0
  45. package/dist/react/astro/Progress.d.ts +39 -0
  46. package/dist/react/astro/Progress.js +149 -0
  47. package/dist/react/astro/Progress.js.map +1 -0
  48. package/dist/react/astro/SimulationControls.d.ts +136 -0
  49. package/dist/react/astro/SimulationControls.js +668 -0
  50. package/dist/react/astro/SimulationControls.js.map +1 -0
  51. package/dist/react/astro/StatusIndicator.d.ts +34 -0
  52. package/dist/react/astro/StatusIndicator.js +189 -0
  53. package/dist/react/astro/StatusIndicator.js.map +1 -0
  54. package/dist/react/astro/UnifiedTimeline.d.ts +106 -0
  55. package/dist/react/astro/UnifiedTimeline.js +1768 -0
  56. package/dist/react/astro/UnifiedTimeline.js.map +1 -0
  57. package/dist/react/astro/index.d.ts +63 -0
  58. package/dist/react/cards/AccessCard.d.ts +37 -0
  59. package/dist/react/cards/AccessCard.js +410 -0
  60. package/dist/react/cards/AccessCard.js.map +1 -0
  61. package/dist/react/cards/OrbitCard.d.ts +31 -0
  62. package/dist/react/cards/OrbitCard.js +372 -0
  63. package/dist/react/cards/OrbitCard.js.map +1 -0
  64. package/dist/react/cards/SpacecraftCard.d.ts +54 -0
  65. package/dist/react/cards/SpacecraftCard.js +941 -0
  66. package/dist/react/cards/SpacecraftCard.js.map +1 -0
  67. package/dist/react/cards/TelemetryCard.d.ts +40 -0
  68. package/dist/react/cards/TelemetryCard.js +742 -0
  69. package/dist/react/cards/TelemetryCard.js.map +1 -0
  70. package/dist/react/cards/TelemetryStreamCard.d.ts +59 -0
  71. package/dist/react/cards/TelemetryStreamCard.js +309 -0
  72. package/dist/react/cards/TelemetryStreamCard.js.map +1 -0
  73. package/dist/react/cards/index.d.ts +13 -0
  74. package/dist/react/charts/GroundTrackMap.d.ts +112 -0
  75. package/dist/react/charts/GroundTrackMap.js +1123 -0
  76. package/dist/react/charts/GroundTrackMap.js.map +1 -0
  77. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +26 -0
  78. package/dist/react/charts/GroundTrackMapLeaflet.js +571 -0
  79. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -0
  80. package/dist/react/charts/groundTrackMapLeafletTiles.d.ts +22 -0
  81. package/dist/react/charts/groundTrackMapLeafletTiles.js +11 -0
  82. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -0
  83. package/dist/react/charts/groundTrackMapLeafletUtils.d.ts +24 -0
  84. package/dist/react/charts/groundTrackMapLeafletUtils.js +109 -0
  85. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -0
  86. package/dist/react/charts/index.d.ts +10 -0
  87. package/dist/react/charts/unified/AstroChart.d.ts +24 -0
  88. package/dist/react/charts/unified/AstroChart.js +1405 -0
  89. package/dist/react/charts/unified/AstroChart.js.map +1 -0
  90. package/dist/react/charts/unified/PowerOverviewChart.d.ts +73 -0
  91. package/dist/react/charts/unified/PowerOverviewChart.js +488 -0
  92. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -0
  93. package/dist/react/charts/unified/domain.d.ts +845 -0
  94. package/dist/react/charts/unified/domain.js +3168 -0
  95. package/dist/react/charts/unified/domain.js.map +1 -0
  96. package/dist/react/charts/unified/generators.d.ts +276 -0
  97. package/dist/react/charts/unified/generators.js +518 -0
  98. package/dist/react/charts/unified/generators.js.map +1 -0
  99. package/dist/react/charts/unified/index.d.ts +55 -0
  100. package/dist/react/charts/unified/presets.d.ts +290 -0
  101. package/dist/react/charts/unified/presets.js +999 -0
  102. package/dist/react/charts/unified/presets.js.map +1 -0
  103. package/dist/react/charts/unified/sync.d.ts +69 -0
  104. package/dist/react/charts/unified/sync.js +219 -0
  105. package/dist/react/charts/unified/sync.js.map +1 -0
  106. package/dist/react/charts/unified/theme.d.ts +447 -0
  107. package/dist/react/charts/unified/theme.js +562 -0
  108. package/dist/react/charts/unified/theme.js.map +1 -0
  109. package/dist/react/charts/unified/types.d.ts +826 -0
  110. package/dist/react/charts/unified/useChartStream.d.ts +58 -0
  111. package/dist/react/charts/unified/useChartStream.js +226 -0
  112. package/dist/react/charts/unified/useChartStream.js.map +1 -0
  113. package/dist/react/chatgpt/AppCard.d.ts +59 -0
  114. package/dist/react/chatgpt/AppCard.js +306 -0
  115. package/dist/react/chatgpt/AppCard.js.map +1 -0
  116. package/dist/react/chatgpt/ChatGPTCard.d.ts +6 -0
  117. package/dist/react/chatgpt/index.d.ts +167 -0
  118. package/dist/react/chatgpt/index.js +166 -0
  119. package/dist/react/chatgpt/index.js.map +1 -0
  120. package/dist/react/context/DisplaySettingsContext.d.ts +107 -0
  121. package/dist/react/context/DisplaySettingsContext.js +169 -0
  122. package/dist/react/context/DisplaySettingsContext.js.map +1 -0
  123. package/dist/react/context/index.d.ts +5 -0
  124. package/dist/react/core/ActivityPlanner.d.ts +45 -0
  125. package/dist/react/core/ActivityPlanner.js +532 -0
  126. package/dist/react/core/ActivityPlanner.js.map +1 -0
  127. package/dist/react/core/AppBar.d.ts +71 -0
  128. package/dist/react/core/AppBar.js +817 -0
  129. package/dist/react/core/AppBar.js.map +1 -0
  130. package/dist/react/core/AstroIcon.d.ts +84 -0
  131. package/dist/react/core/AstroIcon.js +1243 -0
  132. package/dist/react/core/AstroIcon.js.map +1 -0
  133. package/dist/react/core/Badge.d.ts +27 -0
  134. package/dist/react/core/Badge.js +134 -0
  135. package/dist/react/core/Badge.js.map +1 -0
  136. package/dist/react/core/Button.d.ts +26 -0
  137. package/dist/react/core/Button.js +306 -0
  138. package/dist/react/core/Button.js.map +1 -0
  139. package/dist/react/core/CardHeader.d.ts +34 -0
  140. package/dist/react/core/CardHeader.js +316 -0
  141. package/dist/react/core/CardHeader.js.map +1 -0
  142. package/dist/react/core/ChatPanel.d.ts +627 -0
  143. package/dist/react/core/ChatPanel.js +1144 -0
  144. package/dist/react/core/ChatPanel.js.map +1 -0
  145. package/dist/react/core/Checkbox.d.ts +26 -0
  146. package/dist/react/core/Checkbox.js +130 -0
  147. package/dist/react/core/Checkbox.js.map +1 -0
  148. package/dist/react/core/ColorPickerPanel.d.ts +25 -0
  149. package/dist/react/core/ColorPickerPanel.js +293 -0
  150. package/dist/react/core/ColorPickerPanel.js.map +1 -0
  151. package/dist/react/core/CommandBuilder.d.ts +74 -0
  152. package/dist/react/core/CommandBuilder.js +518 -0
  153. package/dist/react/core/CommandBuilder.js.map +1 -0
  154. package/dist/react/core/ConfirmDialog.d.ts +45 -0
  155. package/dist/react/core/ConfirmDialog.js +315 -0
  156. package/dist/react/core/ConfirmDialog.js.map +1 -0
  157. package/dist/react/core/ConnectionForm.d.ts +57 -0
  158. package/dist/react/core/ConnectionForm.js +496 -0
  159. package/dist/react/core/ConnectionForm.js.map +1 -0
  160. package/dist/react/core/Container.d.ts +51 -0
  161. package/dist/react/core/Container.js +670 -0
  162. package/dist/react/core/Container.js.map +1 -0
  163. package/dist/react/core/CopyButton.d.ts +39 -0
  164. package/dist/react/core/CopyButton.js +105 -0
  165. package/dist/react/core/CopyButton.js.map +1 -0
  166. package/dist/react/core/DataTable.d.ts +113 -0
  167. package/dist/react/core/DataTable.js +446 -0
  168. package/dist/react/core/DataTable.js.map +1 -0
  169. package/dist/react/core/DataValue.d.ts +64 -0
  170. package/dist/react/core/DataValue.js +545 -0
  171. package/dist/react/core/DataValue.js.map +1 -0
  172. package/dist/react/core/Dialog.d.ts +32 -0
  173. package/dist/react/core/Dialog.js +201 -0
  174. package/dist/react/core/Dialog.js.map +1 -0
  175. package/dist/react/core/FileExplorer.d.ts +65 -0
  176. package/dist/react/core/FileExplorer.js +520 -0
  177. package/dist/react/core/FileExplorer.js.map +1 -0
  178. package/dist/react/core/GlassCard.d.ts +129 -0
  179. package/dist/react/core/GlassCard.js +375 -0
  180. package/dist/react/core/GlassCard.js.map +1 -0
  181. package/dist/react/core/HeaderIconWithStatus.d.ts +39 -0
  182. package/dist/react/core/HeaderIconWithStatus.js +157 -0
  183. package/dist/react/core/HeaderIconWithStatus.js.map +1 -0
  184. package/dist/react/core/HexViewer.d.ts +143 -0
  185. package/dist/react/core/HexViewer.js +1106 -0
  186. package/dist/react/core/HexViewer.js.map +1 -0
  187. package/dist/react/core/Icon.d.ts +32 -0
  188. package/dist/react/core/Icon.js +142 -0
  189. package/dist/react/core/Icon.js.map +1 -0
  190. package/dist/react/core/ImageGallery.d.ts +41 -0
  191. package/dist/react/core/ImageGallery.js +320 -0
  192. package/dist/react/core/ImageGallery.js.map +1 -0
  193. package/dist/react/core/Input.d.ts +38 -0
  194. package/dist/react/core/Input.js +288 -0
  195. package/dist/react/core/Input.js.map +1 -0
  196. package/dist/react/core/LimitsBar.d.ts +51 -0
  197. package/dist/react/core/LimitsBar.js +200 -0
  198. package/dist/react/core/LimitsBar.js.map +1 -0
  199. package/dist/react/core/LogViewer.d.ts +61 -0
  200. package/dist/react/core/LogViewer.js +599 -0
  201. package/dist/react/core/LogViewer.js.map +1 -0
  202. package/dist/react/core/MessageStream.d.ts +58 -0
  203. package/dist/react/core/MessageStream.js +455 -0
  204. package/dist/react/core/MessageStream.js.map +1 -0
  205. package/dist/react/core/MissionCalendar.d.ts +81 -0
  206. package/dist/react/core/MissionCalendar.js +1049 -0
  207. package/dist/react/core/MissionCalendar.js.map +1 -0
  208. package/dist/react/core/NumberInput.d.ts +85 -0
  209. package/dist/react/core/NumberInput.js +507 -0
  210. package/dist/react/core/NumberInput.js.map +1 -0
  211. package/dist/react/core/PacketViewer.d.ts +73 -0
  212. package/dist/react/core/PacketViewer.js +431 -0
  213. package/dist/react/core/PacketViewer.js.map +1 -0
  214. package/dist/react/core/Pagination.d.ts +30 -0
  215. package/dist/react/core/Pagination.js +190 -0
  216. package/dist/react/core/Pagination.js.map +1 -0
  217. package/dist/react/core/PinInput.d.ts +41 -0
  218. package/dist/react/core/PinInput.js +210 -0
  219. package/dist/react/core/PinInput.js.map +1 -0
  220. package/dist/react/core/Popover.d.ts +55 -0
  221. package/dist/react/core/Popover.js +288 -0
  222. package/dist/react/core/Popover.js.map +1 -0
  223. package/dist/react/core/Select.d.ts +42 -0
  224. package/dist/react/core/Select.js +303 -0
  225. package/dist/react/core/Select.js.map +1 -0
  226. package/dist/react/core/SideNav.d.ts +103 -0
  227. package/dist/react/core/SideNav.js +551 -0
  228. package/dist/react/core/SideNav.js.map +1 -0
  229. package/dist/react/core/SidePanel.d.ts +33 -0
  230. package/dist/react/core/SidePanel.js +199 -0
  231. package/dist/react/core/SidePanel.js.map +1 -0
  232. package/dist/react/core/Tabs.d.ts +47 -0
  233. package/dist/react/core/Tabs.js +129 -0
  234. package/dist/react/core/Tabs.js.map +1 -0
  235. package/dist/react/core/Toast.d.ts +56 -0
  236. package/dist/react/core/Toast.js +229 -0
  237. package/dist/react/core/Toast.js.map +1 -0
  238. package/dist/react/core/Toggle.d.ts +22 -0
  239. package/dist/react/core/Toggle.js +151 -0
  240. package/dist/react/core/Toggle.js.map +1 -0
  241. package/dist/react/core/Tooltip.d.ts +19 -0
  242. package/dist/react/core/Tooltip.js +179 -0
  243. package/dist/react/core/Tooltip.js.map +1 -0
  244. package/dist/react/core/Typography.d.ts +127 -0
  245. package/dist/react/core/Typography.js +187 -0
  246. package/dist/react/core/Typography.js.map +1 -0
  247. package/dist/react/core/index.d.ts +108 -0
  248. package/dist/react/core/layout/Box.d.ts +77 -0
  249. package/dist/react/core/layout/Box.js +126 -0
  250. package/dist/react/core/layout/Box.js.map +1 -0
  251. package/dist/react/core/layout/Center.d.ts +20 -0
  252. package/dist/react/core/layout/Center.js +34 -0
  253. package/dist/react/core/layout/Center.js.map +1 -0
  254. package/dist/react/core/layout/Divider.d.ts +16 -0
  255. package/dist/react/core/layout/Divider.js +108 -0
  256. package/dist/react/core/layout/Divider.js.map +1 -0
  257. package/dist/react/core/layout/Flex.d.ts +30 -0
  258. package/dist/react/core/layout/Flex.js +128 -0
  259. package/dist/react/core/layout/Flex.js.map +1 -0
  260. package/dist/react/core/layout/Grid.d.ts +36 -0
  261. package/dist/react/core/layout/Grid.js +142 -0
  262. package/dist/react/core/layout/Grid.js.map +1 -0
  263. package/dist/react/core/layout/Spacer.d.ts +8 -0
  264. package/dist/react/core/layout/Spacer.js +31 -0
  265. package/dist/react/core/layout/Spacer.js.map +1 -0
  266. package/dist/react/core/layout/Stack.d.ts +54 -0
  267. package/dist/react/core/layout/Stack.js +74 -0
  268. package/dist/react/core/layout/Stack.js.map +1 -0
  269. package/dist/react/core/layout/index.d.ts +38 -0
  270. package/dist/react/core/layout/responsive.d.ts +23 -0
  271. package/dist/react/core/layout/responsive.js +26 -0
  272. package/dist/react/core/layout/responsive.js.map +1 -0
  273. package/dist/react/core/layout/useBreakpoint.d.ts +77 -0
  274. package/dist/react/core/layout/useBreakpoint.js +73 -0
  275. package/dist/react/core/layout/useBreakpoint.js.map +1 -0
  276. package/dist/react/core/propertyConfig.d.ts +443 -0
  277. package/dist/react/core/propertyConfig.js +399 -0
  278. package/dist/react/core/propertyConfig.js.map +1 -0
  279. package/dist/react/hooks/index.d.ts +21 -0
  280. package/dist/react/hooks/useAccessWindows.d.ts +66 -0
  281. package/dist/react/hooks/useCompactMode.d.ts +82 -0
  282. package/dist/react/hooks/useCompactMode.js +62 -0
  283. package/dist/react/hooks/useCompactMode.js.map +1 -0
  284. package/dist/react/hooks/useLiveSelection.d.ts +57 -0
  285. package/dist/react/hooks/useSimulationPlayback.d.ts +97 -0
  286. package/dist/react/hooks/useSimulationTime.d.ts +61 -0
  287. package/dist/react/hooks/useSpacecraftPosition.d.ts +50 -0
  288. package/dist/react/hooks/useSpacecraftPosition.js +89 -0
  289. package/dist/react/hooks/useSpacecraftPosition.js.map +1 -0
  290. package/dist/react/hooks/useTelemetry.d.ts +55 -0
  291. package/dist/react/hooks/useTelemetry.js +73 -0
  292. package/dist/react/hooks/useTelemetry.js.map +1 -0
  293. package/dist/react/hooks/useZendirSession.d.ts +109 -0
  294. package/dist/react/hooks/useZendirSession.js +148 -0
  295. package/dist/react/hooks/useZendirSession.js.map +1 -0
  296. package/dist/react/index.d.ts +74 -0
  297. package/dist/react/shared/ErrorBoundary.d.ts +63 -0
  298. package/dist/react/shared/ErrorBoundary.js +142 -0
  299. package/dist/react/shared/ErrorBoundary.js.map +1 -0
  300. package/dist/react/shared/Skeleton.d.ts +110 -0
  301. package/dist/react/shared/Skeleton.js +324 -0
  302. package/dist/react/shared/Skeleton.js.map +1 -0
  303. package/dist/react/shared/index.d.ts +12 -0
  304. package/dist/react/theme/ThemeProvider.d.ts +385 -0
  305. package/dist/react/theme/ThemeProvider.js +1096 -0
  306. package/dist/react/theme/ThemeProvider.js.map +1 -0
  307. package/dist/react/theme/astro-tokens.d.ts +153 -0
  308. package/dist/react/theme/cardAccent.d.ts +75 -0
  309. package/dist/react/theme/cardAccent.js +137 -0
  310. package/dist/react/theme/cardAccent.js.map +1 -0
  311. package/dist/react/theme/config.d.ts +39 -0
  312. package/dist/react/theme/index.d.ts +9 -0
  313. package/dist/react/types.d.ts +360 -0
  314. package/dist/react/types.js +58 -0
  315. package/dist/react/types.js.map +1 -0
  316. package/dist/react/utils/index.d.ts +247 -0
  317. package/dist/react/utils/index.js +423 -0
  318. package/dist/react/utils/index.js.map +1 -0
  319. package/dist/react/visualizations/EclipseTimerCard.d.ts +17 -0
  320. package/dist/react/visualizations/EclipseTimerCard.js +250 -0
  321. package/dist/react/visualizations/EclipseTimerCard.js.map +1 -0
  322. package/dist/react/visualizations/LinkBudgetCard.d.ts +50 -0
  323. package/dist/react/visualizations/LinkBudgetCard.js +444 -0
  324. package/dist/react/visualizations/LinkBudgetCard.js.map +1 -0
  325. package/dist/react/visualizations/NavBallCard.d.ts +17 -0
  326. package/dist/react/visualizations/NavBallCard.js +243 -0
  327. package/dist/react/visualizations/NavBallCard.js.map +1 -0
  328. package/dist/react/visualizations/PropulsionCard.d.ts +37 -0
  329. package/dist/react/visualizations/PropulsionCard.js +298 -0
  330. package/dist/react/visualizations/PropulsionCard.js.map +1 -0
  331. package/dist/react/visualizations/SensorFootprintCard.d.ts +33 -0
  332. package/dist/react/visualizations/SensorFootprintCard.js +326 -0
  333. package/dist/react/visualizations/SensorFootprintCard.js.map +1 -0
  334. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +38 -0
  335. package/dist/react/visualizations/ThermalHeatmapCard.js +372 -0
  336. package/dist/react/visualizations/ThermalHeatmapCard.js.map +1 -0
  337. package/dist/react/visualizations/index.d.ts +17 -0
  338. package/dist/react.d.ts +1 -0
  339. package/dist/react.js +421 -0
  340. package/dist/react.js.map +1 -0
  341. package/dist/shaders/atmosphere.frag.js +5 -0
  342. package/dist/shaders/atmosphere.frag.js.map +1 -0
  343. package/dist/shaders/atmosphere.vert.js +5 -0
  344. package/dist/shaders/atmosphere.vert.js.map +1 -0
  345. package/dist/shaders/stars.frag.js +5 -0
  346. package/dist/shaders/stars.frag.js.map +1 -0
  347. package/dist/shaders/stars.vert.js +5 -0
  348. package/dist/shaders/stars.vert.js.map +1 -0
  349. package/dist/style.css +143 -0
  350. package/dist/tokens/index.d.ts +296 -0
  351. package/dist/tokens/index.js +263 -0
  352. package/dist/tokens/index.js.map +1 -0
  353. package/dist/tokens/tokens.css +155 -0
  354. package/dist/types/index.d.ts +23 -0
  355. package/dist/types.d.ts +1 -0
  356. package/dist/types.js +2 -0
  357. package/dist/types.js.map +1 -0
  358. package/package.json +220 -0
  359. package/sdk-stub.js +22 -0
@@ -0,0 +1,39 @@
1
+ import { default as React } from 'react';
2
+ import { StatusLevel } from '../utils';
3
+
4
+ export interface ProgressProps {
5
+ /** Current value (0-max) */
6
+ value?: number;
7
+ /** Maximum value (default: 100) */
8
+ max?: number;
9
+ /** Hide the percentage label */
10
+ hideLabel?: boolean;
11
+ /** Show value as label instead of percentage */
12
+ showValue?: boolean;
13
+ /** Status-based coloring (overrides default) */
14
+ status?: StatusLevel;
15
+ /** Indeterminate mode (animated, no value) */
16
+ indeterminate?: boolean;
17
+ /** Height of the progress bar */
18
+ height?: number;
19
+ /** Custom label */
20
+ label?: string;
21
+ /** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */
22
+ showStatusIcon?: boolean;
23
+ /** Custom className */
24
+ className?: string;
25
+ }
26
+ /**
27
+ * Progress - Pure React progress bar component
28
+ *
29
+ * Displays progress with visual bar and optional label.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <Progress value={85} />
34
+ * <Progress value={42} max={50} hideLabel />
35
+ * <Progress indeterminate label="Loading..." />
36
+ * <Progress value={25} status="caution" />
37
+ * ```
38
+ */
39
+ export declare const Progress: React.NamedExoticComponent<ProgressProps>;
@@ -0,0 +1,149 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { memo } from "react";
3
+ import { formatPercentage, classNames } from "../utils/index.js";
4
+ import { useTheme } from "../theme/ThemeProvider.js";
5
+ function ProgressStatusShape({
6
+ status,
7
+ color,
8
+ size = 10
9
+ }) {
10
+ const glow = `${color}50`;
11
+ switch (status) {
12
+ case "caution":
13
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("rect", { x: "1", y: "1", width: "10", height: "10", fill: color }) });
14
+ case "serious":
15
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,1 11,6 6,11 1,6", fill: color }) });
16
+ case "critical":
17
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("polygon", { points: "6,11 1,2 11,2", fill: color }) });
18
+ case "standby":
19
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3.5", fill: "none", stroke: color, strokeWidth: "2" }) });
20
+ case "off":
21
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "3", fill: color }) });
22
+ case "normal":
23
+ default:
24
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 12 12", width: size, height: size, style: { filter: `drop-shadow(0 0 3px ${glow})` }, children: /* @__PURE__ */ jsx("circle", { cx: "6", cy: "6", r: "5", fill: color }) });
25
+ }
26
+ }
27
+ const Progress = memo(function Progress2({
28
+ value,
29
+ max = 100,
30
+ hideLabel = false,
31
+ showValue = false,
32
+ status,
33
+ indeterminate = false,
34
+ height = 8,
35
+ label,
36
+ showStatusIcon = true,
37
+ className = ""
38
+ }) {
39
+ const { tokens } = useTheme();
40
+ const percentage = value !== void 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0;
41
+ const effectiveStatus = status ?? (percentage >= 75 ? "normal" : percentage >= 50 ? "standby" : percentage >= 25 ? "caution" : percentage > 0 ? "serious" : "off");
42
+ const color = tokens.colors.status[effectiveStatus];
43
+ const displayLabel = label ?? (showValue && value !== void 0 ? `${value}/${max}` : formatPercentage(percentage, false, 0));
44
+ const iconSize = Math.max(10, height + 2);
45
+ return /* @__PURE__ */ jsxs(
46
+ "div",
47
+ {
48
+ className: classNames("zendir-progress", className),
49
+ role: "progressbar",
50
+ "aria-valuenow": indeterminate ? void 0 : value,
51
+ "aria-valuemin": 0,
52
+ "aria-valuemax": max,
53
+ "aria-label": label ?? `Progress: ${percentage.toFixed(0)}%`,
54
+ style: {
55
+ display: "flex",
56
+ flexDirection: "column",
57
+ gap: tokens.spacing.xs,
58
+ width: "100%"
59
+ },
60
+ children: [
61
+ !hideLabel && /* @__PURE__ */ jsxs(
62
+ "div",
63
+ {
64
+ style: {
65
+ display: "flex",
66
+ justifyContent: "space-between",
67
+ alignItems: "center",
68
+ fontSize: tokens.typography.fontSize.sm,
69
+ fontWeight: tokens.typography.fontWeight.medium,
70
+ color: tokens.colors.text.secondary
71
+ },
72
+ children: [
73
+ label && /* @__PURE__ */ jsx("span", { style: { color: tokens.colors.text.secondary }, children: label }),
74
+ /* @__PURE__ */ jsx(
75
+ "span",
76
+ {
77
+ style: {
78
+ marginLeft: "auto",
79
+ fontVariantNumeric: "tabular-nums",
80
+ color: tokens.colors.text.primary
81
+ },
82
+ children: !indeterminate && displayLabel
83
+ }
84
+ )
85
+ ]
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsxs("div", { style: { position: "relative", width: "100%" }, children: [
89
+ /* @__PURE__ */ jsx(
90
+ "div",
91
+ {
92
+ style: {
93
+ position: "relative",
94
+ width: "100%",
95
+ height,
96
+ backgroundColor: tokens.colors.border.muted,
97
+ borderRadius: height / 2,
98
+ overflow: "hidden"
99
+ },
100
+ children: /* @__PURE__ */ jsx(
101
+ "div",
102
+ {
103
+ style: {
104
+ position: "absolute",
105
+ top: 0,
106
+ left: 0,
107
+ height: "100%",
108
+ width: indeterminate ? "30%" : `${percentage}%`,
109
+ backgroundColor: color,
110
+ borderRadius: height / 2,
111
+ transition: indeterminate ? "none" : "width 300ms ease-out",
112
+ animation: indeterminate ? "progressIndeterminate 1.5s ease-in-out infinite" : "none",
113
+ boxShadow: `0 0 ${height}px ${color}40`
114
+ }
115
+ }
116
+ )
117
+ }
118
+ ),
119
+ showStatusIcon && !indeterminate && /* @__PURE__ */ jsx(
120
+ "div",
121
+ {
122
+ style: {
123
+ position: "absolute",
124
+ top: height + 4,
125
+ left: `${percentage}%`,
126
+ transform: "translateX(-50%)",
127
+ lineHeight: 0,
128
+ transition: "left 300ms ease-out"
129
+ },
130
+ "aria-hidden": "true",
131
+ children: /* @__PURE__ */ jsx(ProgressStatusShape, { status: effectiveStatus, color, size: iconSize })
132
+ }
133
+ )
134
+ ] }),
135
+ showStatusIcon && !indeterminate && /* @__PURE__ */ jsx("div", { style: { height: iconSize + 2 } }),
136
+ /* @__PURE__ */ jsx("style", { children: `
137
+ @keyframes progressIndeterminate {
138
+ 0% { left: -30%; }
139
+ 100% { left: 100%; }
140
+ }
141
+ ` })
142
+ ]
143
+ }
144
+ );
145
+ });
146
+ export {
147
+ Progress
148
+ };
149
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sources":["../../../src/react/astro/Progress.tsx"],"sourcesContent":["/**\n * @zendir/ui - Progress Component (Pure React)\n * \n * Progress bar following Astro UX Design System patterns.\n * \n * Features:\n * - Theme-integrated via useTheme()\n * - Determinate and indeterminate modes\n * - Optional label and value display\n * - Status-based coloring\n * - Smooth animations\n * - Accessible (progress role with aria attributes)\n */\n\nimport React, { memo } from 'react';\nimport { useTheme } from '../theme';\nimport { classNames, type StatusLevel, formatPercentage } from '../utils';\n\n/** Astro UX status shape per official spec: filled circle (normal), ring (standby), small circle (off), square (caution), diamond (serious), triangle (critical) */\nfunction ProgressStatusShape({\n status,\n color,\n size = 10,\n}: {\n status: StatusLevel;\n color: string;\n size?: number;\n}): React.ReactElement {\n const glow = `${color}50`;\n\n switch (status) {\n case 'caution':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" fill={color} />\n </svg>\n );\n case 'serious':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,1 11,6 6,11 1,6\" fill={color} />\n </svg>\n );\n case 'critical':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <polygon points=\"6,11 1,2 11,2\" fill={color} />\n </svg>\n );\n case 'standby':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3.5\" fill=\"none\" stroke={color} strokeWidth=\"2\" />\n </svg>\n );\n case 'off':\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"3\" fill={color} />\n </svg>\n );\n case 'normal':\n default:\n return (\n <svg viewBox=\"0 0 12 12\" width={size} height={size} style={{ filter: `drop-shadow(0 0 3px ${glow})` }}>\n <circle cx=\"6\" cy=\"6\" r=\"5\" fill={color} />\n </svg>\n );\n }\n}\n\nexport interface ProgressProps {\n /** Current value (0-max) */\n value?: number;\n /** Maximum value (default: 100) */\n max?: number;\n /** Hide the percentage label */\n hideLabel?: boolean;\n /** Show value as label instead of percentage */\n showValue?: boolean;\n /** Status-based coloring (overrides default) */\n status?: StatusLevel;\n /** Indeterminate mode (animated, no value) */\n indeterminate?: boolean;\n /** Height of the progress bar */\n height?: number;\n /** Custom label */\n label?: string;\n /** Show Astro UX status shape icon beneath the bar at the fill position (default: true) */\n showStatusIcon?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Progress - Pure React progress bar component\n * \n * Displays progress with visual bar and optional label.\n * \n * @example\n * ```tsx\n * <Progress value={85} />\n * <Progress value={42} max={50} hideLabel />\n * <Progress indeterminate label=\"Loading...\" />\n * <Progress value={25} status=\"caution\" />\n * ```\n */\nexport const Progress = memo(function Progress({\n value,\n max = 100,\n hideLabel = false,\n showValue = false,\n status,\n indeterminate = false,\n height = 8,\n label,\n showStatusIcon = true,\n className = '',\n}: ProgressProps): React.ReactElement {\n const { tokens } = useTheme();\n const percentage = value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\n \n // Auto-determine status based on value if not provided\n const effectiveStatus: StatusLevel = status ?? (\n percentage >= 75 ? 'normal' :\n percentage >= 50 ? 'standby' :\n percentage >= 25 ? 'caution' :\n percentage > 0 ? 'serious' : 'off'\n );\n \n // Get color from theme\n const color = tokens.colors.status[effectiveStatus];\n \n const displayLabel = label ?? (\n showValue && value !== undefined\n ? `${value}/${max}`\n : formatPercentage(percentage, false, 0)\n );\n\n const iconSize = Math.max(10, height + 2);\n\n return (\n <div\n className={classNames('zendir-progress', className)}\n role=\"progressbar\"\n aria-valuenow={indeterminate ? undefined : value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label ?? `Progress: ${percentage.toFixed(0)}%`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: tokens.spacing.xs,\n width: '100%',\n }}\n >\n {/* Label row */}\n {!hideLabel && (\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.medium,\n color: tokens.colors.text.secondary,\n }}\n >\n {label && <span style={{ color: tokens.colors.text.secondary }}>{label}</span>}\n <span\n style={{\n marginLeft: 'auto',\n fontVariantNumeric: 'tabular-nums',\n color: tokens.colors.text.primary,\n }}\n >\n {!indeterminate && displayLabel}\n </span>\n </div>\n )}\n\n {/* Progress track (relative wrapper for icon positioning) */}\n <div style={{ position: 'relative', width: '100%' }}>\n <div\n style={{\n position: 'relative',\n width: '100%',\n height,\n backgroundColor: tokens.colors.border.muted,\n borderRadius: height / 2,\n overflow: 'hidden',\n }}\n >\n {/* Progress fill */}\n <div\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n height: '100%',\n width: indeterminate ? '30%' : `${percentage}%`,\n backgroundColor: color,\n borderRadius: height / 2,\n transition: indeterminate ? 'none' : 'width 300ms ease-out',\n animation: indeterminate ? 'progressIndeterminate 1.5s ease-in-out infinite' : 'none',\n boxShadow: `0 0 ${height}px ${color}40`,\n }}\n />\n </div>\n\n {/* Status shape icon positioned beneath the fill edge */}\n {showStatusIcon && !indeterminate && (\n <div\n style={{\n position: 'absolute',\n top: height + 4,\n left: `${percentage}%`,\n transform: 'translateX(-50%)',\n lineHeight: 0,\n transition: 'left 300ms ease-out',\n }}\n aria-hidden=\"true\"\n >\n <ProgressStatusShape status={effectiveStatus} color={color} size={iconSize} />\n </div>\n )}\n </div>\n\n {/* Reserve space for the icon so it doesn't overlap content below */}\n {showStatusIcon && !indeterminate && (\n <div style={{ height: iconSize + 2 }} />\n )}\n\n {/* Keyframe animation for indeterminate */}\n <style>{`\n @keyframes progressIndeterminate {\n 0% { left: -30%; }\n 100% { left: 100%; }\n }\n `}</style>\n </div>\n );\n});\n"],"names":["Progress"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { default as React } from 'react';
2
+
3
+ export type SimulationState = 'stopped' | 'playing' | 'paused';
4
+ export interface SimulationControlsProps {
5
+ /** Current simulation state */
6
+ state?: SimulationState;
7
+ /** Whether simulation is playing (alternative to state) */
8
+ isPlaying?: boolean;
9
+ /** Whether simulation is paused (used with isPlaying for 3-state) */
10
+ isPaused?: boolean;
11
+ /** Called when play is triggered */
12
+ onPlay?: () => void;
13
+ /** Called when pause is triggered */
14
+ onPause?: () => void;
15
+ /** Called when stop (reset) is triggered */
16
+ onStop?: () => void;
17
+ /** Called when step forward is triggered */
18
+ onStepForward?: () => void;
19
+ /** Called when step backward is triggered */
20
+ onStepBackward?: () => void;
21
+ /** Current simulation time */
22
+ currentTime?: Date | string;
23
+ /** Simulation epoch (t=0) */
24
+ epoch?: Date | string;
25
+ /** Current elapsed seconds from epoch */
26
+ elapsedSeconds?: number;
27
+ /** Show elapsed time display */
28
+ showElapsedTime?: boolean;
29
+ /** Show current time display */
30
+ showCurrentTime?: boolean;
31
+ /** Show date in time display */
32
+ showDate?: boolean;
33
+ /** Current time scale factor (1 = realtime) */
34
+ timeScale?: number;
35
+ /** Callback when time scale changes */
36
+ onTimeScaleChange?: (scale: number) => void;
37
+ /** Available time scale presets */
38
+ timeScalePresets?: number[];
39
+ /** Show time scale controls */
40
+ showTimeScale?: boolean;
41
+ /** Step size in seconds */
42
+ stepSize?: number;
43
+ /** Callback when step size changes */
44
+ onStepSizeChange?: (size: number) => void;
45
+ /** Available step size presets in seconds */
46
+ stepSizePresets?: number[];
47
+ /** Show step controls */
48
+ showStepControls?: boolean;
49
+ /** Compact display mode */
50
+ compact?: boolean;
51
+ /** Small size variant */
52
+ small?: boolean;
53
+ /** Custom className */
54
+ className?: string;
55
+ /** Disabled state */
56
+ disabled?: boolean;
57
+ /** Show simulation status indicator */
58
+ showStatus?: boolean;
59
+ /** Custom label for simulation mode */
60
+ label?: string;
61
+ }
62
+ /**
63
+ * SimulationControls - Playback controls for space simulation
64
+ *
65
+ * Provides comprehensive simulation time control following Astro UX patterns.
66
+ * Designed for mission control and space operations applications.
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * // Basic usage
71
+ * <SimulationControls
72
+ * isPlaying={isPlaying}
73
+ * onPlay={() => setIsPlaying(true)}
74
+ * onPause={() => setIsPlaying(false)}
75
+ * onStop={handleReset}
76
+ * />
77
+ *
78
+ * // Full featured
79
+ * <SimulationControls
80
+ * isPlaying={isPlaying}
81
+ * onPlay={handlePlay}
82
+ * onPause={handlePause}
83
+ * onStop={handleStop}
84
+ * onStepForward={handleStepForward}
85
+ * onStepBackward={handleStepBackward}
86
+ * currentTime={simulationTime}
87
+ * epoch={epoch}
88
+ * elapsedSeconds={elapsed}
89
+ * timeScale={timeScale}
90
+ * onTimeScaleChange={setTimeScale}
91
+ * showTimeScale
92
+ * showStepControls
93
+ * showElapsedTime
94
+ * />
95
+ *
96
+ * // In AppBar center slot
97
+ * <AppBar
98
+ * appName="Mission Control"
99
+ * centerSlot={
100
+ * <SimulationControls
101
+ * compact
102
+ * isPlaying={isPlaying}
103
+ * onPlay={handlePlay}
104
+ * onPause={handlePause}
105
+ * currentTime={simTime}
106
+ * />
107
+ * }
108
+ * />
109
+ * ```
110
+ */
111
+ export declare const SimulationControls: React.NamedExoticComponent<SimulationControlsProps>;
112
+ /**
113
+ * MiniSimulationControls - Ultra-compact controls for AppBar
114
+ */
115
+ export interface MiniSimulationControlsProps {
116
+ isPlaying?: boolean;
117
+ onPlay?: () => void;
118
+ onPause?: () => void;
119
+ onStop?: () => void;
120
+ timeScale?: number;
121
+ onTimeScaleChange?: (scale: number) => void;
122
+ disabled?: boolean;
123
+ className?: string;
124
+ }
125
+ export declare const MiniSimulationControls: React.NamedExoticComponent<MiniSimulationControlsProps>;
126
+ /**
127
+ * SimulationControlsWithClock - Controls combined with MissionClock
128
+ */
129
+ export interface SimulationControlsWithClockProps extends Omit<SimulationControlsProps, 'showCurrentTime' | 'showElapsedTime'> {
130
+ /** Clock format */
131
+ clockFormat?: '12h' | '24h';
132
+ /** Timezone label */
133
+ timezone?: string;
134
+ }
135
+ export declare const SimulationControlsWithClock: React.NamedExoticComponent<SimulationControlsWithClockProps>;
136
+ export default SimulationControls;