@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,293 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { memo, useState, useRef, useEffect } from "react";
3
+ import { PRESET_COLORS } from "../context/DisplaySettingsContext.js";
4
+ import { AstroIcon } from "./AstroIcon.js";
5
+ import { useTheme } from "../theme/ThemeProvider.js";
6
+ const COLOR_SWATCHES = Object.entries(PRESET_COLORS).map(([key, color]) => ({
7
+ key,
8
+ color,
9
+ label: key.charAt(0).toUpperCase() + key.slice(1)
10
+ }));
11
+ const TargetToggle = memo(function TargetToggle2({ value, onChange, tokens }) {
12
+ const targets = [
13
+ { key: "both", label: "Both" },
14
+ { key: "accent", label: "Accent" },
15
+ { key: "glass", label: "Glass" }
16
+ ];
17
+ return /* @__PURE__ */ jsx("div", { style: {
18
+ display: "flex",
19
+ gap: 2,
20
+ padding: 2,
21
+ backgroundColor: "rgba(255,255,255,0.05)",
22
+ borderRadius: tokens.borderRadius.sm
23
+ }, children: targets.map(({ key, label }) => /* @__PURE__ */ jsx(
24
+ "button",
25
+ {
26
+ onClick: () => onChange(key),
27
+ style: {
28
+ flex: 1,
29
+ padding: "4px 8px",
30
+ border: "none",
31
+ borderRadius: tokens.borderRadius.sm - 2,
32
+ backgroundColor: value === key ? "rgba(255,255,255,0.15)" : "transparent",
33
+ color: value === key ? tokens.colors.text.primary : tokens.colors.text.tertiary,
34
+ fontSize: "0.625rem",
35
+ // 10px in rem
36
+ fontWeight: value === key ? 600 : 400,
37
+ cursor: "pointer",
38
+ transition: "all 0.15s ease"
39
+ },
40
+ children: label
41
+ },
42
+ key
43
+ )) });
44
+ });
45
+ const ColorGrid = memo(function ColorGrid2({ selectedColor, onSelect, tokens: _tokens }) {
46
+ return /* @__PURE__ */ jsx("div", { style: {
47
+ display: "grid",
48
+ gridTemplateColumns: "repeat(6, 1fr)",
49
+ gap: 4
50
+ }, children: COLOR_SWATCHES.map(({ key, color, label }) => {
51
+ const isSelected = selectedColor.toLowerCase() === color.toLowerCase();
52
+ return /* @__PURE__ */ jsx(
53
+ "button",
54
+ {
55
+ onClick: () => onSelect(color),
56
+ "aria-label": `Select ${label}`,
57
+ title: label,
58
+ style: {
59
+ width: 24,
60
+ height: 24,
61
+ padding: 0,
62
+ border: isSelected ? "2px solid white" : "1px solid rgba(255,255,255,0.2)",
63
+ borderRadius: 4,
64
+ backgroundColor: color,
65
+ cursor: "pointer",
66
+ transition: "all 0.15s ease",
67
+ transform: isSelected ? "scale(1.1)" : "scale(1)",
68
+ boxShadow: isSelected ? `0 0 8px ${color}80` : "none"
69
+ },
70
+ onMouseEnter: (e) => {
71
+ if (!isSelected) {
72
+ e.currentTarget.style.transform = "scale(1.15)";
73
+ e.currentTarget.style.borderColor = "rgba(255,255,255,0.5)";
74
+ }
75
+ },
76
+ onMouseLeave: (e) => {
77
+ e.currentTarget.style.transform = isSelected ? "scale(1.1)" : "scale(1)";
78
+ e.currentTarget.style.borderColor = isSelected ? "white" : "rgba(255,255,255,0.2)";
79
+ }
80
+ },
81
+ key
82
+ );
83
+ }) });
84
+ });
85
+ const ColorPickerPanel = memo(function ColorPickerPanel2({
86
+ accentColor,
87
+ glassTint,
88
+ colorTarget,
89
+ onAccentChange,
90
+ onGlassTintChange,
91
+ onTargetChange,
92
+ onColorSelect,
93
+ compact = true,
94
+ className = ""
95
+ }) {
96
+ const { tokens, theme } = useTheme();
97
+ const [isOpen, setIsOpen] = useState(false);
98
+ const panelRef = useRef(null);
99
+ const triggerRef = useRef(null);
100
+ const isTransparentTheme = theme === "transparent" || theme === "transparent-bold" || theme === "transparent-minimal";
101
+ const displayColor = colorTarget === "glass" ? glassTint : accentColor;
102
+ const handleColorSelect = (color) => {
103
+ if (onColorSelect) {
104
+ onColorSelect(color);
105
+ } else {
106
+ switch (colorTarget) {
107
+ case "accent":
108
+ onAccentChange(color);
109
+ break;
110
+ case "glass":
111
+ onGlassTintChange(color);
112
+ break;
113
+ case "both":
114
+ default:
115
+ onAccentChange(color);
116
+ onGlassTintChange(color);
117
+ break;
118
+ }
119
+ }
120
+ };
121
+ useEffect(() => {
122
+ const handleClickOutside = (event) => {
123
+ if (panelRef.current && !panelRef.current.contains(event.target) && triggerRef.current && !triggerRef.current.contains(event.target)) {
124
+ setIsOpen(false);
125
+ }
126
+ };
127
+ if (isOpen) {
128
+ document.addEventListener("mousedown", handleClickOutside);
129
+ return () => document.removeEventListener("mousedown", handleClickOutside);
130
+ }
131
+ }, [isOpen]);
132
+ useEffect(() => {
133
+ const handleEscape = (event) => {
134
+ var _a;
135
+ if (event.key === "Escape") {
136
+ setIsOpen(false);
137
+ (_a = triggerRef.current) == null ? void 0 : _a.focus();
138
+ }
139
+ };
140
+ if (isOpen) {
141
+ document.addEventListener("keydown", handleEscape);
142
+ return () => document.removeEventListener("keydown", handleEscape);
143
+ }
144
+ }, [isOpen]);
145
+ if (compact) {
146
+ return /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, className, children: [
147
+ /* @__PURE__ */ jsx(
148
+ "button",
149
+ {
150
+ ref: triggerRef,
151
+ onClick: () => setIsOpen(!isOpen),
152
+ "aria-label": "Open color picker",
153
+ "aria-expanded": isOpen,
154
+ style: {
155
+ display: "flex",
156
+ alignItems: "center",
157
+ justifyContent: "center",
158
+ width: 36,
159
+ height: 36,
160
+ padding: 0,
161
+ border: "2px solid rgba(255,255,255,0.3)",
162
+ borderRadius: tokens.borderRadius.md,
163
+ backgroundColor: displayColor,
164
+ cursor: "pointer",
165
+ transition: "all 0.15s ease",
166
+ boxShadow: isOpen ? `0 0 12px ${displayColor}60` : "none"
167
+ },
168
+ onMouseEnter: (e) => {
169
+ e.currentTarget.style.borderColor = "rgba(255,255,255,0.5)";
170
+ e.currentTarget.style.transform = "scale(1.05)";
171
+ },
172
+ onMouseLeave: (e) => {
173
+ e.currentTarget.style.borderColor = "rgba(255,255,255,0.3)";
174
+ e.currentTarget.style.transform = "scale(1)";
175
+ },
176
+ children: /* @__PURE__ */ jsx(AstroIcon, { name: "palette", size: 16, color: "white" })
177
+ }
178
+ ),
179
+ isOpen && /* @__PURE__ */ jsxs(
180
+ "div",
181
+ {
182
+ ref: panelRef,
183
+ style: {
184
+ position: "absolute",
185
+ top: "100%",
186
+ right: 0,
187
+ marginTop: 8,
188
+ padding: 12,
189
+ backgroundColor: tokens.colors.background.elevated,
190
+ border: `1px solid ${tokens.colors.border.default}`,
191
+ borderRadius: tokens.borderRadius.lg,
192
+ boxShadow: tokens.shadows.lg,
193
+ zIndex: 1e3,
194
+ minWidth: 180
195
+ },
196
+ children: [
197
+ isTransparentTheme && /* @__PURE__ */ jsxs("div", { style: { marginBottom: 12 }, children: [
198
+ /* @__PURE__ */ jsx("div", { style: {
199
+ fontSize: "0.625rem",
200
+ // 10px in rem
201
+ fontWeight: 500,
202
+ color: tokens.colors.text.tertiary,
203
+ marginBottom: 6,
204
+ textTransform: "uppercase",
205
+ letterSpacing: "0.05em"
206
+ }, children: "Apply to" }),
207
+ /* @__PURE__ */ jsx(
208
+ TargetToggle,
209
+ {
210
+ value: colorTarget,
211
+ onChange: onTargetChange,
212
+ tokens
213
+ }
214
+ )
215
+ ] }),
216
+ /* @__PURE__ */ jsxs("div", { children: [
217
+ /* @__PURE__ */ jsx("div", { style: {
218
+ fontSize: "0.625rem",
219
+ // 10px in rem
220
+ fontWeight: 500,
221
+ color: tokens.colors.text.tertiary,
222
+ marginBottom: 6,
223
+ textTransform: "uppercase",
224
+ letterSpacing: "0.05em"
225
+ }, children: colorTarget === "glass" ? "Glass Tint" : colorTarget === "accent" ? "Accent Color" : "Color" }),
226
+ /* @__PURE__ */ jsx(
227
+ ColorGrid,
228
+ {
229
+ selectedColor: displayColor,
230
+ onSelect: handleColorSelect,
231
+ tokens
232
+ }
233
+ )
234
+ ] }),
235
+ isTransparentTheme && colorTarget === "both" && accentColor !== glassTint && /* @__PURE__ */ jsxs("div", { style: {
236
+ marginTop: 12,
237
+ paddingTop: 12,
238
+ borderTop: `1px solid ${tokens.colors.border.muted}`,
239
+ display: "flex",
240
+ gap: 8,
241
+ fontSize: "0.625rem",
242
+ // 10px in rem
243
+ color: tokens.colors.text.tertiary
244
+ }, children: [
245
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 4 }, children: [
246
+ /* @__PURE__ */ jsx("span", { style: {
247
+ width: 12,
248
+ height: 12,
249
+ borderRadius: 2,
250
+ backgroundColor: accentColor,
251
+ border: "1px solid rgba(255,255,255,0.2)"
252
+ } }),
253
+ "Accent"
254
+ ] }),
255
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 4 }, children: [
256
+ /* @__PURE__ */ jsx("span", { style: {
257
+ width: 12,
258
+ height: 12,
259
+ borderRadius: 2,
260
+ backgroundColor: glassTint,
261
+ border: "1px solid rgba(255,255,255,0.2)"
262
+ } }),
263
+ "Glass"
264
+ ] })
265
+ ] })
266
+ ]
267
+ }
268
+ )
269
+ ] });
270
+ }
271
+ return /* @__PURE__ */ jsxs("div", { className, style: { display: "flex", flexDirection: "column", gap: 12 }, children: [
272
+ isTransparentTheme && /* @__PURE__ */ jsx(
273
+ TargetToggle,
274
+ {
275
+ value: colorTarget,
276
+ onChange: onTargetChange,
277
+ tokens
278
+ }
279
+ ),
280
+ /* @__PURE__ */ jsx(
281
+ ColorGrid,
282
+ {
283
+ selectedColor: displayColor,
284
+ onSelect: handleColorSelect,
285
+ tokens
286
+ }
287
+ )
288
+ ] });
289
+ });
290
+ export {
291
+ ColorPickerPanel
292
+ };
293
+ //# sourceMappingURL=ColorPickerPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPickerPanel.js","sources":["../../../src/react/core/ColorPickerPanel.tsx"],"sourcesContent":["/**\n * @zendir/ui - ColorPickerPanel Component\n * \n * Compact color picker with preset colors and target selector.\n * Used in AppBar for selecting accent and glass tint colors.\n * \n * Features:\n * - Preset color swatches grid\n * - Target toggle: Both | Accent Only | Glass Only\n * - Popover design with smooth animations\n * - Keyboard accessible\n * \n * @example\n * ```tsx\n * <ColorPickerPanel\n * accentColor=\"#8b5cf6\"\n * glassTint=\"#8b5cf6\"\n * colorTarget=\"both\"\n * onAccentChange={setAccentColor}\n * onGlassTintChange={setGlassTint}\n * onTargetChange={setColorTarget}\n * />\n * ```\n */\n\nimport React, { memo, useState, useRef, useEffect } from 'react';\nimport { useTheme } from '../theme';\nimport { PRESET_COLORS, type ColorTarget } from '../context/DisplaySettingsContext';\nimport { AstroIcon } from './AstroIcon';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface ColorPickerPanelProps {\n /** Current accent color */\n accentColor: string;\n \n /** Current glass tint color */\n glassTint: string;\n \n /** Which color to affect: both, accent, or glass */\n colorTarget: ColorTarget;\n \n /** Callback when accent color changes */\n onAccentChange: (color: string) => void;\n \n /** Callback when glass tint changes */\n onGlassTintChange: (color: string) => void;\n \n /** Callback when target changes */\n onTargetChange: (target: ColorTarget) => void;\n \n /** Callback when any color is selected (respects target) */\n onColorSelect?: (color: string) => void;\n \n /** Compact mode - show only trigger button */\n compact?: boolean;\n \n /** Custom className */\n className?: string;\n}\n\n// =============================================================================\n// Color Swatches\n// =============================================================================\n\nconst COLOR_SWATCHES = Object.entries(PRESET_COLORS).map(([key, color]) => ({\n key,\n color,\n label: key.charAt(0).toUpperCase() + key.slice(1),\n}));\n\n// =============================================================================\n// Target Toggle Component\n// =============================================================================\n\ninterface TargetToggleProps {\n value: ColorTarget;\n onChange: (target: ColorTarget) => void;\n tokens: any;\n}\n\nconst TargetToggle = memo(function TargetToggle({ value, onChange, tokens }: TargetToggleProps) {\n const targets: { key: ColorTarget; label: string }[] = [\n { key: 'both', label: 'Both' },\n { key: 'accent', label: 'Accent' },\n { key: 'glass', label: 'Glass' },\n ];\n \n return (\n <div style={{\n display: 'flex',\n gap: 2,\n padding: 2,\n backgroundColor: 'rgba(255,255,255,0.05)',\n borderRadius: tokens.borderRadius.sm,\n }}>\n {targets.map(({ key, label }) => (\n <button\n key={key}\n onClick={() => onChange(key)}\n style={{\n flex: 1,\n padding: '4px 8px',\n border: 'none',\n borderRadius: tokens.borderRadius.sm - 2,\n backgroundColor: value === key ? 'rgba(255,255,255,0.15)' : 'transparent',\n color: value === key ? tokens.colors.text.primary : tokens.colors.text.tertiary,\n fontSize: '0.625rem', // 10px in rem\n fontWeight: value === key ? 600 : 400,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n }}\n >\n {label}\n </button>\n ))}\n </div>\n );\n});\n\n// =============================================================================\n// Color Grid Component\n// =============================================================================\n\ninterface ColorGridProps {\n selectedColor: string;\n onSelect: (color: string) => void;\n tokens: any;\n}\n\nconst ColorGrid = memo(function ColorGrid({ selectedColor, onSelect, tokens: _tokens }: ColorGridProps) {\n return (\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(6, 1fr)',\n gap: 4,\n }}>\n {COLOR_SWATCHES.map(({ key, color, label }) => {\n const isSelected = selectedColor.toLowerCase() === color.toLowerCase();\n \n return (\n <button\n key={key}\n onClick={() => onSelect(color)}\n aria-label={`Select ${label}`}\n title={label}\n style={{\n width: 24,\n height: 24,\n padding: 0,\n border: isSelected ? '2px solid white' : '1px solid rgba(255,255,255,0.2)',\n borderRadius: 4,\n backgroundColor: color,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n transform: isSelected ? 'scale(1.1)' : 'scale(1)',\n boxShadow: isSelected ? `0 0 8px ${color}80` : 'none',\n }}\n onMouseEnter={(e) => {\n if (!isSelected) {\n e.currentTarget.style.transform = 'scale(1.15)';\n e.currentTarget.style.borderColor = 'rgba(255,255,255,0.5)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = isSelected ? 'scale(1.1)' : 'scale(1)';\n e.currentTarget.style.borderColor = isSelected ? 'white' : 'rgba(255,255,255,0.2)';\n }}\n />\n );\n })}\n </div>\n );\n});\n\n// =============================================================================\n// ColorPickerPanel Component\n// =============================================================================\n\nexport const ColorPickerPanel = memo(function ColorPickerPanel({\n accentColor,\n glassTint,\n colorTarget,\n onAccentChange,\n onGlassTintChange,\n onTargetChange,\n onColorSelect,\n compact = true,\n className = '',\n}: ColorPickerPanelProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const [isOpen, setIsOpen] = useState(false);\n const panelRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n \n const isTransparentTheme = theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n \n // Current display color based on target\n const displayColor = colorTarget === 'glass' ? glassTint : accentColor;\n \n // Handle color selection\n const handleColorSelect = (color: string) => {\n if (onColorSelect) {\n onColorSelect(color);\n } else {\n switch (colorTarget) {\n case 'accent':\n onAccentChange(color);\n break;\n case 'glass':\n onGlassTintChange(color);\n break;\n case 'both':\n default:\n onAccentChange(color);\n onGlassTintChange(color);\n break;\n }\n }\n };\n \n // Close panel when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n panelRef.current &&\n !panelRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n };\n \n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [isOpen]);\n \n // Close on escape key\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n };\n \n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [isOpen]);\n \n if (compact) {\n return (\n <div style={{ position: 'relative' }} className={className}>\n {/* Trigger Button */}\n <button\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n aria-label=\"Open color picker\"\n aria-expanded={isOpen}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 36,\n height: 36,\n padding: 0,\n border: '2px solid rgba(255,255,255,0.3)',\n borderRadius: tokens.borderRadius.md,\n backgroundColor: displayColor,\n cursor: 'pointer',\n transition: 'all 0.15s ease',\n boxShadow: isOpen ? `0 0 12px ${displayColor}60` : 'none',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.borderColor = 'rgba(255,255,255,0.5)';\n e.currentTarget.style.transform = 'scale(1.05)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = 'rgba(255,255,255,0.3)';\n e.currentTarget.style.transform = 'scale(1)';\n }}\n >\n <AstroIcon name=\"palette\" size={16} color=\"white\" />\n </button>\n \n {/* Popover Panel */}\n {isOpen && (\n <div\n ref={panelRef}\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: 8,\n padding: 12,\n backgroundColor: tokens.colors.background.elevated,\n border: `1px solid ${tokens.colors.border.default}`,\n borderRadius: tokens.borderRadius.lg,\n boxShadow: tokens.shadows.lg,\n zIndex: 1000,\n minWidth: 180,\n }}\n >\n {/* Target Toggle - only show for transparent themes */}\n {isTransparentTheme && (\n <div style={{ marginBottom: 12 }}>\n <div style={{\n fontSize: '0.625rem', // 10px in rem\n fontWeight: 500,\n color: tokens.colors.text.tertiary,\n marginBottom: 6,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}>\n Apply to\n </div>\n <TargetToggle\n value={colorTarget}\n onChange={onTargetChange}\n tokens={tokens}\n />\n </div>\n )}\n \n {/* Color Grid */}\n <div>\n <div style={{\n fontSize: '0.625rem', // 10px in rem\n fontWeight: 500,\n color: tokens.colors.text.tertiary,\n marginBottom: 6,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n }}>\n {colorTarget === 'glass' ? 'Glass Tint' : colorTarget === 'accent' ? 'Accent Color' : 'Color'}\n </div>\n <ColorGrid\n selectedColor={displayColor}\n onSelect={handleColorSelect}\n tokens={tokens}\n />\n </div>\n \n {/* Current Colors Display */}\n {isTransparentTheme && colorTarget === 'both' && accentColor !== glassTint && (\n <div style={{\n marginTop: 12,\n paddingTop: 12,\n borderTop: `1px solid ${tokens.colors.border.muted}`,\n display: 'flex',\n gap: 8,\n fontSize: '0.625rem', // 10px in rem\n color: tokens.colors.text.tertiary,\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{\n width: 12,\n height: 12,\n borderRadius: 2,\n backgroundColor: accentColor,\n border: '1px solid rgba(255,255,255,0.2)',\n }} />\n Accent\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{\n width: 12,\n height: 12,\n borderRadius: 2,\n backgroundColor: glassTint,\n border: '1px solid rgba(255,255,255,0.2)',\n }} />\n Glass\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n \n // Expanded/inline mode\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {isTransparentTheme && (\n <TargetToggle\n value={colorTarget}\n onChange={onTargetChange}\n tokens={tokens}\n />\n )}\n <ColorGrid\n selectedColor={displayColor}\n onSelect={handleColorSelect}\n tokens={tokens}\n />\n </div>\n );\n});\n\nexport default ColorPickerPanel;\n"],"names":["TargetToggle","ColorGrid","ColorPickerPanel"],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { default as React } from 'react';
2
+
3
+ export type CommandParamType = 'int' | 'uint' | 'float' | 'string' | 'boolean' | 'enum' | 'hex' | 'block';
4
+ export interface CommandParameter {
5
+ /** Parameter name */
6
+ name: string;
7
+ /** Parameter type */
8
+ type: CommandParamType;
9
+ /** Description */
10
+ description?: string;
11
+ /** Default value */
12
+ default?: unknown;
13
+ /** Whether parameter is required (default: true) */
14
+ required?: boolean;
15
+ /** Minimum value (for numeric types) */
16
+ min?: number;
17
+ /** Maximum value (for numeric types) */
18
+ max?: number;
19
+ /** Bit size */
20
+ bitSize?: number;
21
+ /** Enum options (for enum type) */
22
+ options?: (string | number)[];
23
+ /** Units label */
24
+ units?: string;
25
+ /** Validation regex pattern (for string type) */
26
+ pattern?: string;
27
+ /** Whether this is a hazardous parameter */
28
+ hazardous?: boolean;
29
+ /** Hazardous description */
30
+ hazardousDescription?: string;
31
+ }
32
+ export interface CommandHistoryEntry {
33
+ id: string;
34
+ timestamp: Date;
35
+ target: string;
36
+ command: string;
37
+ parameters: Record<string, unknown>;
38
+ status: 'sent' | 'success' | 'error';
39
+ error?: string;
40
+ }
41
+ export interface CommandBuilderProps {
42
+ /** Target name */
43
+ target: string;
44
+ /** Command name */
45
+ command: string;
46
+ /** Command description */
47
+ description?: string;
48
+ /** Whether this is a hazardous command */
49
+ hazardous?: boolean;
50
+ /** Hazardous warning text */
51
+ hazardousDescription?: string;
52
+ /** Command parameters */
53
+ parameters: CommandParameter[];
54
+ /** Called when command is sent */
55
+ onSend: (params: Record<string, unknown>) => void | Promise<void>;
56
+ /** Command history entries */
57
+ history?: CommandHistoryEntry[];
58
+ /** Show command history (default: true) */
59
+ showHistory?: boolean;
60
+ /** Show raw command preview (default: true) */
61
+ showPreview?: boolean;
62
+ /** Whether send is disabled */
63
+ disabled?: boolean;
64
+ /** Height (default: auto) */
65
+ height?: number | string;
66
+ /** CSS class */
67
+ className?: string;
68
+ /** Show outer container border (default: true). Set false when embedded inside a Container/card. */
69
+ bordered?: boolean;
70
+ /** Custom style overrides for the outer container */
71
+ style?: React.CSSProperties;
72
+ }
73
+ export declare const CommandBuilder: React.NamedExoticComponent<CommandBuilderProps>;
74
+ export default CommandBuilder;