@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,627 @@
1
+ import { default as React } from 'react';
2
+ import { StatusLevel } from '../utils';
3
+
4
+ /** Status alert block — renders as a colored banner with icon shape */
5
+ export interface ChatBlockAlert {
6
+ type: 'alert';
7
+ status: StatusLevel;
8
+ title: string;
9
+ detail?: string;
10
+ }
11
+ /** Telemetry readout block — key/value pairs with optional status per row */
12
+ export interface ChatBlockTelemetry {
13
+ type: 'telemetry';
14
+ title?: string;
15
+ items: Array<{
16
+ label: string;
17
+ value: string | number;
18
+ unit?: string;
19
+ status?: StatusLevel;
20
+ }>;
21
+ }
22
+ /** Progress block — inline progress bar */
23
+ export interface ChatBlockProgress {
24
+ type: 'progress';
25
+ label: string;
26
+ value: number;
27
+ max?: number;
28
+ status?: StatusLevel;
29
+ }
30
+ /** Data table block */
31
+ export interface ChatBlockTable {
32
+ type: 'table';
33
+ title?: string;
34
+ columns: string[];
35
+ rows: (string | number)[][];
36
+ }
37
+ /** Action buttons block */
38
+ export interface ChatBlockActions {
39
+ type: 'actions';
40
+ buttons: Array<{
41
+ label: string;
42
+ variant?: 'primary' | 'secondary' | 'critical';
43
+ onClick: () => void;
44
+ }>;
45
+ }
46
+ /** Choice/option selector — AI presents options, user picks one (or multiple) */
47
+ export interface ChatBlockChoice {
48
+ type: 'choice';
49
+ /** Unique ID for this choice block (used in onBlockEvent callback) */
50
+ id: string;
51
+ title?: string;
52
+ /** Allow multiple selections */
53
+ multiple?: boolean;
54
+ options: Array<{
55
+ id: string;
56
+ label: string;
57
+ description?: string;
58
+ status?: StatusLevel;
59
+ disabled?: boolean;
60
+ }>;
61
+ /** Pre-selected option IDs */
62
+ selected?: string[];
63
+ /** Has the user already submitted their choice? */
64
+ submitted?: boolean;
65
+ }
66
+ /** Confirmation gate — requires explicit operator acknowledgment before proceeding */
67
+ export interface ChatBlockConfirm {
68
+ type: 'confirm';
69
+ /** Unique ID for this confirm block (used in onBlockEvent callback) */
70
+ id: string;
71
+ status?: StatusLevel;
72
+ title: string;
73
+ detail?: string;
74
+ confirmLabel?: string;
75
+ cancelLabel?: string;
76
+ /** Has the operator already responded? */
77
+ resolved?: 'confirmed' | 'cancelled';
78
+ }
79
+ /** Command block — displays a command with copy-to-clipboard and optional execute */
80
+ export interface ChatBlockCommand {
81
+ type: 'command';
82
+ /** Unique ID for this command block (used in onBlockEvent callback) */
83
+ id?: string;
84
+ language?: string;
85
+ command: string;
86
+ label?: string;
87
+ /** Show an execute button (fires onBlockEvent with action:'execute') */
88
+ executable?: boolean;
89
+ }
90
+ /** Key-value metadata block — compact pairs for context/metadata */
91
+ export interface ChatBlockKV {
92
+ type: 'kv';
93
+ title?: string;
94
+ pairs: Array<{
95
+ key: string;
96
+ value: string | number;
97
+ mono?: boolean;
98
+ }>;
99
+ }
100
+ export type ChatBlock = ChatBlockAlert | ChatBlockTelemetry | ChatBlockProgress | ChatBlockTable | ChatBlockActions | ChatBlockChoice | ChatBlockConfirm | ChatBlockCommand | ChatBlockKV;
101
+ /** Event emitted by interactive blocks (choice, confirm, command) */
102
+ export interface ChatBlockEvent {
103
+ /** The block ID */
104
+ blockId: string;
105
+ /** The message ID containing this block */
106
+ messageId: string;
107
+ /** Action type */
108
+ action: 'select' | 'confirm' | 'cancel' | 'execute' | 'copy';
109
+ /** Payload (selected option IDs for choice, command string for execute/copy) */
110
+ value?: string | string[];
111
+ }
112
+ export interface ChatMessage {
113
+ /** Unique message ID */
114
+ id: string;
115
+ /** Message content (supports markdown-like formatting) */
116
+ content: string;
117
+ /** Sender role */
118
+ role: 'user' | 'assistant' | 'system';
119
+ /** Timestamp (ms) */
120
+ timestamp?: number;
121
+ /** Message delivery status */
122
+ status?: 'sending' | 'sent' | 'error';
123
+ /** Astro UX severity — colors the message accent (system messages default to this) */
124
+ severity?: StatusLevel;
125
+ /** Structured blocks rendered below the text content */
126
+ blocks?: ChatBlock[];
127
+ /** Legacy: action buttons (prefer blocks with type:'actions') */
128
+ actions?: Array<{
129
+ label: string;
130
+ onClick: () => void;
131
+ }>;
132
+ }
133
+ export interface ChatPanelProps {
134
+ /** Array of messages */
135
+ messages: ChatMessage[];
136
+ /** Send handler */
137
+ onSend: (text: string) => void;
138
+ /** Is assistant currently generating */
139
+ loading?: boolean;
140
+ /** Input placeholder */
141
+ placeholder?: string;
142
+ /** Panel title */
143
+ title?: string;
144
+ /** Subtitle (e.g. model name) */
145
+ subtitle?: string;
146
+ /** Disable input */
147
+ disabled?: boolean;
148
+ /** Show timestamps */
149
+ showTimestamps?: boolean;
150
+ /** Height of the panel (default: 100%) */
151
+ height?: string | number;
152
+ /** Clear handler (shows clear button when provided) */
153
+ onClear?: () => void;
154
+ /** Handler for interactive block events (choice selection, confirm/cancel, command execute) */
155
+ onBlockEvent?: (event: ChatBlockEvent) => void;
156
+ /** Custom style */
157
+ style?: React.CSSProperties;
158
+ }
159
+ /**
160
+ * Supported response formats from the AI backend.
161
+ * - 'json': Standard JSON (default). Most compatible.
162
+ * - 'yaml': YAML compact format. ~30-40% fewer tokens than JSON for identical data.
163
+ * - 'auto': Auto-detect (tries JSON first, then YAML, then plain text).
164
+ */
165
+ export type ChatResponseFormat = 'json' | 'yaml' | 'auto';
166
+ /** Shape of a parsed AI response (content + optional blocks + severity). */
167
+ export interface ChatResponsePayload {
168
+ content: string;
169
+ severity?: StatusLevel;
170
+ blocks?: ChatBlock[];
171
+ }
172
+ /** Options for creating a customised response parser. */
173
+ export interface ChatResponseParserOptions {
174
+ /**
175
+ * Custom YAML parser function. Receives raw YAML text, returns a parsed object.
176
+ * If not provided, uses the built-in lightweight parser.
177
+ *
178
+ * For production, plug in `js-yaml` or `yaml`:
179
+ * ```ts
180
+ * import yaml from 'js-yaml';
181
+ * const parse = createChatResponseParser({ yamlParser: (s) => yaml.load(s) });
182
+ * ```
183
+ */
184
+ yamlParser?: (text: string) => unknown;
185
+ /** Default format when not specified per-call. Defaults to `'auto'`. */
186
+ defaultFormat?: ChatResponseFormat;
187
+ /** Custom message ID generator. Defaults to `crypto.randomUUID()`. */
188
+ idGenerator?: () => string;
189
+ }
190
+ /**
191
+ * Parse an AI response string into a `ChatMessage`.
192
+ *
193
+ * Supports three strategies (controlled by `format`):
194
+ * - **json**: Parse as JSON. Falls back to plain text on failure.
195
+ * - **yaml**: Parse as YAML (built-in lightweight parser). ~30-40% fewer tokens.
196
+ * - **auto** (default): Try JSON → YAML → plain text.
197
+ *
198
+ * All parsed blocks are sanitized to ensure required arrays exist, preventing
199
+ * runtime crashes from malformed AI output.
200
+ *
201
+ * ## Why YAML?
202
+ * For the same structured response, YAML uses ~30-40% fewer tokens:
203
+ * ```
204
+ * JSON (~180 tokens): {"content":"Battery low.","blocks":[{"type":"alert",...}]}
205
+ * YAML (~120 tokens): content: Battery low.\nblocks:\n - type: alert\n ...
206
+ * ```
207
+ *
208
+ * ## Tool/Function Calling (recommended for production)
209
+ * Pass `CHAT_RESPONSE_TOOL_SCHEMA` in your API call. The model is constrained
210
+ * at the decoding level — zero prompt tokens for the schema.
211
+ *
212
+ * ## Custom YAML parser
213
+ * Use `createChatResponseParser({ yamlParser })` to plug in `js-yaml` or `yaml`.
214
+ *
215
+ * @example
216
+ * ```ts
217
+ * const msg = parseChatResponse(aiOutput); // auto-detect
218
+ * const msg = parseChatResponse(aiOutput, 'yaml'); // force YAML
219
+ * const msg = parseChatResponse(toolCallArgs, 'json'); // from function call
220
+ * ```
221
+ */
222
+ export declare function parseChatResponse(raw: string, format?: ChatResponseFormat, options?: ChatResponseParserOptions): ChatMessage;
223
+ /**
224
+ * Create a pre-configured response parser.
225
+ *
226
+ * Use this to set global defaults (format, YAML parser, ID generator) so you
227
+ * don't have to pass options on every call.
228
+ *
229
+ * @example
230
+ * ```ts
231
+ * import yaml from 'js-yaml';
232
+ * import { createChatResponseParser } from '@zendir/ui';
233
+ *
234
+ * // Create once at app init
235
+ * export const parseAI = createChatResponseParser({
236
+ * yamlParser: (s) => yaml.load(s),
237
+ * defaultFormat: 'yaml',
238
+ * });
239
+ *
240
+ * // Use everywhere
241
+ * const msg = parseAI(aiOutput);
242
+ * ```
243
+ */
244
+ export declare function createChatResponseParser(options?: ChatResponseParserOptions): (raw: string, format?: ChatResponseFormat) => ChatMessage;
245
+ /**
246
+ * Lightweight types for MCP tool results.
247
+ * These mirror the MCP specification without requiring the full SDK as a dependency.
248
+ * @see https://modelcontextprotocol.io/specification/2025-11-25
249
+ */
250
+ /** A single content block in an MCP tool result. */
251
+ export interface McpToolContent {
252
+ type: 'text' | 'image' | 'resource';
253
+ text?: string;
254
+ data?: string;
255
+ mimeType?: string;
256
+ resource?: {
257
+ uri: string;
258
+ text?: string;
259
+ mimeType?: string;
260
+ };
261
+ }
262
+ /** MCP tool call result (matches `CallToolResult` from the spec). */
263
+ export interface McpToolResult {
264
+ content: McpToolContent[];
265
+ isError?: boolean;
266
+ _meta?: Record<string, unknown>;
267
+ }
268
+ /**
269
+ * Convert an MCP tool call result into a `ChatMessage` with structured blocks.
270
+ *
271
+ * Handles three patterns automatically:
272
+ * 1. **Structured JSON/YAML** — Tool returns text matching `ChatResponsePayload` → parsed into typed blocks
273
+ * 2. **Plain text** — Rendered as a simple assistant message with tool metadata
274
+ * 3. **Error** — Rendered as a critical alert block
275
+ *
276
+ * This bridges the MCP protocol with ChatPanel's block rendering system, so any
277
+ * MCP server tool can produce rich operator UIs without custom rendering code.
278
+ *
279
+ * @example
280
+ * ```ts
281
+ * import { parseMcpToolResult } from '@zendir/ui/react';
282
+ *
283
+ * // With use-mcp hook
284
+ * const { callTool } = useMcp({ url: 'https://ops-server.example.com/mcp' });
285
+ * const result = await callTool('get_satellite_health', { id: 'SAT-001' });
286
+ * const msg = parseMcpToolResult('get_satellite_health', result);
287
+ * setMessages(prev => [...prev, msg]);
288
+ *
289
+ * // With @modelcontextprotocol/sdk
290
+ * const result = await mcpClient.callTool({ name: 'get_satellite_health', arguments: { id: 'SAT-001' } });
291
+ * const msg = parseMcpToolResult('get_satellite_health', result);
292
+ * ```
293
+ */
294
+ export declare function parseMcpToolResult(toolName: string, result: McpToolResult, options?: {
295
+ idGenerator?: () => string;
296
+ }): ChatMessage;
297
+ /**
298
+ * MCP server tool definition for the `respond_to_operator` tool.
299
+ *
300
+ * Register this on your MCP server to enable structured ChatPanel responses.
301
+ * The schema is identical to `CHAT_RESPONSE_TOOL_SCHEMA` but formatted for the
302
+ * MCP `server.tool()` registration API.
303
+ *
304
+ * Compatible with: `@modelcontextprotocol/sdk`, any MCP server implementation.
305
+ *
306
+ * @example
307
+ * ```ts
308
+ * import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
309
+ * import { CHAT_RESPONSE_MCP_TOOL } from '@zendir/ui';
310
+ *
311
+ * const server = new McpServer({ name: 'ops-assistant', version: '1.0.0' });
312
+ *
313
+ * server.tool(
314
+ * CHAT_RESPONSE_MCP_TOOL.name,
315
+ * CHAT_RESPONSE_MCP_TOOL.description,
316
+ * CHAT_RESPONSE_MCP_TOOL.inputSchema,
317
+ * async ({ content, severity, blocks }) => ({
318
+ * content: [{ type: 'text', text: JSON.stringify({ content, severity, blocks }) }],
319
+ * })
320
+ * );
321
+ * ```
322
+ */
323
+ export declare const CHAT_RESPONSE_MCP_TOOL: {
324
+ readonly name: "respond_to_operator";
325
+ readonly description: "Respond to the spacecraft operator with text content and optional structured UI blocks (alerts, telemetry, progress, tables, choices, confirmations, commands, key-value metadata). Use the Astro UX 6-level status system: normal, standby, caution, serious, critical, off.";
326
+ readonly inputSchema: {
327
+ readonly type: "object";
328
+ readonly required: readonly ["content"];
329
+ readonly properties: {
330
+ readonly content: {
331
+ readonly type: "string";
332
+ readonly description: "Plain-text or markdown response shown to the operator.";
333
+ };
334
+ readonly severity: {
335
+ readonly type: "string";
336
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
337
+ };
338
+ readonly blocks: {
339
+ readonly type: "array";
340
+ readonly description: "Structured UI blocks rendered below the text content.";
341
+ readonly items: {
342
+ readonly type: "object";
343
+ readonly required: readonly ["type"];
344
+ readonly properties: {
345
+ readonly type: {
346
+ readonly type: "string";
347
+ readonly enum: readonly ["alert", "telemetry", "progress", "table", "choice", "confirm", "command", "kv"];
348
+ };
349
+ readonly status: {
350
+ readonly type: "string";
351
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
352
+ };
353
+ readonly title: {
354
+ readonly type: "string";
355
+ };
356
+ readonly detail: {
357
+ readonly type: "string";
358
+ };
359
+ readonly label: {
360
+ readonly type: "string";
361
+ };
362
+ readonly value: {
363
+ readonly type: "number";
364
+ };
365
+ readonly id: {
366
+ readonly type: "string";
367
+ };
368
+ readonly command: {
369
+ readonly type: "string";
370
+ };
371
+ readonly executable: {
372
+ readonly type: "boolean";
373
+ };
374
+ readonly items: {
375
+ readonly type: "array";
376
+ readonly items: {
377
+ readonly type: "object";
378
+ readonly properties: {
379
+ readonly label: {
380
+ readonly type: "string";
381
+ };
382
+ readonly value: {};
383
+ readonly unit: {
384
+ readonly type: "string";
385
+ };
386
+ readonly status: {
387
+ readonly type: "string";
388
+ };
389
+ };
390
+ };
391
+ };
392
+ readonly columns: {
393
+ readonly type: "array";
394
+ readonly items: {
395
+ readonly type: "string";
396
+ };
397
+ };
398
+ readonly rows: {
399
+ readonly type: "array";
400
+ readonly items: {
401
+ readonly type: "array";
402
+ };
403
+ };
404
+ readonly options: {
405
+ readonly type: "array";
406
+ readonly items: {
407
+ readonly type: "object";
408
+ readonly properties: {
409
+ readonly id: {
410
+ readonly type: "string";
411
+ };
412
+ readonly label: {
413
+ readonly type: "string";
414
+ };
415
+ readonly description: {
416
+ readonly type: "string";
417
+ };
418
+ readonly status: {
419
+ readonly type: "string";
420
+ };
421
+ };
422
+ };
423
+ };
424
+ readonly pairs: {
425
+ readonly type: "array";
426
+ readonly items: {
427
+ readonly type: "object";
428
+ readonly properties: {
429
+ readonly key: {
430
+ readonly type: "string";
431
+ };
432
+ readonly value: {};
433
+ readonly mono: {
434
+ readonly type: "boolean";
435
+ };
436
+ };
437
+ };
438
+ };
439
+ };
440
+ };
441
+ };
442
+ };
443
+ };
444
+ };
445
+ /**
446
+ * OpenAI-compatible function/tool schema for structured chat responses.
447
+ *
448
+ * Pass this as a tool definition in your API call. The model is constrained
449
+ * to emit valid JSON matching this schema — no prompt engineering required.
450
+ *
451
+ * Works with: OpenAI (Structured Outputs / function calling), Anthropic (Tool Use),
452
+ * Google Gemini (Function Calling), Mistral, Cohere, and any OpenAI-compatible API.
453
+ *
454
+ * @example
455
+ * ```ts
456
+ * // OpenAI
457
+ * tools: [{ type: 'function', function: CHAT_RESPONSE_TOOL_SCHEMA }]
458
+ *
459
+ * // Anthropic
460
+ * tools: [{ name: CHAT_RESPONSE_TOOL_SCHEMA.name,
461
+ * description: CHAT_RESPONSE_TOOL_SCHEMA.description,
462
+ * input_schema: CHAT_RESPONSE_TOOL_SCHEMA.parameters }]
463
+ *
464
+ * // Google Gemini
465
+ * tools: [{ functionDeclarations: [CHAT_RESPONSE_TOOL_SCHEMA] }]
466
+ * ```
467
+ */
468
+ export declare const CHAT_RESPONSE_TOOL_SCHEMA: {
469
+ readonly name: "respond_to_operator";
470
+ readonly description: "Respond to the spacecraft operator with text content and optional structured UI blocks (alerts, telemetry, progress, tables, choices, confirmations, commands, key-value metadata). Use the Astro UX 6-level status system: normal, standby, caution, serious, critical, off.";
471
+ readonly parameters: {
472
+ readonly type: "object";
473
+ readonly required: readonly ["content"];
474
+ readonly properties: {
475
+ readonly content: {
476
+ readonly type: "string";
477
+ readonly description: "Plain-text or markdown response shown to the operator.";
478
+ };
479
+ readonly severity: {
480
+ readonly type: "string";
481
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
482
+ readonly description: "Overall message severity. Drives the accent color and icon.";
483
+ };
484
+ readonly blocks: {
485
+ readonly type: "array";
486
+ readonly description: "Structured UI blocks rendered below the text content.";
487
+ readonly items: {
488
+ readonly type: "object";
489
+ readonly required: readonly ["type"];
490
+ readonly properties: {
491
+ readonly type: {
492
+ readonly type: "string";
493
+ readonly enum: readonly ["alert", "telemetry", "progress", "table", "choice", "confirm", "command", "kv"];
494
+ };
495
+ readonly status: {
496
+ readonly type: "string";
497
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
498
+ };
499
+ readonly title: {
500
+ readonly type: "string";
501
+ };
502
+ readonly detail: {
503
+ readonly type: "string";
504
+ };
505
+ readonly items: {
506
+ readonly type: "array";
507
+ readonly items: {
508
+ readonly type: "object";
509
+ readonly properties: {
510
+ readonly label: {
511
+ readonly type: "string";
512
+ };
513
+ readonly value: {};
514
+ readonly unit: {
515
+ readonly type: "string";
516
+ };
517
+ readonly status: {
518
+ readonly type: "string";
519
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
520
+ };
521
+ };
522
+ };
523
+ };
524
+ readonly label: {
525
+ readonly type: "string";
526
+ };
527
+ readonly value: {
528
+ readonly type: "number";
529
+ };
530
+ readonly max: {
531
+ readonly type: "number";
532
+ };
533
+ readonly columns: {
534
+ readonly type: "array";
535
+ readonly items: {
536
+ readonly type: "string";
537
+ };
538
+ };
539
+ readonly rows: {
540
+ readonly type: "array";
541
+ readonly items: {
542
+ readonly type: "array";
543
+ };
544
+ };
545
+ readonly id: {
546
+ readonly type: "string";
547
+ };
548
+ readonly multiple: {
549
+ readonly type: "boolean";
550
+ };
551
+ readonly options: {
552
+ readonly type: "array";
553
+ readonly items: {
554
+ readonly type: "object";
555
+ readonly properties: {
556
+ readonly id: {
557
+ readonly type: "string";
558
+ };
559
+ readonly label: {
560
+ readonly type: "string";
561
+ };
562
+ readonly description: {
563
+ readonly type: "string";
564
+ };
565
+ readonly status: {
566
+ readonly type: "string";
567
+ readonly enum: readonly ["normal", "standby", "caution", "serious", "critical", "off"];
568
+ };
569
+ readonly disabled: {
570
+ readonly type: "boolean";
571
+ };
572
+ };
573
+ };
574
+ };
575
+ readonly confirmLabel: {
576
+ readonly type: "string";
577
+ };
578
+ readonly cancelLabel: {
579
+ readonly type: "string";
580
+ };
581
+ readonly language: {
582
+ readonly type: "string";
583
+ };
584
+ readonly command: {
585
+ readonly type: "string";
586
+ };
587
+ readonly executable: {
588
+ readonly type: "boolean";
589
+ };
590
+ readonly pairs: {
591
+ readonly type: "array";
592
+ readonly items: {
593
+ readonly type: "object";
594
+ readonly properties: {
595
+ readonly key: {
596
+ readonly type: "string";
597
+ };
598
+ readonly value: {};
599
+ readonly mono: {
600
+ readonly type: "boolean";
601
+ };
602
+ };
603
+ };
604
+ };
605
+ };
606
+ };
607
+ };
608
+ };
609
+ };
610
+ };
611
+ /**
612
+ * JSON system prompt snippet — instructs the LLM to respond with JSON.
613
+ * Include in your system prompt for the simplest integration path.
614
+ */
615
+ export declare const CHAT_RESPONSE_JSON_PROMPT: "When reporting telemetry, status, or alerts, respond with a JSON object:\n\n{\n \"content\": \"Plain text explanation (supports **markdown**).\",\n \"severity\": \"normal\" | \"standby\" | \"caution\" | \"serious\" | \"critical\" | \"off\",\n \"blocks\": [\n { \"type\": \"alert\", \"status\": \"caution\", \"title\": \"Alert Title\", \"detail\": \"Description\" },\n { \"type\": \"telemetry\", \"title\": \"Subsystem\", \"items\": [{ \"label\": \"Temp\", \"value\": 72, \"unit\": \"\u00B0C\", \"status\": \"normal\" }] },\n { \"type\": \"progress\", \"label\": \"Operation\", \"value\": 75, \"max\": 100, \"status\": \"normal\" },\n { \"type\": \"table\", \"title\": \"Data\", \"columns\": [\"Col1\", \"Col2\"], \"rows\": [[\"val1\", \"val2\"]] },\n { \"type\": \"choice\", \"id\": \"unique-id\", \"title\": \"Pick one\", \"options\": [{ \"id\": \"opt1\", \"label\": \"Option 1\" }] },\n { \"type\": \"confirm\", \"id\": \"unique-id\", \"status\": \"caution\", \"title\": \"Confirm action\" },\n { \"type\": \"command\", \"id\": \"cmd-id\", \"command\": \"CMD SAT-001 EXECUTE\", \"executable\": true },\n { \"type\": \"kv\", \"title\": \"Context\", \"pairs\": [{ \"key\": \"Spacecraft\", \"value\": \"SAT-001\" }] }\n ]\n}\n\nStatus levels (Astro UX): normal (nominal), standby (idle), caution (approaching limit), serious (at limit), critical (exceeding limit), off (no data).\nAlways include \"content\". Only include \"blocks\" when structured data helps the operator.";
616
+ /**
617
+ * YAML system prompt snippet — instructs the LLM to respond in compact YAML
618
+ * instead of JSON. ~30-40% fewer output tokens for the same data.
619
+ */
620
+ export declare const CHAT_RESPONSE_YAML_PROMPT: "Respond in YAML format (not JSON). Use this structure:\n\ncontent: Your plain-text or markdown response here.\nseverity: normal\nblocks:\n - type: alert\n status: caution\n title: Alert Title\n detail: Optional detail\n - type: telemetry\n title: Subsystem\n items:\n - label: Parameter\n value: 42.5\n unit: \"\u00B0C\"\n status: normal\n - type: progress\n label: Operation\n value: 75\n max: 100\n status: normal\n - type: choice\n id: unique-id\n title: Pick one\n options:\n - id: opt1\n label: Option 1\n status: normal\n - type: command\n id: cmd-id\n language: CCSDS-TC\n command: CMD SAT-001 EXECUTE\n executable: true\n - type: kv\n title: Context\n pairs:\n - key: Spacecraft\n value: SAT-001\n\nStatus levels (Astro UX): normal, standby, caution, serious, critical, off.\nAlways include \"content\". Only include \"blocks\" when structured data helps the operator.";
621
+ /**
622
+ * Astro UX status rules snippet — append to any system prompt (JSON or YAML).
623
+ * Gives the LLM concrete thresholds for assigning status levels.
624
+ */
625
+ export declare const CHAT_STATUS_RULES_PROMPT: "Assign status levels using these thresholds:\n- Battery: normal >50%, standby 30-50%, caution 20-30%, serious 10-20%, critical <10%\n- Temperature: normal <70\u00B0C, caution 70-80\u00B0C, serious 80-85\u00B0C, critical >85\u00B0C\n- Signal: normal >-80 dBm, caution -80 to -90, serious -90 to -95, critical <-95 dBm\n- Memory/Storage: normal <70%, caution 70-85%, serious 85-95%, critical >95%\n\nGeneral rules:\n- \"normal\" \u2192 Operating within nominal parameters\n- \"standby\" \u2192 Idle, waiting, or scheduled\n- \"caution\" \u2192 Approaching a limit\n- \"serious\" \u2192 At or exceeding a soft limit\n- \"critical\" \u2192 Exceeding hard limit, loss of signal, or failure\n- \"off\" \u2192 Powered down, no data";
626
+ export declare const ChatPanel: React.NamedExoticComponent<ChatPanelProps>;
627
+ export default ChatPanel;