@zendir/ui 0.2.21 → 0.3.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 (261) hide show
  1. package/CHANGELOG.md +183 -1
  2. package/README.md +70 -28
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +51 -42
  5. package/dist/index.js.map +1 -1
  6. package/dist/react/3d/CesiumCaptureSource.d.ts +1 -1
  7. package/dist/react/3d/CesiumCaptureSource.js +1 -1
  8. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  9. package/dist/react/3d/ZenSpace3D.js +1253 -0
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -0
  11. package/dist/react/3d/ZenSpace3DCesium.js +579 -0
  12. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -0
  13. package/dist/react/3d/ZenSpace3DTypes.d.ts +28 -1
  14. package/dist/react/3d/ZenSpace3DUtils.d.ts +17 -173
  15. package/dist/react/3d/ZenSpace3DUtils.js +20 -1
  16. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  17. package/dist/react/3d/index.d.ts +6 -12
  18. package/dist/react/3d/threeLoader.js +18 -0
  19. package/dist/react/3d/threeLoader.js.map +1 -0
  20. package/dist/react/astro/MonitoringIcon.js +1 -1
  21. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  22. package/dist/react/astro/SimulationControls.js +2 -2
  23. package/dist/react/astro/SimulationControls.js.map +1 -1
  24. package/dist/react/astro/UnifiedTimeline.js +4 -4
  25. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  26. package/dist/react/charts/GroundTrackMap.d.ts +2 -15
  27. package/dist/react/charts/GroundTrackMap.js +1 -1
  28. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  29. package/dist/react/charts/unified/AstroChart.js +34 -13
  30. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  31. package/dist/react/chatgpt/AppCard.d.ts +0 -4
  32. package/dist/react/chatgpt/index.d.ts +0 -19
  33. package/dist/react/context/SpatialSelectionContext.d.ts +40 -0
  34. package/dist/react/context/SpatialSelectionContext.js +10 -0
  35. package/dist/react/context/SpatialSelectionContext.js.map +1 -0
  36. package/dist/react/context/index.d.ts +2 -0
  37. package/dist/react/core/{DataTable.d.ts → data/DataTable.d.ts} +1 -1
  38. package/dist/react/core/{DataTable.js → data/DataTable.js} +4 -4
  39. package/dist/react/core/data/DataTable.js.map +1 -0
  40. package/dist/react/core/{DataValue.d.ts → data/DataValue.d.ts} +2 -2
  41. package/dist/react/core/{DataValue.js → data/DataValue.js} +2 -2
  42. package/dist/react/core/data/DataValue.js.map +1 -0
  43. package/dist/react/core/{propertyConfig.d.ts → data/propertyConfig.d.ts} +2 -2
  44. package/dist/react/core/data/propertyConfig.js.map +1 -0
  45. package/dist/react/core/{AstroIcon.js → display/AstroIcon.js} +1 -1
  46. package/dist/react/core/display/AstroIcon.js.map +1 -0
  47. package/dist/react/core/{Badge.d.ts → display/Badge.d.ts} +1 -1
  48. package/dist/react/core/{Badge.js → display/Badge.js} +2 -2
  49. package/dist/react/core/display/Badge.js.map +1 -0
  50. package/dist/react/core/{CardHeader.d.ts → display/CardHeader.d.ts} +1 -1
  51. package/dist/react/core/{CardHeader.js → display/CardHeader.js} +2 -2
  52. package/dist/react/core/display/CardHeader.js.map +1 -0
  53. package/dist/react/core/{Container.d.ts → display/Container.d.ts} +1 -1
  54. package/dist/react/core/{Container.js → display/Container.js} +3 -3
  55. package/dist/react/core/display/Container.js.map +1 -0
  56. package/dist/react/core/{CopyButton.js → display/CopyButton.js} +1 -1
  57. package/dist/react/core/display/CopyButton.js.map +1 -0
  58. package/dist/react/core/{GlassCard.d.ts → display/GlassCard.d.ts} +1 -1
  59. package/dist/react/core/{GlassCard.js → display/GlassCard.js} +2 -2
  60. package/dist/react/core/display/GlassCard.js.map +1 -0
  61. package/dist/react/core/{HeaderIconWithStatus.d.ts → display/HeaderIconWithStatus.d.ts} +1 -1
  62. package/dist/react/core/{HeaderIconWithStatus.js → display/HeaderIconWithStatus.js} +1 -1
  63. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -0
  64. package/dist/react/core/{Icon.d.ts → display/Icon.d.ts} +1 -1
  65. package/dist/react/core/{Icon.js → display/Icon.js} +1 -1
  66. package/dist/react/core/display/Icon.js.map +1 -0
  67. package/dist/react/core/{Typography.d.ts → display/Typography.d.ts} +13 -4
  68. package/dist/react/core/{Typography.js → display/Typography.js} +1 -1
  69. package/dist/react/core/display/Typography.js.map +1 -0
  70. package/dist/react/core/{ConfirmDialog.js → feedback/ConfirmDialog.js} +1 -1
  71. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -0
  72. package/dist/react/core/{Dialog.js → feedback/Dialog.js} +2 -2
  73. package/dist/react/core/feedback/Dialog.js.map +1 -0
  74. package/dist/react/core/{Toast.js → feedback/Toast.js} +3 -3
  75. package/dist/react/core/feedback/Toast.js.map +1 -0
  76. package/dist/react/core/index.d.ts +85 -85
  77. package/dist/react/core/{Button.js → inputs/Button.js} +2 -2
  78. package/dist/react/core/inputs/Button.js.map +1 -0
  79. package/dist/react/core/{Checkbox.js → inputs/Checkbox.js} +2 -2
  80. package/dist/react/core/inputs/Checkbox.js.map +1 -0
  81. package/dist/react/core/{Input.d.ts → inputs/Input.d.ts} +1 -1
  82. package/dist/react/core/{Input.js → inputs/Input.js} +3 -3
  83. package/dist/react/core/inputs/Input.js.map +1 -0
  84. package/dist/react/core/{LimitsBar.js → inputs/LimitsBar.js} +1 -1
  85. package/dist/react/core/inputs/LimitsBar.js.map +1 -0
  86. package/dist/react/core/{NumberInput.d.ts → inputs/NumberInput.d.ts} +2 -2
  87. package/dist/react/core/{NumberInput.js → inputs/NumberInput.js} +3 -3
  88. package/dist/react/core/inputs/NumberInput.js.map +1 -0
  89. package/dist/react/core/{PinInput.js → inputs/PinInput.js} +2 -2
  90. package/dist/react/core/inputs/PinInput.js.map +1 -0
  91. package/dist/react/core/{Select.js → inputs/Select.js} +3 -3
  92. package/dist/react/core/inputs/Select.js.map +1 -0
  93. package/dist/react/core/{Toggle.js → inputs/Toggle.js} +2 -2
  94. package/dist/react/core/inputs/Toggle.js.map +1 -0
  95. package/dist/react/core/{AppBar.d.ts → navigation/AppBar.d.ts} +1 -1
  96. package/dist/react/core/{AppBar.js → navigation/AppBar.js} +7 -7
  97. package/dist/react/core/navigation/AppBar.js.map +1 -0
  98. package/dist/react/core/{Pagination.js → navigation/Pagination.js} +2 -2
  99. package/dist/react/core/navigation/Pagination.js.map +1 -0
  100. package/dist/react/core/{SideNav.d.ts → navigation/SideNav.d.ts} +1 -1
  101. package/dist/react/core/{SideNav.js → navigation/SideNav.js} +3 -3
  102. package/dist/react/core/navigation/SideNav.js.map +1 -0
  103. package/dist/react/core/{Tabs.js → navigation/Tabs.js} +2 -2
  104. package/dist/react/core/navigation/Tabs.js.map +1 -0
  105. package/dist/react/core/{Popover.js → overlays/Popover.js} +1 -1
  106. package/dist/react/core/overlays/Popover.js.map +1 -0
  107. package/dist/react/core/{SidePanel.js → overlays/SidePanel.js} +3 -3
  108. package/dist/react/core/overlays/SidePanel.js.map +1 -0
  109. package/dist/react/core/{Tooltip.js → overlays/Tooltip.js} +2 -2
  110. package/dist/react/core/overlays/Tooltip.js.map +1 -0
  111. package/dist/react/core/{ActivityPlanner.js → widgets/ActivityPlanner.js} +1 -1
  112. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -0
  113. package/dist/react/core/{Capture.js → widgets/Capture.js} +3 -3
  114. package/dist/react/core/widgets/Capture.js.map +1 -0
  115. package/dist/react/core/{ChatPanel.d.ts → widgets/ChatPanel.d.ts} +1 -1
  116. package/dist/react/core/{ChatPanel.js → widgets/ChatPanel.js} +2 -2
  117. package/dist/react/core/widgets/ChatPanel.js.map +1 -0
  118. package/dist/react/core/{ColorPickerPanel.d.ts → widgets/ColorPickerPanel.d.ts} +1 -1
  119. package/dist/react/core/{ColorPickerPanel.js → widgets/ColorPickerPanel.js} +3 -3
  120. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -0
  121. package/dist/react/core/{CommandBuilder.js → widgets/CommandBuilder.js} +1 -1
  122. package/dist/react/core/widgets/CommandBuilder.js.map +1 -0
  123. package/dist/react/core/{ConnectionForm.d.ts → widgets/ConnectionForm.d.ts} +1 -1
  124. package/dist/react/core/{ConnectionForm.js → widgets/ConnectionForm.js} +2 -2
  125. package/dist/react/core/widgets/ConnectionForm.js.map +1 -0
  126. package/dist/react/core/{FileExplorer.js → widgets/FileExplorer.js} +2 -2
  127. package/dist/react/core/widgets/FileExplorer.js.map +1 -0
  128. package/dist/react/core/{HexViewer.js → widgets/HexViewer.js} +1 -1
  129. package/dist/react/core/widgets/HexViewer.js.map +1 -0
  130. package/dist/react/core/{ImageGallery.d.ts → widgets/ImageGallery.d.ts} +1 -1
  131. package/dist/react/core/{ImageGallery.js → widgets/ImageGallery.js} +3 -3
  132. package/dist/react/core/widgets/ImageGallery.js.map +1 -0
  133. package/dist/react/core/{LogViewer.d.ts → widgets/LogViewer.d.ts} +13 -3
  134. package/dist/react/core/{LogViewer.js → widgets/LogViewer.js} +28 -8
  135. package/dist/react/core/widgets/LogViewer.js.map +1 -0
  136. package/dist/react/core/{MessageStream.d.ts → widgets/MessageStream.d.ts} +2 -2
  137. package/dist/react/core/{MessageStream.js → widgets/MessageStream.js} +4 -4
  138. package/dist/react/core/widgets/MessageStream.js.map +1 -0
  139. package/dist/react/core/{MissionCalendar.js → widgets/MissionCalendar.js} +2 -2
  140. package/dist/react/core/widgets/MissionCalendar.js.map +1 -0
  141. package/dist/react/core/{PacketViewer.js → widgets/PacketViewer.js} +1 -1
  142. package/dist/react/core/widgets/PacketViewer.js.map +1 -0
  143. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -0
  144. package/dist/react/hooks/index.d.ts +9 -11
  145. package/dist/react/hooks/useAccessWindows.d.ts +15 -19
  146. package/dist/react/hooks/useGroundTrackHistory.d.ts +34 -0
  147. package/dist/react/hooks/useSimulationScene.d.ts +141 -0
  148. package/dist/react/hooks/useSimulationScene.js +401 -0
  149. package/dist/react/hooks/useSimulationScene.js.map +1 -0
  150. package/dist/react/hooks/useZendirSession.d.ts +44 -69
  151. package/dist/react/index.d.ts +7 -3
  152. package/dist/react/panels/LayerControlPanel.d.ts +54 -0
  153. package/dist/react/panels/LayerControlPanel.js +184 -0
  154. package/dist/react/panels/LayerControlPanel.js.map +1 -0
  155. package/dist/react/panels/ObjectInventoryPanel.d.ts +57 -0
  156. package/dist/react/panels/ObjectInventoryPanel.js +261 -0
  157. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -0
  158. package/dist/react/panels/index.d.ts +15 -0
  159. package/dist/react/theme/ThemeProvider.d.ts +2 -0
  160. package/dist/react/theme/ThemeProvider.js +50 -72
  161. package/dist/react/theme/ThemeProvider.js.map +1 -1
  162. package/dist/react/types.d.ts +32 -3
  163. package/dist/react/types.js.map +1 -1
  164. package/dist/react.js +51 -42
  165. package/dist/react.js.map +1 -1
  166. package/dist/shaders/atmosphere.frag.js +5 -0
  167. package/dist/shaders/atmosphere.frag.js.map +1 -0
  168. package/dist/shaders/atmosphere.vert.js +5 -0
  169. package/dist/shaders/atmosphere.vert.js.map +1 -0
  170. package/dist/shaders/stars.frag.js +5 -0
  171. package/dist/shaders/stars.frag.js.map +1 -0
  172. package/dist/shaders/stars.vert.js +5 -0
  173. package/dist/shaders/stars.vert.js.map +1 -0
  174. package/dist/style.css +6 -4
  175. package/dist/tokens/css-vars.d.ts +91 -0
  176. package/dist/tokens/css-vars.js +228 -0
  177. package/dist/tokens/css-vars.js.map +1 -0
  178. package/dist/tokens/index.d.ts +71 -18
  179. package/dist/tokens/index.js +206 -97
  180. package/dist/tokens/index.js.map +1 -1
  181. package/dist/tokens/tokens.css +50 -50
  182. package/package.json +26 -22
  183. package/sdk-stub.js +10 -5
  184. package/dist/react/3d/EarthViewer.d.ts +0 -46
  185. package/dist/react/3d/SolarSystemViewer.d.ts +0 -43
  186. package/dist/react/chatgpt/ChatGPTCard.d.ts +0 -6
  187. package/dist/react/core/ActivityPlanner.js.map +0 -1
  188. package/dist/react/core/AppBar.js.map +0 -1
  189. package/dist/react/core/AstroIcon.js.map +0 -1
  190. package/dist/react/core/Badge.js.map +0 -1
  191. package/dist/react/core/Button.js.map +0 -1
  192. package/dist/react/core/Capture.js.map +0 -1
  193. package/dist/react/core/CardHeader.js.map +0 -1
  194. package/dist/react/core/ChatPanel.js.map +0 -1
  195. package/dist/react/core/Checkbox.js.map +0 -1
  196. package/dist/react/core/ColorPickerPanel.js.map +0 -1
  197. package/dist/react/core/CommandBuilder.js.map +0 -1
  198. package/dist/react/core/ConfirmDialog.js.map +0 -1
  199. package/dist/react/core/ConnectionForm.js.map +0 -1
  200. package/dist/react/core/Container.js.map +0 -1
  201. package/dist/react/core/CopyButton.js.map +0 -1
  202. package/dist/react/core/DataTable.js.map +0 -1
  203. package/dist/react/core/DataValue.js.map +0 -1
  204. package/dist/react/core/Dialog.js.map +0 -1
  205. package/dist/react/core/FileExplorer.js.map +0 -1
  206. package/dist/react/core/GlassCard.js.map +0 -1
  207. package/dist/react/core/HeaderIconWithStatus.js.map +0 -1
  208. package/dist/react/core/HexViewer.js.map +0 -1
  209. package/dist/react/core/Icon.js.map +0 -1
  210. package/dist/react/core/ImageGallery.js.map +0 -1
  211. package/dist/react/core/Input.js.map +0 -1
  212. package/dist/react/core/LimitsBar.js.map +0 -1
  213. package/dist/react/core/LogViewer.js.map +0 -1
  214. package/dist/react/core/MessageStream.js.map +0 -1
  215. package/dist/react/core/MissionCalendar.js.map +0 -1
  216. package/dist/react/core/NumberInput.js.map +0 -1
  217. package/dist/react/core/PacketViewer.js.map +0 -1
  218. package/dist/react/core/Pagination.js.map +0 -1
  219. package/dist/react/core/PinInput.js.map +0 -1
  220. package/dist/react/core/Popover.js.map +0 -1
  221. package/dist/react/core/Select.js.map +0 -1
  222. package/dist/react/core/SideNav.js.map +0 -1
  223. package/dist/react/core/SidePanel.js.map +0 -1
  224. package/dist/react/core/Tabs.js.map +0 -1
  225. package/dist/react/core/Toast.js.map +0 -1
  226. package/dist/react/core/Toggle.js.map +0 -1
  227. package/dist/react/core/Tooltip.js.map +0 -1
  228. package/dist/react/core/Typography.js.map +0 -1
  229. package/dist/react/core/capture-placeholder.png.js.map +0 -1
  230. package/dist/react/core/propertyConfig.js.map +0 -1
  231. package/dist/react/hooks/useSimulationTime.d.ts +0 -61
  232. package/dist/react/hooks/useSpacecraftPosition.d.ts +0 -50
  233. package/dist/react/hooks/useTelemetry.d.ts +0 -55
  234. package/dist/types.d.ts +0 -1
  235. package/dist/types.js +0 -2
  236. package/dist/types.js.map +0 -1
  237. /package/dist/react/core/{propertyConfig.js → data/propertyConfig.js} +0 -0
  238. /package/dist/react/core/{AstroIcon.d.ts → display/AstroIcon.d.ts} +0 -0
  239. /package/dist/react/core/{CopyButton.d.ts → display/CopyButton.d.ts} +0 -0
  240. /package/dist/react/core/{ConfirmDialog.d.ts → feedback/ConfirmDialog.d.ts} +0 -0
  241. /package/dist/react/core/{Dialog.d.ts → feedback/Dialog.d.ts} +0 -0
  242. /package/dist/react/core/{Toast.d.ts → feedback/Toast.d.ts} +0 -0
  243. /package/dist/react/core/{Button.d.ts → inputs/Button.d.ts} +0 -0
  244. /package/dist/react/core/{Checkbox.d.ts → inputs/Checkbox.d.ts} +0 -0
  245. /package/dist/react/core/{LimitsBar.d.ts → inputs/LimitsBar.d.ts} +0 -0
  246. /package/dist/react/core/{PinInput.d.ts → inputs/PinInput.d.ts} +0 -0
  247. /package/dist/react/core/{Select.d.ts → inputs/Select.d.ts} +0 -0
  248. /package/dist/react/core/{Toggle.d.ts → inputs/Toggle.d.ts} +0 -0
  249. /package/dist/react/core/{Pagination.d.ts → navigation/Pagination.d.ts} +0 -0
  250. /package/dist/react/core/{Tabs.d.ts → navigation/Tabs.d.ts} +0 -0
  251. /package/dist/react/core/{Popover.d.ts → overlays/Popover.d.ts} +0 -0
  252. /package/dist/react/core/{SidePanel.d.ts → overlays/SidePanel.d.ts} +0 -0
  253. /package/dist/react/core/{Tooltip.d.ts → overlays/Tooltip.d.ts} +0 -0
  254. /package/dist/react/core/{ActivityPlanner.d.ts → widgets/ActivityPlanner.d.ts} +0 -0
  255. /package/dist/react/core/{Capture.d.ts → widgets/Capture.d.ts} +0 -0
  256. /package/dist/react/core/{CommandBuilder.d.ts → widgets/CommandBuilder.d.ts} +0 -0
  257. /package/dist/react/core/{FileExplorer.d.ts → widgets/FileExplorer.d.ts} +0 -0
  258. /package/dist/react/core/{HexViewer.d.ts → widgets/HexViewer.d.ts} +0 -0
  259. /package/dist/react/core/{MissionCalendar.d.ts → widgets/MissionCalendar.d.ts} +0 -0
  260. /package/dist/react/core/{PacketViewer.d.ts → widgets/PacketViewer.d.ts} +0 -0
  261. /package/dist/react/core/{capture-placeholder.png.js → widgets/capture-placeholder.png.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"propertyConfig.js","sources":["../../../src/react/core/propertyConfig.ts"],"sourcesContent":["/**\n * @zendir/ui - Property Configuration System\n * \n * Enterprise-grade property-to-icon/status/unit mapping system.\n * Provides automatic icon, status, and formatting for common telemetry properties.\n * \n * AstroUXDS Compliance:\n * - Uses official Astro icon names\n * - Status colors per AstroUXDS status system\n * - Dual-coding (color + shape) for accessibility\n * \n * Features:\n * - Auto-derive status from value + thresholds\n * - Contextual icons for space operations properties\n * - Unit formatting with SI prefixes\n * - Extensible configuration\n * \n * @example\n * ```tsx\n * import { getPropertyConfig, deriveStatus, PROPERTY_PRESETS } from '@zendir/ui';\n * \n * // Get config for a known property\n * const tempConfig = getPropertyConfig('temperature');\n * // { icon: 'thermal', unit: '°C', thresholds: { caution: 60, critical: 80 }, ... }\n * \n * // Derive status from value\n * const status = deriveStatus(75, tempConfig.thresholds);\n * // 'caution'\n * ```\n */\n\nimport type { StatusLevel } from '../utils';\nimport type { AstroIconName } from './AstroIcon';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Threshold configuration for automatic status derivation\n * Values are compared: value >= threshold triggers that status (high thresholds)\n * or value <= threshold triggers that status (low thresholds)\n */\nexport interface StatusThresholds {\n /** Value at or above which status becomes 'critical' (high is bad) */\n critical?: number;\n /** Value at or above which status becomes 'serious' (high is bad) */\n serious?: number;\n /** Value at or above which status becomes 'caution' (high is bad) */\n caution?: number;\n /** Value at or below which status becomes 'caution' (low is bad) */\n cautionLow?: number;\n /** Value at or below which status becomes 'serious' (low is bad) */\n seriousLow?: number;\n /** Value at or below which status becomes 'critical' (low is bad) */\n criticalLow?: number;\n}\n\n/**\n * Complete property configuration\n */\nexport interface PropertyConfig {\n /** Display name (sentence case per AstroUXDS) */\n label: string;\n /** Astro icon name */\n icon: AstroIconName;\n /** Unit of measurement */\n unit?: string;\n /** Precision for number formatting */\n precision?: number;\n /** Status thresholds for auto-derivation */\n thresholds?: StatusThresholds;\n /** Category for grouping */\n category?: PropertyCategory;\n /** Description for tooltips */\n description?: string;\n /** Format function override */\n format?: (value: number) => string;\n}\n\n/**\n * Property categories for organization\n */\nexport type PropertyCategory = \n | 'power'\n | 'thermal'\n | 'attitude'\n | 'communications'\n | 'propulsion'\n | 'navigation'\n | 'payload'\n | 'health'\n | 'orbital'\n | 'general';\n\n/**\n * Property key - either a preset name or custom string\n */\nexport type PropertyKey = keyof typeof PROPERTY_PRESETS | (string & {});\n\n// =============================================================================\n// Property Presets\n// =============================================================================\n\n/**\n * Predefined property configurations for common space operations telemetry\n * \n * These provide sensible defaults that can be overridden per-use.\n */\nexport const PROPERTY_PRESETS = {\n // === Power System ===\n battery: {\n label: 'Battery',\n icon: 'battery-full' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'power' as PropertyCategory,\n // Low values are bad for battery (use *Low thresholds)\n thresholds: { criticalLow: 10, seriousLow: 20, cautionLow: 30 },\n description: 'Battery state of charge',\n },\n voltage: {\n label: 'Voltage',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'V',\n precision: 2,\n category: 'power' as PropertyCategory,\n thresholds: { criticalLow: 24, cautionLow: 26 },\n description: 'Bus voltage',\n },\n current: {\n label: 'Current',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'A',\n precision: 2,\n category: 'power' as PropertyCategory,\n description: 'Current draw',\n },\n power: {\n label: 'Power',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'W',\n precision: 1,\n category: 'power' as PropertyCategory,\n description: 'Power consumption or generation',\n },\n solarPower: {\n label: 'Solar',\n icon: 'solar' as AstroIconName,\n unit: 'W',\n precision: 1,\n category: 'power' as PropertyCategory,\n description: 'Solar array output',\n },\n load: {\n label: 'Load',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'W',\n precision: 1,\n category: 'power' as PropertyCategory,\n description: 'Power load',\n },\n\n // === Thermal ===\n temperature: {\n label: 'Temperature',\n icon: 'thermal' as AstroIconName,\n unit: '°C',\n precision: 1,\n category: 'thermal' as PropertyCategory,\n thresholds: { critical: 80, serious: 70, caution: 60, cautionLow: -20, criticalLow: -40 },\n description: 'Component temperature',\n },\n heater: {\n label: 'Heater',\n icon: 'thermal' as AstroIconName,\n unit: '',\n category: 'thermal' as PropertyCategory,\n description: 'Heater status',\n },\n\n // === Attitude ===\n roll: {\n label: 'Roll',\n icon: 'explore' as AstroIconName,\n unit: '°',\n precision: 2,\n category: 'attitude' as PropertyCategory,\n thresholds: { critical: 45, caution: 30 },\n description: 'Roll angle',\n },\n pitch: {\n label: 'Pitch',\n icon: 'explore' as AstroIconName,\n unit: '°',\n precision: 2,\n category: 'attitude' as PropertyCategory,\n thresholds: { critical: 45, caution: 30 },\n description: 'Pitch angle',\n },\n yaw: {\n label: 'Yaw',\n icon: 'explore' as AstroIconName,\n unit: '°',\n precision: 2,\n category: 'attitude' as PropertyCategory,\n thresholds: { critical: 45, caution: 30 },\n description: 'Yaw angle',\n },\n pointingError: {\n label: 'Pointing error',\n icon: 'explore' as AstroIconName,\n unit: '°',\n precision: 3,\n category: 'attitude' as PropertyCategory,\n thresholds: { critical: 1.0, serious: 0.5, caution: 0.1 },\n description: 'Attitude pointing error',\n },\n angularVelocity: {\n label: 'Angular velocity',\n icon: 'explore' as AstroIconName,\n unit: '°/s',\n precision: 3,\n category: 'attitude' as PropertyCategory,\n thresholds: { critical: 5.0, caution: 2.0 },\n description: 'Rotation rate',\n },\n\n // === Communications ===\n signalStrength: {\n label: 'Signal',\n icon: 'antenna-receive' as AstroIconName,\n unit: 'dBm',\n precision: 1,\n category: 'communications' as PropertyCategory,\n thresholds: { criticalLow: -100, cautionLow: -85 },\n description: 'Received signal strength',\n },\n dataRate: {\n label: 'Data rate',\n icon: 'antenna-transmit' as AstroIconName,\n unit: 'Mbps',\n precision: 2,\n category: 'communications' as PropertyCategory,\n description: 'Communication data rate',\n },\n packetLoss: {\n label: 'Packet loss',\n icon: 'netcom' as AstroIconName,\n unit: '%',\n precision: 2,\n category: 'communications' as PropertyCategory,\n thresholds: { critical: 10, serious: 5, caution: 1 },\n description: 'Communication packet loss rate',\n },\n snr: {\n label: 'SNR',\n icon: 'antenna' as AstroIconName,\n unit: 'dB',\n precision: 1,\n category: 'communications' as PropertyCategory,\n thresholds: { criticalLow: 5, cautionLow: 10 },\n description: 'Signal-to-noise ratio',\n },\n queue: {\n label: 'Queue',\n icon: 'netcom' as AstroIconName,\n unit: 'pkts',\n precision: 0,\n category: 'communications' as PropertyCategory,\n thresholds: { critical: 1000, caution: 500 },\n description: 'Packet queue depth',\n },\n\n // === Propulsion ===\n fuelLevel: {\n label: 'Fuel',\n icon: 'propulsion-power' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'propulsion' as PropertyCategory,\n thresholds: { critical: 5, serious: 10, caution: 20 },\n description: 'Propellant remaining',\n },\n deltaV: {\n label: 'Delta-V',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'm/s',\n precision: 1,\n category: 'propulsion' as PropertyCategory,\n description: 'Available delta-V budget',\n },\n thrustLevel: {\n label: 'Thrust',\n icon: 'propulsion-power' as AstroIconName,\n unit: 'N',\n precision: 2,\n category: 'propulsion' as PropertyCategory,\n description: 'Current thrust output',\n },\n\n // === Navigation ===\n altitude: {\n label: 'Altitude',\n icon: 'altitude' as AstroIconName,\n unit: 'km',\n precision: 1,\n category: 'orbital' as PropertyCategory,\n thresholds: { criticalLow: 200, cautionLow: 250 },\n description: 'Orbital altitude',\n },\n velocity: {\n label: 'Velocity',\n icon: 'altitude' as AstroIconName,\n unit: 'km/s',\n precision: 3,\n category: 'orbital' as PropertyCategory,\n description: 'Orbital velocity',\n },\n inclination: {\n label: 'Inclination',\n icon: 'altitude' as AstroIconName,\n unit: '°',\n precision: 2,\n category: 'orbital' as PropertyCategory,\n description: 'Orbital inclination',\n },\n eccentricity: {\n label: 'Eccentricity',\n icon: 'altitude' as AstroIconName,\n unit: '',\n precision: 6,\n category: 'orbital' as PropertyCategory,\n description: 'Orbital eccentricity',\n },\n\n // === Payload ===\n payloadStatus: {\n label: 'Payload',\n icon: 'payload' as AstroIconName,\n unit: '',\n category: 'payload' as PropertyCategory,\n description: 'Payload operational status',\n },\n storageUsed: {\n label: 'Storage',\n icon: 'hardware' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'payload' as PropertyCategory,\n thresholds: { critical: 95, serious: 90, caution: 80 },\n description: 'Onboard storage usage',\n },\n\n // === Health ===\n cpuUsage: {\n label: 'CPU',\n icon: 'processor' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'health' as PropertyCategory,\n thresholds: { critical: 95, serious: 85, caution: 75 },\n description: 'Processor utilization',\n },\n memoryUsage: {\n label: 'Memory',\n icon: 'processor' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'health' as PropertyCategory,\n thresholds: { critical: 95, serious: 85, caution: 75 },\n description: 'Memory utilization',\n },\n uptime: {\n label: 'Uptime',\n icon: 'mission' as AstroIconName,\n unit: 's',\n precision: 0,\n category: 'health' as PropertyCategory,\n description: 'System uptime',\n },\n\n // === General ===\n count: {\n label: 'Count',\n icon: 'list' as AstroIconName,\n unit: '',\n precision: 0,\n category: 'general' as PropertyCategory,\n description: 'Item count',\n },\n percentage: {\n label: 'Percentage',\n icon: 'info' as AstroIconName,\n unit: '%',\n precision: 1,\n category: 'general' as PropertyCategory,\n description: 'Percentage value',\n },\n duration: {\n label: 'Duration',\n icon: 'schedule' as AstroIconName,\n unit: 's',\n precision: 0,\n category: 'general' as PropertyCategory,\n description: 'Time duration',\n },\n} as const satisfies Record<string, PropertyConfig>;\n\n// =============================================================================\n// Category Icons (for section headers)\n// =============================================================================\n\nexport const CATEGORY_ICONS: Record<PropertyCategory, AstroIconName> = {\n power: 'propulsion-power',\n thermal: 'thermal',\n attitude: 'explore',\n communications: 'antenna',\n propulsion: 'propulsion-power',\n navigation: 'gps-fixed',\n payload: 'payload',\n health: 'favorite',\n orbital: 'altitude',\n general: 'info',\n};\n\nexport const CATEGORY_LABELS: Record<PropertyCategory, string> = {\n power: 'Power',\n thermal: 'Thermal',\n attitude: 'Attitude',\n communications: 'Communications',\n propulsion: 'Propulsion',\n navigation: 'Navigation',\n payload: 'Payload',\n health: 'Health',\n orbital: 'Orbital',\n general: 'General',\n};\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Get property configuration by key\n * Returns preset config or a default config for unknown properties\n */\nexport function getPropertyConfig(key: PropertyKey): PropertyConfig {\n const preset = PROPERTY_PRESETS[key as keyof typeof PROPERTY_PRESETS];\n if (preset) {\n return preset;\n }\n\n // Return default config for unknown properties\n return {\n label: formatPropertyLabel(key),\n icon: 'info',\n unit: '',\n precision: 2,\n category: 'general',\n description: key,\n };\n}\n\n/**\n * Format a property key into a display label (sentence case)\n */\nexport function formatPropertyLabel(key: string): string {\n // Handle camelCase → Sentence case\n const words = key\n .replace(/([A-Z])/g, ' $1')\n .replace(/[_-]/g, ' ')\n .trim()\n .toLowerCase();\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\n/**\n * Derive status level from a value and thresholds\n * \n * @param value - Current value\n * @param thresholds - Status thresholds\n * @returns StatusLevel\n * \n * @example\n * ```tsx\n * deriveStatus(75, { caution: 60, critical: 80 }) // 'caution'\n * deriveStatus(25, { criticalLow: 10, cautionLow: 30 }) // 'caution'\n * deriveStatus(50, { caution: 60, critical: 80 }) // 'normal'\n * ```\n */\nexport function deriveStatus(\n value: number | undefined | null,\n thresholds?: StatusThresholds\n): StatusLevel {\n if (value === undefined || value === null || !Number.isFinite(value)) {\n return 'off';\n }\n\n if (!thresholds) {\n return 'normal';\n }\n\n // Check high thresholds (value >= threshold is bad)\n if (thresholds.critical !== undefined && value >= thresholds.critical) {\n return 'critical';\n }\n if (thresholds.serious !== undefined && value >= thresholds.serious) {\n return 'serious';\n }\n if (thresholds.caution !== undefined && value >= thresholds.caution) {\n return 'caution';\n }\n\n // Check low thresholds (value <= threshold is bad)\n if (thresholds.criticalLow !== undefined && value <= thresholds.criticalLow) {\n return 'critical';\n }\n if (thresholds.seriousLow !== undefined && value <= thresholds.seriousLow) {\n return 'serious';\n }\n if (thresholds.cautionLow !== undefined && value <= thresholds.cautionLow) {\n return 'caution';\n }\n\n return 'normal';\n}\n\n/**\n * Derive status for battery specifically (low is bad)\n */\nexport function deriveBatteryStatus(level: number | undefined): StatusLevel {\n if (level === undefined || level === null) return 'off';\n if (level <= 10) return 'critical';\n if (level <= 20) return 'serious';\n if (level <= 30) return 'caution';\n return 'normal';\n}\n\n/**\n * Format a value with its property config\n */\nexport function formatPropertyValue(\n value: number | undefined | null,\n config: PropertyConfig\n): string {\n if (value === undefined || value === null || !Number.isFinite(value)) {\n return '--';\n }\n\n if (config.format) {\n return config.format(value);\n }\n\n const precision = config.precision ?? 2;\n const formatted = value.toFixed(precision);\n const unit = config.unit ?? '';\n \n return unit ? `${formatted}${unit.startsWith('°') || unit.startsWith('%') ? '' : ' '}${unit}` : formatted;\n}\n\n/**\n * Create a custom property config by merging with a preset\n */\nexport function createPropertyConfig(\n baseKey: PropertyKey,\n overrides: Partial<PropertyConfig>\n): PropertyConfig {\n const base = getPropertyConfig(baseKey);\n return { ...base, ...overrides };\n}\n\n/**\n * Get all properties in a category\n */\nexport function getPropertiesByCategory(category: PropertyCategory): Array<{ key: string; config: PropertyConfig }> {\n return Object.entries(PROPERTY_PRESETS)\n .filter(([_, config]) => config.category === category)\n .map(([key, config]) => ({ key, config }));\n}\n"],"names":[],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- /**
2
- * @zendir/ui - useSimulationTime Hook
3
- *
4
- * Hook for integrating with Zendir SDK simulation time.
5
- * Provides real-time simulation epoch and elapsed time for MissionClock
6
- * and other time-sensitive components.
7
- *
8
- * Features:
9
- * - Automatic SDK detection (graceful fallback when SDK not available)
10
- * - Real-time simulation time updates
11
- * - MET (Mission Elapsed Time) calculation
12
- * - Time scaling support
13
- *
14
- * @example
15
- * ```tsx
16
- * const { simulationTime, epoch, elapsedSeconds, isConnected } = useSimulationTime({
17
- * updateInterval: 1000,
18
- * });
19
- *
20
- * <MissionClock
21
- * timeSource="simulation"
22
- * simulationConfig={{
23
- * epoch,
24
- * elapsedSeconds,
25
- * isRunning: isConnected,
26
- * }}
27
- * />
28
- * ```
29
- */
30
- export interface SimulationTimeState {
31
- /** Current simulation time as Date */
32
- simulationTime: Date;
33
- /** Simulation epoch (t=0) */
34
- epoch: Date | null;
35
- /** Elapsed seconds since epoch */
36
- elapsedSeconds: number;
37
- /** Time scale factor (1 = realtime) */
38
- timeScale: number;
39
- /** Whether simulation is running */
40
- isRunning: boolean;
41
- /** Whether connected to Zendir SDK */
42
- isConnected: boolean;
43
- /** Whether SDK is available */
44
- isSdkAvailable: boolean;
45
- /** Error message if any */
46
- error: string | null;
47
- }
48
- export interface UseSimulationTimeOptions {
49
- /** Update interval in milliseconds (default: 1000) */
50
- updateInterval?: number;
51
- /** Custom simulation epoch (for manual mode without SDK) */
52
- manualEpoch?: Date;
53
- /** Manual elapsed seconds (for manual mode without SDK) */
54
- manualElapsedSeconds?: number;
55
- /** Manual time scale (for manual mode without SDK) */
56
- manualTimeScale?: number;
57
- /** Custom time provider function */
58
- customTimeProvider?: () => Date;
59
- }
60
- export declare function useSimulationTime(options?: UseSimulationTimeOptions): SimulationTimeState;
61
- export default useSimulationTime;
@@ -1,50 +0,0 @@
1
- import { SpacecraftPosition } from '../types';
2
-
3
- export type { SpacecraftPosition };
4
- /**
5
- * Compact ground track point for real-time orbit visualization
6
- * Uses abbreviated property names for performance in streaming contexts
7
- * Note: For full ground track data, use GroundTrackPoint from '../types'
8
- */
9
- export interface CompactGroundTrackPoint {
10
- /** Latitude in degrees */
11
- lat: number;
12
- /** Longitude in degrees */
13
- lon: number;
14
- /** Timestamp (epoch ms or ISO string) */
15
- t: number;
16
- }
17
- /** Client interface (compatible with @zendir/sdk ZendirClient) */
18
- export interface PositionClientInterface {
19
- fetchSpacecraftPositions: () => Promise<SpacecraftPosition[]>;
20
- }
21
- export interface UseSpacecraftPositionOptions {
22
- /** Zendir client instance (or any compatible client) */
23
- client: PositionClientInterface;
24
- /** Polling interval in ms (default: 1000) */
25
- interval?: number;
26
- /** Enable polling */
27
- enabled?: boolean;
28
- /** Track ground track history */
29
- trackHistory?: boolean;
30
- /** Maximum history points */
31
- maxHistory?: number;
32
- }
33
- export interface UseSpacecraftPositionResult {
34
- /** All spacecraft positions */
35
- spacecraft: SpacecraftPosition[];
36
- /** Ground track history per spacecraft */
37
- groundTracks: Map<string, CompactGroundTrackPoint[]>;
38
- /** Loading state */
39
- isLoading: boolean;
40
- /** Error message */
41
- error: string | null;
42
- /** Last update timestamp */
43
- lastUpdate: number | null;
44
- /** Get specific spacecraft */
45
- getSpacecraft: (id: string) => SpacecraftPosition | undefined;
46
- /** Manually refresh positions */
47
- refresh: () => Promise<void>;
48
- }
49
- export declare function useSpacecraftPosition(options: UseSpacecraftPositionOptions): UseSpacecraftPositionResult;
50
- export default useSpacecraftPosition;
@@ -1,55 +0,0 @@
1
- import { TelemetryData } from '../types';
2
-
3
- /** Attitude data from spacecraft */
4
- export interface AttitudeData {
5
- quaternion?: {
6
- x: number;
7
- y: number;
8
- z: number;
9
- w: number;
10
- };
11
- euler?: {
12
- roll: number;
13
- pitch: number;
14
- yaw: number;
15
- };
16
- angularVelocity?: {
17
- x: number;
18
- y: number;
19
- z: number;
20
- };
21
- timestamp?: string;
22
- }
23
- /** Client interface (compatible with @zendir/sdk ZendirClient) */
24
- export interface TelemetryClientInterface {
25
- getTelemetry: (spacecraftId: string) => Promise<unknown>;
26
- getAttitude: (spacecraftId: string) => Promise<AttitudeData>;
27
- }
28
- export interface UseTelemetryOptions {
29
- /** Zendir client instance (or any compatible client) */
30
- client: TelemetryClientInterface;
31
- /** Spacecraft ID to fetch telemetry for */
32
- spacecraftId: string;
33
- /** Polling interval in ms (default: 2000) */
34
- interval?: number;
35
- /** Enable polling */
36
- enabled?: boolean;
37
- }
38
- export interface UseTelemetryResult {
39
- /** Latest telemetry data */
40
- telemetry: TelemetryData | null;
41
- /** Latest attitude data */
42
- attitude: AttitudeData | null;
43
- /** Telemetry history */
44
- history: TelemetryData[];
45
- /** Loading state */
46
- isLoading: boolean;
47
- /** Error message */
48
- error: string | null;
49
- /** Last update timestamp */
50
- lastUpdate: number | null;
51
- /** Manually refresh telemetry */
52
- refresh: () => Promise<void>;
53
- }
54
- export declare function useTelemetry(options: UseTelemetryOptions): UseTelemetryResult;
55
- export default useTelemetry;
package/dist/types.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './types/index'
package/dist/types.js DELETED
@@ -1,2 +0,0 @@
1
-
2
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}