@zendir/ui 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/CHANGELOG.md +419 -386
  2. package/README.md +640 -631
  3. package/dist/_virtual/_rolldown/runtime.js +13 -0
  4. package/dist/index.js +17 -221
  5. package/dist/react/3d/CesiumCaptureSource.d.ts +0 -1
  6. package/dist/react/3d/CesiumCaptureSource.js +364 -283
  7. package/dist/react/3d/CesiumCaptureSource.js.map +1 -1
  8. package/dist/react/3d/ZenSpace3D.d.ts +2 -3
  9. package/dist/react/3d/ZenSpace3D.js +1681 -1237
  10. package/dist/react/3d/ZenSpace3D.js.map +1 -1
  11. package/dist/react/3d/ZenSpace3DCesium.d.ts +0 -1
  12. package/dist/react/3d/ZenSpace3DCesium.js +513 -560
  13. package/dist/react/3d/ZenSpace3DCesium.js.map +1 -1
  14. package/dist/react/3d/ZenSpace3DShaders.js +61 -66
  15. package/dist/react/3d/ZenSpace3DShaders.js.map +1 -1
  16. package/dist/react/3d/ZenSpace3DTypes.d.ts +19 -20
  17. package/dist/react/3d/ZenSpace3DUtils.d.ts +0 -1
  18. package/dist/react/3d/ZenSpace3DUtils.js +37 -24
  19. package/dist/react/3d/ZenSpace3DUtils.js.map +1 -1
  20. package/dist/react/3d/capturePngAnalysis.js +42 -36
  21. package/dist/react/3d/capturePngAnalysis.js.map +1 -1
  22. package/dist/react/3d/index.d.ts +3 -3
  23. package/dist/react/3d/index.js +5 -53
  24. package/dist/react/3d/threeLoader.d.ts +1 -1
  25. package/dist/react/3d/threeLoader.js +23 -18
  26. package/dist/react/3d/threeLoader.js.map +1 -1
  27. package/dist/react/astro/ClassificationBanner.d.ts +2 -3
  28. package/dist/react/astro/ClassificationBanner.js +95 -79
  29. package/dist/react/astro/ClassificationBanner.js.map +1 -1
  30. package/dist/react/astro/GlobalStatusBar.d.ts +0 -1
  31. package/dist/react/astro/GlobalStatusBar.js +157 -163
  32. package/dist/react/astro/GlobalStatusBar.js.map +1 -1
  33. package/dist/react/astro/MissionClock.d.ts +7 -8
  34. package/dist/react/astro/MissionClock.js +377 -400
  35. package/dist/react/astro/MissionClock.js.map +1 -1
  36. package/dist/react/astro/MonitoringIcon.d.ts +1 -2
  37. package/dist/react/astro/MonitoringIcon.js +422 -358
  38. package/dist/react/astro/MonitoringIcon.js.map +1 -1
  39. package/dist/react/astro/Notification.d.ts +1 -2
  40. package/dist/react/astro/Notification.js +229 -126
  41. package/dist/react/astro/Notification.js.map +1 -1
  42. package/dist/react/astro/Progress.d.ts +0 -1
  43. package/dist/react/astro/Progress.js +199 -141
  44. package/dist/react/astro/Progress.js.map +1 -1
  45. package/dist/react/astro/SimulationControls.d.ts +3 -4
  46. package/dist/react/astro/SimulationControls.js +596 -650
  47. package/dist/react/astro/SimulationControls.js.map +1 -1
  48. package/dist/react/astro/StatusIndicator.d.ts +0 -1
  49. package/dist/react/astro/StatusIndicator.js +236 -170
  50. package/dist/react/astro/StatusIndicator.js.map +1 -1
  51. package/dist/react/astro/UnifiedTimeline.d.ts +9 -10
  52. package/dist/react/astro/UnifiedTimeline.js +2345 -2392
  53. package/dist/react/astro/UnifiedTimeline.js.map +1 -1
  54. package/dist/react/astro/index.d.ts +5 -5
  55. package/dist/react/astro/index.js +1 -25
  56. package/dist/react/cards/AccessCard.d.ts +0 -1
  57. package/dist/react/cards/AccessCard.js +471 -405
  58. package/dist/react/cards/AccessCard.js.map +1 -1
  59. package/dist/react/cards/OrbitCard.d.ts +0 -1
  60. package/dist/react/cards/OrbitCard.js +487 -364
  61. package/dist/react/cards/OrbitCard.js.map +1 -1
  62. package/dist/react/cards/SpacecraftCard.d.ts +0 -1
  63. package/dist/react/cards/SpacecraftCard.js +813 -925
  64. package/dist/react/cards/SpacecraftCard.js.map +1 -1
  65. package/dist/react/cards/TelemetryCard.d.ts +0 -1
  66. package/dist/react/cards/TelemetryCard.js +1055 -732
  67. package/dist/react/cards/TelemetryCard.js.map +1 -1
  68. package/dist/react/cards/TelemetryStreamCard.d.ts +0 -1
  69. package/dist/react/cards/TelemetryStreamCard.js +323 -297
  70. package/dist/react/cards/TelemetryStreamCard.js.map +1 -1
  71. package/dist/react/cards/index.d.ts +1 -1
  72. package/dist/react/cards/index.js +1 -8
  73. package/dist/react/charts/GroundTrackMap.d.ts +6 -7
  74. package/dist/react/charts/GroundTrackMap.js +1377 -1256
  75. package/dist/react/charts/GroundTrackMap.js.map +1 -1
  76. package/dist/react/charts/GroundTrackMapLeaflet.d.ts +1 -2
  77. package/dist/react/charts/GroundTrackMapLeaflet.js +1065 -987
  78. package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -1
  79. package/dist/react/charts/groundTrackMapLeafletTiles.js +34 -25
  80. package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -1
  81. package/dist/react/charts/groundTrackMapLeafletUtils.js +70 -61
  82. package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -1
  83. package/dist/react/charts/index.d.ts +1 -1
  84. package/dist/react/charts/index.js +7 -100
  85. package/dist/react/charts/unified/AstroChart.d.ts +1 -2
  86. package/dist/react/charts/unified/AstroChart.js +1331 -1411
  87. package/dist/react/charts/unified/AstroChart.js.map +1 -1
  88. package/dist/react/charts/unified/PowerOverviewChart.d.ts +3 -3
  89. package/dist/react/charts/unified/PowerOverviewChart.js +495 -478
  90. package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -1
  91. package/dist/react/charts/unified/domain.d.ts +12 -13
  92. package/dist/react/charts/unified/domain.js +3999 -3145
  93. package/dist/react/charts/unified/domain.js.map +1 -1
  94. package/dist/react/charts/unified/generators.d.ts +3 -4
  95. package/dist/react/charts/unified/generators.js +561 -498
  96. package/dist/react/charts/unified/generators.js.map +1 -1
  97. package/dist/react/charts/unified/index.d.ts +1 -1
  98. package/dist/react/charts/unified/presets.d.ts +14 -15
  99. package/dist/react/charts/unified/presets.js +857 -994
  100. package/dist/react/charts/unified/presets.js.map +1 -1
  101. package/dist/react/charts/unified/sync.d.ts +2 -3
  102. package/dist/react/charts/unified/sync.js +229 -195
  103. package/dist/react/charts/unified/sync.js.map +1 -1
  104. package/dist/react/charts/unified/theme.d.ts +11 -12
  105. package/dist/react/charts/unified/theme.js +606 -642
  106. package/dist/react/charts/unified/theme.js.map +1 -1
  107. package/dist/react/charts/unified/types.d.ts +32 -33
  108. package/dist/react/charts/unified/useChartStream.d.ts +1 -2
  109. package/dist/react/charts/unified/useChartStream.js +203 -216
  110. package/dist/react/charts/unified/useChartStream.js.map +1 -1
  111. package/dist/react/chatgpt/AppCard.d.ts +1 -2
  112. package/dist/react/chatgpt/index.d.ts +7 -7
  113. package/dist/react/chatgpt/index.js +160 -139
  114. package/dist/react/chatgpt/index.js.map +1 -1
  115. package/dist/react/context/CategoryContext.d.ts +0 -1
  116. package/dist/react/context/CategoryContext.js +78 -29
  117. package/dist/react/context/CategoryContext.js.map +1 -1
  118. package/dist/react/context/DisplaySettingsContext.d.ts +1 -2
  119. package/dist/react/context/DisplaySettingsContext.js +205 -156
  120. package/dist/react/context/DisplaySettingsContext.js.map +1 -1
  121. package/dist/react/context/SpatialSelectionContext.d.ts +0 -1
  122. package/dist/react/context/SpatialSelectionContext.js +36 -7
  123. package/dist/react/context/SpatialSelectionContext.js.map +1 -1
  124. package/dist/react/core/data/DataTable.d.ts +3 -4
  125. package/dist/react/core/data/DataTable.js +473 -440
  126. package/dist/react/core/data/DataTable.js.map +1 -1
  127. package/dist/react/core/data/DataValue.d.ts +4 -5
  128. package/dist/react/core/data/DataValue.js +605 -571
  129. package/dist/react/core/data/DataValue.js.map +1 -1
  130. package/dist/react/core/data/propertyConfig.d.ts +1 -2
  131. package/dist/react/core/data/propertyConfig.js +446 -382
  132. package/dist/react/core/data/propertyConfig.js.map +1 -1
  133. package/dist/react/core/display/AstroIcon.d.ts +4 -5
  134. package/dist/react/core/display/AstroIcon.js +339 -429
  135. package/dist/react/core/display/AstroIcon.js.map +1 -1
  136. package/dist/react/core/display/Badge.d.ts +2 -3
  137. package/dist/react/core/display/Badge.js +131 -131
  138. package/dist/react/core/display/Badge.js.map +1 -1
  139. package/dist/react/core/display/CardHeader.d.ts +0 -1
  140. package/dist/react/core/display/CardHeader.js +398 -311
  141. package/dist/react/core/display/CardHeader.js.map +1 -1
  142. package/dist/react/core/display/Container.d.ts +2 -3
  143. package/dist/react/core/display/Container.js +640 -668
  144. package/dist/react/core/display/Container.js.map +1 -1
  145. package/dist/react/core/display/CopyButton.d.ts +1 -2
  146. package/dist/react/core/display/CopyButton.js +158 -101
  147. package/dist/react/core/display/CopyButton.js.map +1 -1
  148. package/dist/react/core/display/GlassCard.d.ts +3 -4
  149. package/dist/react/core/display/GlassCard.js +416 -369
  150. package/dist/react/core/display/GlassCard.js.map +1 -1
  151. package/dist/react/core/display/HeaderIconWithStatus.d.ts +0 -1
  152. package/dist/react/core/display/HeaderIconWithStatus.js +152 -152
  153. package/dist/react/core/display/HeaderIconWithStatus.js.map +1 -1
  154. package/dist/react/core/display/Icon.d.ts +2 -3
  155. package/dist/react/core/display/Icon.js +172 -143
  156. package/dist/react/core/display/Icon.js.map +1 -1
  157. package/dist/react/core/display/Typography.d.ts +24 -25
  158. package/dist/react/core/display/Typography.js +360 -178
  159. package/dist/react/core/display/Typography.js.map +1 -1
  160. package/dist/react/core/feedback/ConfirmDialog.d.ts +1 -2
  161. package/dist/react/core/feedback/ConfirmDialog.js +343 -304
  162. package/dist/react/core/feedback/ConfirmDialog.js.map +1 -1
  163. package/dist/react/core/feedback/Dialog.d.ts +2 -3
  164. package/dist/react/core/feedback/Dialog.js +189 -197
  165. package/dist/react/core/feedback/Dialog.js.map +1 -1
  166. package/dist/react/core/feedback/Toast.d.ts +2 -3
  167. package/dist/react/core/feedback/Toast.js +346 -207
  168. package/dist/react/core/feedback/Toast.js.map +1 -1
  169. package/dist/react/core/index.d.ts +26 -26
  170. package/dist/react/core/index.js +7 -119
  171. package/dist/react/core/inputs/Button.d.ts +2 -3
  172. package/dist/react/core/inputs/Button.js +281 -304
  173. package/dist/react/core/inputs/Button.js.map +1 -1
  174. package/dist/react/core/inputs/Checkbox.d.ts +2 -3
  175. package/dist/react/core/inputs/Checkbox.js +139 -127
  176. package/dist/react/core/inputs/Checkbox.js.map +1 -1
  177. package/dist/react/core/inputs/Input.d.ts +3 -4
  178. package/dist/react/core/inputs/Input.js +277 -285
  179. package/dist/react/core/inputs/Input.js.map +1 -1
  180. package/dist/react/core/inputs/LimitsBar.d.ts +1 -2
  181. package/dist/react/core/inputs/LimitsBar.js +271 -196
  182. package/dist/react/core/inputs/LimitsBar.js.map +1 -1
  183. package/dist/react/core/inputs/NumberInput.d.ts +2 -3
  184. package/dist/react/core/inputs/NumberInput.js +531 -503
  185. package/dist/react/core/inputs/NumberInput.js.map +1 -1
  186. package/dist/react/core/inputs/PinInput.d.ts +2 -3
  187. package/dist/react/core/inputs/PinInput.js +224 -207
  188. package/dist/react/core/inputs/PinInput.js.map +1 -1
  189. package/dist/react/core/inputs/Select.d.ts +1 -2
  190. package/dist/react/core/inputs/Select.js +298 -299
  191. package/dist/react/core/inputs/Select.js.map +1 -1
  192. package/dist/react/core/inputs/Toggle.d.ts +2 -3
  193. package/dist/react/core/inputs/Toggle.js +142 -148
  194. package/dist/react/core/inputs/Toggle.js.map +1 -1
  195. package/dist/react/core/layout/Box.d.ts +3 -4
  196. package/dist/react/core/layout/Box.js +118 -122
  197. package/dist/react/core/layout/Box.js.map +1 -1
  198. package/dist/react/core/layout/Center.d.ts +0 -1
  199. package/dist/react/core/layout/Center.js +45 -32
  200. package/dist/react/core/layout/Center.js.map +1 -1
  201. package/dist/react/core/layout/Divider.d.ts +1 -2
  202. package/dist/react/core/layout/Divider.js +112 -106
  203. package/dist/react/core/layout/Divider.js.map +1 -1
  204. package/dist/react/core/layout/Flex.d.ts +4 -5
  205. package/dist/react/core/layout/Flex.js +120 -124
  206. package/dist/react/core/layout/Flex.js.map +1 -1
  207. package/dist/react/core/layout/Grid.d.ts +5 -6
  208. package/dist/react/core/layout/Grid.js +131 -138
  209. package/dist/react/core/layout/Grid.js.map +1 -1
  210. package/dist/react/core/layout/Spacer.d.ts +0 -1
  211. package/dist/react/core/layout/Spacer.js +36 -29
  212. package/dist/react/core/layout/Spacer.js.map +1 -1
  213. package/dist/react/core/layout/Stack.d.ts +4 -5
  214. package/dist/react/core/layout/Stack.js +127 -70
  215. package/dist/react/core/layout/Stack.js.map +1 -1
  216. package/dist/react/core/layout/responsive.d.ts +1 -2
  217. package/dist/react/core/layout/responsive.js +25 -19
  218. package/dist/react/core/layout/responsive.js.map +1 -1
  219. package/dist/react/core/layout/useBreakpoint.d.ts +1 -1
  220. package/dist/react/core/layout/useBreakpoint.js +119 -66
  221. package/dist/react/core/layout/useBreakpoint.js.map +1 -1
  222. package/dist/react/core/navigation/AppBar.d.ts +1 -2
  223. package/dist/react/core/navigation/AppBar.js +827 -805
  224. package/dist/react/core/navigation/AppBar.js.map +1 -1
  225. package/dist/react/core/navigation/Pagination.d.ts +2 -3
  226. package/dist/react/core/navigation/Pagination.js +207 -187
  227. package/dist/react/core/navigation/Pagination.js.map +1 -1
  228. package/dist/react/core/navigation/SideNav.d.ts +5 -6
  229. package/dist/react/core/navigation/SideNav.js +855 -629
  230. package/dist/react/core/navigation/SideNav.js.map +1 -1
  231. package/dist/react/core/navigation/Tabs.d.ts +0 -1
  232. package/dist/react/core/navigation/Tabs.js +113 -119
  233. package/dist/react/core/navigation/Tabs.js.map +1 -1
  234. package/dist/react/core/overlays/Popover.d.ts +2 -3
  235. package/dist/react/core/overlays/Popover.js +303 -282
  236. package/dist/react/core/overlays/Popover.js.map +1 -1
  237. package/dist/react/core/overlays/SidePanel.d.ts +1 -2
  238. package/dist/react/core/overlays/SidePanel.js +217 -212
  239. package/dist/react/core/overlays/SidePanel.js.map +1 -1
  240. package/dist/react/core/overlays/Tooltip.d.ts +1 -2
  241. package/dist/react/core/overlays/Tooltip.js +170 -176
  242. package/dist/react/core/overlays/Tooltip.js.map +1 -1
  243. package/dist/react/core/widgets/ActivityPlanner.d.ts +0 -1
  244. package/dist/react/core/widgets/ActivityPlanner.js +855 -517
  245. package/dist/react/core/widgets/ActivityPlanner.js.map +1 -1
  246. package/dist/react/core/widgets/Capture.d.ts +2 -3
  247. package/dist/react/core/widgets/Capture.js +965 -779
  248. package/dist/react/core/widgets/Capture.js.map +1 -1
  249. package/dist/react/core/widgets/ChatPanel.d.ts +16 -17
  250. package/dist/react/core/widgets/ChatPanel.js +1734 -1034
  251. package/dist/react/core/widgets/ChatPanel.js.map +1 -1
  252. package/dist/react/core/widgets/ColorPickerPanel.d.ts +0 -1
  253. package/dist/react/core/widgets/ColorPickerPanel.js +298 -287
  254. package/dist/react/core/widgets/ColorPickerPanel.js.map +1 -1
  255. package/dist/react/core/widgets/CommandBuilder.d.ts +2 -3
  256. package/dist/react/core/widgets/CommandBuilder.js +624 -516
  257. package/dist/react/core/widgets/CommandBuilder.js.map +1 -1
  258. package/dist/react/core/widgets/ConnectionForm.d.ts +2 -3
  259. package/dist/react/core/widgets/ConnectionForm.js +528 -492
  260. package/dist/react/core/widgets/ConnectionForm.js.map +1 -1
  261. package/dist/react/core/widgets/FileExplorer.d.ts +3 -4
  262. package/dist/react/core/widgets/FileExplorer.js +617 -505
  263. package/dist/react/core/widgets/FileExplorer.js.map +1 -1
  264. package/dist/react/core/widgets/HexViewer.d.ts +2 -3
  265. package/dist/react/core/widgets/HexViewer.js +1353 -1091
  266. package/dist/react/core/widgets/HexViewer.js.map +1 -1
  267. package/dist/react/core/widgets/ImageFrame.d.ts +1 -2
  268. package/dist/react/core/widgets/ImageFrame.js +230 -193
  269. package/dist/react/core/widgets/ImageFrame.js.map +1 -1
  270. package/dist/react/core/widgets/ImageGallery.d.ts +2 -1
  271. package/dist/react/core/widgets/ImageGallery.js +380 -314
  272. package/dist/react/core/widgets/ImageGallery.js.map +1 -1
  273. package/dist/react/core/widgets/ImagePanel.d.ts +0 -1
  274. package/dist/react/core/widgets/ImagePanel.js +110 -101
  275. package/dist/react/core/widgets/ImagePanel.js.map +1 -1
  276. package/dist/react/core/widgets/LogViewer.d.ts +2 -3
  277. package/dist/react/core/widgets/LogViewer.js +711 -607
  278. package/dist/react/core/widgets/LogViewer.js.map +1 -1
  279. package/dist/react/core/widgets/MessageStream.d.ts +3 -4
  280. package/dist/react/core/widgets/MessageStream.js +514 -444
  281. package/dist/react/core/widgets/MessageStream.js.map +1 -1
  282. package/dist/react/core/widgets/MissionCalendar.d.ts +3 -4
  283. package/dist/react/core/widgets/MissionCalendar.js +1488 -1020
  284. package/dist/react/core/widgets/MissionCalendar.js.map +1 -1
  285. package/dist/react/core/widgets/PacketViewer.d.ts +2 -3
  286. package/dist/react/core/widgets/PacketViewer.js +550 -421
  287. package/dist/react/core/widgets/PacketViewer.js.map +1 -1
  288. package/dist/react/core/widgets/capture-placeholder.png.js +6 -5
  289. package/dist/react/core/widgets/capture-placeholder.png.js.map +1 -1
  290. package/dist/react/hooks/index.d.ts +5 -5
  291. package/dist/react/hooks/useAccessWindows.d.ts +0 -1
  292. package/dist/react/hooks/useCompactMode.d.ts +1 -1
  293. package/dist/react/hooks/useCompactMode.js +104 -58
  294. package/dist/react/hooks/useCompactMode.js.map +1 -1
  295. package/dist/react/hooks/useGroundTrackHistory.d.ts +0 -1
  296. package/dist/react/hooks/useSimulationScene.d.ts +1 -2
  297. package/dist/react/hooks/useSimulationScene.js +481 -374
  298. package/dist/react/hooks/useSimulationScene.js.map +1 -1
  299. package/dist/react/index.d.ts +3 -3
  300. package/dist/react/panels/LayerControlPanel.d.ts +1 -2
  301. package/dist/react/panels/LayerControlPanel.js +223 -180
  302. package/dist/react/panels/LayerControlPanel.js.map +1 -1
  303. package/dist/react/panels/ObjectInventoryPanel.d.ts +2 -3
  304. package/dist/react/panels/ObjectInventoryPanel.js +315 -250
  305. package/dist/react/panels/ObjectInventoryPanel.js.map +1 -1
  306. package/dist/react/panels/index.d.ts +1 -1
  307. package/dist/react/panels/index.js +1 -6
  308. package/dist/react/shared/ErrorBoundary.d.ts +1 -2
  309. package/dist/react/shared/ErrorBoundary.js +170 -139
  310. package/dist/react/shared/ErrorBoundary.js.map +1 -1
  311. package/dist/react/shared/Skeleton.d.ts +1 -2
  312. package/dist/react/shared/Skeleton.js +300 -301
  313. package/dist/react/shared/Skeleton.js.map +1 -1
  314. package/dist/react/theme/ThemeProvider.d.ts +2 -321
  315. package/dist/react/theme/ThemeProvider.js +313 -939
  316. package/dist/react/theme/ThemeProvider.js.map +1 -1
  317. package/dist/react/theme/cardAccent.d.ts +1 -2
  318. package/dist/react/theme/cardAccent.js +196 -126
  319. package/dist/react/theme/cardAccent.js.map +1 -1
  320. package/dist/react/theme/config.d.ts +0 -1
  321. package/dist/react/theme/config.js +47 -25
  322. package/dist/react/theme/config.js.map +1 -1
  323. package/dist/react/theme/index.d.ts +2 -2
  324. package/dist/react/theme/index.js +1 -16
  325. package/dist/react/theme/types.d.ts +332 -0
  326. package/dist/react/theme/types.js +39 -0
  327. package/dist/react/theme/types.js.map +1 -0
  328. package/dist/react/types.d.ts +8 -8
  329. package/dist/react/types.js +147 -47
  330. package/dist/react/types.js.map +1 -1
  331. package/dist/react/utils/categoryPalette.d.ts +0 -1
  332. package/dist/react/utils/categoryPalette.js +91 -102
  333. package/dist/react/utils/categoryPalette.js.map +1 -1
  334. package/dist/react/utils/index.d.ts +5 -5
  335. package/dist/react/utils/index.js +457 -371
  336. package/dist/react/utils/index.js.map +1 -1
  337. package/dist/react/visualizations/EclipseTimerCard.d.ts +0 -1
  338. package/dist/react/visualizations/LinkBudgetCard.d.ts +0 -1
  339. package/dist/react/visualizations/NavBallCard.d.ts +0 -1
  340. package/dist/react/visualizations/PropulsionCard.d.ts +1 -2
  341. package/dist/react/visualizations/SensorFootprintCard.d.ts +1 -2
  342. package/dist/react/visualizations/ThermalHeatmapCard.d.ts +0 -1
  343. package/dist/react/visualizations/index.d.ts +3 -3
  344. package/dist/react.d.ts +2 -1
  345. package/dist/react.js +17 -221
  346. package/dist/shaders/atmosphere.frag.js +6 -5
  347. package/dist/shaders/atmosphere.frag.js.map +1 -1
  348. package/dist/shaders/atmosphere.vert.js +6 -5
  349. package/dist/shaders/atmosphere.vert.js.map +1 -1
  350. package/dist/shaders/stars.frag.js +6 -5
  351. package/dist/shaders/stars.frag.js.map +1 -1
  352. package/dist/shaders/stars.vert.js +6 -5
  353. package/dist/shaders/stars.vert.js.map +1 -1
  354. package/dist/style.css +26 -3
  355. package/dist/tokens/core.d.ts +159 -0
  356. package/dist/tokens/core.js +144 -0
  357. package/dist/tokens/core.js.map +1 -0
  358. package/dist/tokens/css-vars.d.ts +213 -2
  359. package/dist/tokens/css-vars.js +590 -227
  360. package/dist/tokens/css-vars.js.map +1 -1
  361. package/dist/tokens/index.d.ts +31 -228
  362. package/dist/tokens/index.js +281 -366
  363. package/dist/tokens/index.js.map +1 -1
  364. package/dist/tokens/palettes/astro.d.ts +129 -0
  365. package/dist/tokens/palettes/astro.js +112 -0
  366. package/dist/tokens/palettes/astro.js.map +1 -0
  367. package/dist/tokens/palettes/index.d.ts +288 -0
  368. package/dist/tokens/palettes/index.js +35 -0
  369. package/dist/tokens/palettes/index.js.map +1 -0
  370. package/dist/tokens/palettes/tailwind.d.ts +324 -0
  371. package/dist/tokens/palettes/tailwind.js +201 -0
  372. package/dist/tokens/palettes/tailwind.js.map +1 -0
  373. package/dist/tokens/palettes/zendir.d.ts +126 -0
  374. package/dist/tokens/palettes/zendir.js +92 -0
  375. package/dist/tokens/palettes/zendir.js.map +1 -0
  376. package/dist/tokens/themes.d.ts +30 -0
  377. package/dist/tokens/themes.js +704 -0
  378. package/dist/tokens/themes.js.map +1 -0
  379. package/dist/tokens/tokens.css +533 -155
  380. package/dist/types/index.d.ts +2 -2
  381. package/package.json +310 -313
  382. package/dist/index.js.map +0 -1
  383. package/dist/react/3d/index.js.map +0 -1
  384. package/dist/react/astro/index.js.map +0 -1
  385. package/dist/react/cards/index.js.map +0 -1
  386. package/dist/react/charts/index.js.map +0 -1
  387. package/dist/react/core/index.js.map +0 -1
  388. package/dist/react/panels/index.js.map +0 -1
  389. package/dist/react/theme/astro-tokens.d.ts +0 -153
  390. package/dist/react/theme/index.js.map +0 -1
  391. package/dist/react.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CommandBuilder.js","sources":["../../../../src/react/core/widgets/CommandBuilder.tsx"],"sourcesContent":["/**\n * @zendir/ui - CommandBuilder Component\n * \n * Dynamic command parameter form for spacecraft command construction and execution.\n * Builds a form from a command definition with type-appropriate inputs,\n * validation, hazardous warnings, and send/history functionality.\n * \n * Features:\n * - Auto-generated form from command parameter definitions\n * - Type-appropriate inputs (number, string, boolean, enum/state, hex)\n * - Validation with min/max/regex constraints\n * - Hazardous command warnings\n * - Command history with re-send\n * - Raw command preview\n * - Required/optional parameter indicators\n * - Default values\n * \n * @example\n * ```tsx\n * <CommandBuilder\n * target=\"INST\"\n * command=\"COLLECT\"\n * parameters={[\n * { name: 'TYPE', type: 'enum', options: ['NORMAL', 'SPECIAL'], required: true },\n * { name: 'DURATION', type: 'float', min: 0, max: 100, default: 1.0, units: 'sec' },\n * ]}\n * onSend={(params) => console.log('Send:', params)}\n * />\n * ```\n */\n\nimport React, { useState, useCallback, useMemo, memo } from 'react';\nimport { useTheme } from '../../theme';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CommandParamType = 'int' | 'uint' | 'float' | 'string' | 'boolean' | 'enum' | 'hex' | 'block';\n\nexport interface CommandParameter {\n /** Parameter name */\n name: string;\n /** Parameter type */\n type: CommandParamType;\n /** Description */\n description?: string;\n /** Default value */\n default?: unknown;\n /** Whether parameter is required (default: true) */\n required?: boolean;\n /** Minimum value (for numeric types) */\n min?: number;\n /** Maximum value (for numeric types) */\n max?: number;\n /** Bit size */\n bitSize?: number;\n /** Enum options (for enum type) */\n options?: (string | number)[];\n /** Units label */\n units?: string;\n /** Validation regex pattern (for string type) */\n pattern?: string;\n /** Whether this is a hazardous parameter */\n hazardous?: boolean;\n /** Hazardous description */\n hazardousDescription?: string;\n}\n\nexport interface CommandHistoryEntry {\n id: string;\n timestamp: Date;\n target: string;\n command: string;\n parameters: Record<string, unknown>;\n status: 'sent' | 'success' | 'error';\n error?: string;\n}\n\nexport interface CommandBuilderProps {\n /** Target name */\n target: string;\n /** Command name */\n command: string;\n /** Command description */\n description?: string;\n /** Whether this is a hazardous command */\n hazardous?: boolean;\n /** Hazardous warning text */\n hazardousDescription?: string;\n /** Command parameters */\n parameters: CommandParameter[];\n /** Called when command is sent */\n onSend: (params: Record<string, unknown>) => void | Promise<void>;\n /** Command history entries */\n history?: CommandHistoryEntry[];\n /** Show command history (default: true) */\n showHistory?: boolean;\n /** Show raw command preview (default: true) */\n showPreview?: boolean;\n /** Whether send is disabled */\n disabled?: boolean;\n /** Height (default: auto) */\n height?: number | string;\n /** CSS class */\n className?: string;\n /** Show outer container border (default: true). Set false when embedded inside a Container/card. */\n bordered?: boolean;\n /** Custom style overrides for the outer container */\n style?: React.CSSProperties;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport const CommandBuilder = memo(function CommandBuilder({\n target,\n command,\n description,\n hazardous = false,\n hazardousDescription,\n parameters,\n onSend,\n history = [],\n showHistory = true,\n showPreview = true,\n disabled = false,\n height,\n className = '',\n bordered = true,\n style: styleProp,\n}: CommandBuilderProps): React.ReactElement {\n const { tokens, theme } = useTheme();\n const isTransparentTheme =\n theme === 'transparent' || theme === 'transparent-bold' || theme === 'transparent-minimal';\n const [values, setValues] = useState<Record<string, unknown>>(() => {\n const defaults: Record<string, unknown> = {};\n parameters.forEach(p => {\n if (p.default !== undefined) defaults[p.name] = p.default;\n else if (p.type === 'boolean') defaults[p.name] = false;\n else if (p.type === 'enum' && p.options?.length) defaults[p.name] = p.options[0];\n else defaults[p.name] = '';\n });\n return defaults;\n });\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [sending, setSending] = useState(false);\n const [showConfirm, setShowConfirm] = useState(false);\n const [showHistoryPanel, setShowHistoryPanel] = useState(false);\n\n const setValue = useCallback((name: string, value: unknown) => {\n setValues(prev => ({ ...prev, [name]: value }));\n setErrors(prev => {\n const next = { ...prev };\n delete next[name];\n return next;\n });\n }, []);\n\n const validate = useCallback((): boolean => {\n const errs: Record<string, string> = {};\n parameters.forEach(p => {\n const val = values[p.name];\n const required = p.required !== false;\n if (required && (val === undefined || val === '' || val === null)) {\n errs[p.name] = 'Required';\n return;\n }\n if (val === '' || val === undefined) return;\n if ((p.type === 'int' || p.type === 'uint' || p.type === 'float') && typeof val === 'string') {\n const num = Number(val);\n if (isNaN(num)) { errs[p.name] = 'Must be a number'; return; }\n if (p.min !== undefined && num < p.min) { errs[p.name] = `Min: ${p.min}`; return; }\n if (p.max !== undefined && num > p.max) { errs[p.name] = `Max: ${p.max}`; return; }\n if (p.type === 'uint' && num < 0) { errs[p.name] = 'Must be >= 0'; return; }\n if (p.type === 'int' && !Number.isInteger(num)) { errs[p.name] = 'Must be integer'; return; }\n }\n if (p.type === 'string' && p.pattern && typeof val === 'string') {\n if (!new RegExp(p.pattern).test(val)) { errs[p.name] = 'Invalid format'; }\n }\n });\n setErrors(errs);\n return Object.keys(errs).length === 0;\n }, [parameters, values]);\n\n const handleSend = useCallback(async () => {\n if (!validate()) return;\n if (hazardous && !showConfirm) {\n setShowConfirm(true);\n return;\n }\n setShowConfirm(false);\n setSending(true);\n try {\n const processedValues: Record<string, unknown> = {};\n parameters.forEach(p => {\n let val = values[p.name];\n if ((p.type === 'int' || p.type === 'uint' || p.type === 'float') && typeof val === 'string') {\n val = Number(val);\n }\n processedValues[p.name] = val;\n });\n await onSend(processedValues);\n } finally {\n setSending(false);\n }\n }, [validate, hazardous, showConfirm, parameters, values, onSend]);\n\n const commandString = useMemo(() => {\n const params = parameters.map(p => `${p.name}=${JSON.stringify(values[p.name] ?? '')}`).join(', ');\n return `cmd(\"${target} ${command}\" ${params ? `with ${params}` : ''})`;\n }, [target, command, parameters, values]);\n\n const resetToDefaults = useCallback(() => {\n const defaults: Record<string, unknown> = {};\n parameters.forEach(p => {\n if (p.default !== undefined) defaults[p.name] = p.default;\n else if (p.type === 'boolean') defaults[p.name] = false;\n else if (p.type === 'enum' && p.options?.length) defaults[p.name] = p.options[0];\n else defaults[p.name] = '';\n });\n setValues(defaults);\n setErrors({});\n }, [parameters]);\n\n const inputStyle: React.CSSProperties = {\n background: tokens.colors.background.base,\n color: tokens.colors.text.primary,\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n fontSize: tokens.typography.fontSize.xs,\n outline: 'none',\n fontFamily: tokens.typography.fontFamily.mono,\n width: '100%',\n minHeight: 40,\n boxSizing: 'border-box' as const,\n transition: 'border-color 150ms ease',\n };\n\n return (\n <div\n className={`command-builder ${className}`}\n style={{\n height: typeof height === 'number' ? height : undefined,\n background: tokens.colors.background.base,\n ...(bordered ? (tokens.colors.border.cardStyle ?? { border: `1px solid ${tokens.colors.border.muted}` }) : { border: 'none' }),\n borderRadius: tokens.borderRadius.lg,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n fontFamily: tokens.typography.fontFamily.primary,\n color: tokens.colors.text.primary,\n backdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n WebkitBackdropFilter: isTransparentTheme ? 'blur(10px)' : undefined,\n ...styleProp,\n }}\n >\n {/* Header */}\n <div style={{\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n background: hazardous ? `${tokens.colors.status.critical}12` : tokens.colors.background.surface,\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: tokens.spacing.sm }}>\n {hazardous && <span role=\"img\" aria-label=\"Hazardous command\" style={{ fontSize: tokens.typography.fontSize.lg }}>&#x26A0;</span>}\n <span style={{\n background: `${tokens.colors.interactive.default}22`,\n color: tokens.colors.interactive.default,\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.md,\n fontSize: tokens.typography.fontSize.xxs,\n fontWeight: tokens.typography.fontWeight.medium,\n }}>\n {target}\n </span>\n <span style={{ fontWeight: tokens.typography.fontWeight.bold, fontSize: tokens.typography.fontSize.sm }}>{command}</span>\n {hazardous && (\n <span style={{\n background: `${tokens.colors.status.critical}22`,\n color: tokens.colors.status.critical,\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\n borderRadius: tokens.borderRadius.sm,\n fontSize: tokens.typography.fontSize.micro,\n fontWeight: tokens.typography.fontWeight.bold,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}>\n Hazardous\n </span>\n )}\n </div>\n {showHistory && history.length > 0 && (\n <button\n onClick={() => setShowHistoryPanel(p => !p)}\n aria-expanded={showHistoryPanel}\n aria-label={`Command history (${history.length} entries)`}\n style={{\n background: tokens.colors.background.base,\n color: tokens.colors.text.secondary,\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\n fontSize: tokens.typography.fontSize.xxs,\n cursor: 'pointer',\n transition: 'all 150ms ease',\n }}\n >\n History ({history.length})\n </button>\n )}\n </div>\n\n {description && (\n <div style={{\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n fontSize: tokens.typography.fontSize.xs,\n color: tokens.colors.text.secondary,\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n lineHeight: tokens.typography.lineHeight.normal,\n }}>\n {description}\n </div>\n )}\n\n {/* Parameters form */}\n <div role=\"form\" aria-label={`${target} ${command} parameters`} style={{ flex: 1, overflow: 'auto', padding: tokens.spacing.smd }}>\n {parameters.length === 0 ? (\n <div style={{\n color: tokens.colors.text.muted,\n fontSize: tokens.typography.fontSize.xs,\n textAlign: 'center',\n padding: tokens.spacing.xl,\n }}>\n No parameters — command will be sent as-is\n </div>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', gap: tokens.spacing.smd }}>\n {parameters.map(p => (\n <div key={p.name}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n marginBottom: tokens.spacing.xs,\n }}>\n <label htmlFor={`cmd-param-${p.name}`} style={{\n fontWeight: tokens.typography.fontWeight.medium,\n fontSize: tokens.typography.fontSize.xs,\n color: tokens.colors.text.primary,\n }}>\n {p.name}\n {p.required !== false && <span aria-label=\"required\" style={{ color: tokens.colors.status.critical, marginLeft: tokens.spacing.xxs }}>*</span>}\n </label>\n <span style={{\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.muted,\n background: tokens.colors.background.surface,\n padding: `1px ${tokens.spacing.xs}`,\n borderRadius: tokens.borderRadius.sm,\n }}>\n {p.type}{p.bitSize ? ` (${p.bitSize}b)` : ''}\n </span>\n {p.units && <span style={{ fontSize: tokens.typography.fontSize.xxs, color: tokens.colors.interactive.default }}>[{p.units}]</span>}\n {p.hazardous && <span aria-label=\"Hazardous parameter\" style={{ fontSize: tokens.typography.fontSize.xxs, color: tokens.colors.status.critical }}>&#x26A0;</span>}\n </div>\n {p.description && (\n <div id={`cmd-param-desc-${p.name}`} style={{\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.muted,\n marginBottom: tokens.spacing.xs,\n lineHeight: tokens.typography.lineHeight.tight,\n }}>\n {p.description}\n </div>\n )}\n \n {/* Input by type */}\n {p.type === 'boolean' ? (\n <label style={{\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n fontSize: tokens.typography.fontSize.xs,\n cursor: 'pointer',\n }}>\n <input\n id={`cmd-param-${p.name}`}\n type=\"checkbox\"\n checked={!!values[p.name]}\n onChange={e => setValue(p.name, e.target.checked)}\n aria-describedby={p.description ? `cmd-param-desc-${p.name}` : undefined}\n style={{ accentColor: tokens.colors.interactive.default }}\n />\n {values[p.name] ? 'TRUE' : 'FALSE'}\n </label>\n ) : p.type === 'enum' ? (\n <select\n id={`cmd-param-${p.name}`}\n value={String(values[p.name] ?? '')}\n onChange={e => setValue(p.name, e.target.value)}\n aria-describedby={p.description ? `cmd-param-desc-${p.name}` : undefined}\n style={inputStyle}\n >\n {p.options?.map(opt => (\n <option key={String(opt)} value={String(opt)}>{String(opt)}</option>\n ))}\n </select>\n ) : (\n <input\n id={`cmd-param-${p.name}`}\n type={p.type === 'int' || p.type === 'uint' || p.type === 'float' ? 'number' : 'text'}\n value={String(values[p.name] ?? '')}\n onChange={e => setValue(p.name, e.target.value)}\n placeholder={p.default !== undefined ? `Default: ${p.default}` : undefined}\n min={p.min} max={p.max}\n step={p.type === 'float' ? 'any' : 1}\n aria-describedby={p.description ? `cmd-param-desc-${p.name}` : undefined}\n aria-invalid={!!errors[p.name]}\n style={{\n ...inputStyle,\n borderColor: errors[p.name] ? tokens.colors.status.critical : tokens.colors.border.muted,\n }}\n />\n )}\n {errors[p.name] && (\n <span role=\"alert\" style={{\n display: 'block',\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.status.critical,\n marginTop: tokens.spacing.xxs,\n }}>\n {errors[p.name]}\n </span>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Command preview */}\n {showPreview && (\n <div aria-label=\"Command preview\" style={{\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n borderTop: `1px solid ${tokens.colors.border.muted}`,\n background: tokens.colors.background.surface,\n fontFamily: tokens.typography.fontFamily.mono,\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.muted,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {commandString}\n </div>\n )}\n\n {/* Hazardous confirmation */}\n {showConfirm && (\n <div role=\"alertdialog\" aria-label=\"Confirm hazardous command\" style={{\n padding: tokens.spacing.smd,\n borderTop: `1px solid ${tokens.colors.status.critical}44`,\n background: `${tokens.colors.status.critical}12`,\n }}>\n <div style={{\n fontWeight: tokens.typography.fontWeight.bold,\n color: tokens.colors.status.critical,\n marginBottom: tokens.spacing.sm,\n fontSize: tokens.typography.fontSize.sm,\n }}>\n Confirm Hazardous Command\n </div>\n <p style={{\n fontSize: tokens.typography.fontSize.xs,\n color: tokens.colors.text.secondary,\n marginBottom: tokens.spacing.smd,\n lineHeight: tokens.typography.lineHeight.normal,\n }}>\n {hazardousDescription || `Are you sure you want to send ${target} ${command}?`}\n </p>\n <div style={{ display: 'flex', gap: tokens.spacing.sm }}>\n <button\n onClick={handleSend}\n style={{\n background: tokens.colors.status.critical,\n color: tokens.colors.text.inverse,\n border: 'none',\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\n fontSize: tokens.typography.fontSize.xs,\n fontWeight: tokens.typography.fontWeight.medium,\n cursor: 'pointer',\n transition: 'opacity 150ms ease',\n }}\n >\n Confirm Send\n </button>\n <button\n onClick={() => setShowConfirm(false)}\n style={{\n background: tokens.colors.background.base,\n color: tokens.colors.text.secondary,\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\n fontSize: tokens.typography.fontSize.xs,\n cursor: 'pointer',\n transition: 'opacity 150ms ease',\n }}\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n\n {/* Send button bar */}\n {!showConfirm && (\n <div style={{\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n borderTop: `1px solid ${tokens.colors.border.muted}`,\n background: tokens.colors.background.surface,\n display: 'flex', alignItems: 'center', justifyContent: 'space-between',\n }}>\n <button onClick={resetToDefaults} aria-label=\"Reset all parameters to defaults\" style={{\n background: 'transparent',\n color: tokens.colors.text.muted,\n border: `1px solid ${tokens.colors.border.muted}`,\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\n fontSize: tokens.typography.fontSize.xxs,\n cursor: 'pointer',\n transition: 'all 150ms ease',\n }}>\n Reset Defaults\n </button>\n <button\n onClick={handleSend}\n disabled={disabled || sending}\n aria-busy={sending}\n style={{\n background: hazardous ? tokens.colors.status.critical : tokens.colors.interactive.default,\n color: tokens.colors.text.inverse,\n border: 'none',\n borderRadius: tokens.borderRadius.md,\n padding: `${tokens.spacing.sm} ${tokens.spacing.lg}`,\n fontSize: tokens.typography.fontSize.sm,\n fontWeight: tokens.typography.fontWeight.medium,\n cursor: disabled || sending ? 'not-allowed' : 'pointer',\n opacity: disabled || sending ? 0.5 : 1,\n transition: 'opacity 150ms ease',\n }}\n >\n {sending ? 'Sending...' : 'Send Command'}\n </button>\n </div>\n )}\n\n {/* History panel */}\n {showHistoryPanel && history.length > 0 && (\n <div role=\"list\" aria-label=\"Command history\" style={{\n borderTop: `1px solid ${tokens.colors.border.muted}`,\n background: tokens.colors.background.surface,\n maxHeight: 200, overflow: 'auto',\n }}>\n <div style={{\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n fontSize: tokens.typography.fontSize.xxs,\n color: tokens.colors.text.muted,\n fontWeight: tokens.typography.fontWeight.medium,\n textTransform: 'uppercase',\n letterSpacing: '0.5px',\n }}>\n Command History\n </div>\n {history.slice().reverse().map(h => (\n <div\n role=\"listitem\"\n key={h.id}\n style={{\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\n }}\n >\n <button\n type=\"button\"\n aria-label={`${h.status} at ${h.timestamp.toLocaleTimeString()}`}\n style={{\n width: '100%',\n textAlign: 'left',\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\n fontSize: tokens.typography.fontSize.xxs,\n display: 'flex',\n alignItems: 'center',\n gap: tokens.spacing.sm,\n cursor: 'pointer',\n transition: 'background 150ms ease',\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n }}\n onClick={() => setValues(h.parameters)}\n >\n {/* Astro UX status shape */}\n <span aria-hidden=\"true\" style={{\n width: 8, height: 8, flexShrink: 0,\n ...(h.status === 'success' ? {\n borderRadius: tokens.borderRadius.full,\n background: tokens.colors.status.normal,\n } : h.status === 'error' ? {\n borderRadius: 0,\n background: tokens.colors.status.critical,\n clipPath: 'polygon(50% 100%, 0% 0%, 100% 0%)',\n } : {\n borderRadius: tokens.borderRadius.full,\n background: 'transparent',\n border: `2px solid ${tokens.colors.status.standby}`,\n }),\n }} />\n <span style={{\n color: tokens.colors.text.muted,\n fontFamily: tokens.typography.fontFamily.mono,\n fontSize: tokens.typography.fontSize.xxs,\n flexShrink: 0,\n }}>\n {h.timestamp.toLocaleTimeString()}\n </span>\n <span style={{\n fontFamily: tokens.typography.fontFamily.mono,\n fontSize: tokens.typography.fontSize.xxs,\n flex: 1,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {Object.entries(h.parameters).map(([k, v]) => `${k}=${JSON.stringify(v)}`).join(', ')}\n </span>\n {h.error && <span style={{\n fontSize: tokens.typography.fontSize.micro,\n color: tokens.colors.status.critical,\n }}>\n {h.error}\n </span>}\n </button>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n});\n\nexport default CommandBuilder;\n"],"names":["CommandBuilder"],"mappings":"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"}
1
+ {"version":3,"file":"CommandBuilder.js","names":[],"sources":["../../../../src/react/core/widgets/CommandBuilder.tsx"],"sourcesContent":["/**\r\n * @zendir/ui - CommandBuilder Component\r\n *\r\n * Dynamic command parameter form for spacecraft command construction and execution.\r\n * Builds a form from a command definition with type-appropriate inputs,\r\n * validation, hazardous warnings, and send/history functionality.\r\n *\r\n * Features:\r\n * - Auto-generated form from command parameter definitions\r\n * - Type-appropriate inputs (number, string, boolean, enum/state, hex)\r\n * - Validation with min/max/regex constraints\r\n * - Hazardous command warnings\r\n * - Command history with re-send\r\n * - Raw command preview\r\n * - Required/optional parameter indicators\r\n * - Default values\r\n *\r\n * @example\r\n * ```tsx\r\n * <CommandBuilder\r\n * target=\"INST\"\r\n * command=\"COLLECT\"\r\n * parameters={[\r\n * { name: 'TYPE', type: 'enum', options: ['NORMAL', 'SPECIAL'], required: true },\r\n * { name: 'DURATION', type: 'float', min: 0, max: 100, default: 1.0, units: 'sec' },\r\n * ]}\r\n * onSend={(params) => console.log('Send:', params)}\r\n * />\r\n * ```\r\n */\r\n\r\nimport React, { useState, useCallback, useMemo, memo } from \"react\";\r\nimport { useTheme } from \"../../theme\";\r\n\r\n// =============================================================================\r\n// Types\r\n// =============================================================================\r\n\r\nexport type CommandParamType =\r\n | \"int\"\r\n | \"uint\"\r\n | \"float\"\r\n | \"string\"\r\n | \"boolean\"\r\n | \"enum\"\r\n | \"hex\"\r\n | \"block\";\r\n\r\nexport interface CommandParameter {\r\n /** Parameter name */\r\n name: string;\r\n /** Parameter type */\r\n type: CommandParamType;\r\n /** Description */\r\n description?: string;\r\n /** Default value */\r\n default?: unknown;\r\n /** Whether parameter is required (default: true) */\r\n required?: boolean;\r\n /** Minimum value (for numeric types) */\r\n min?: number;\r\n /** Maximum value (for numeric types) */\r\n max?: number;\r\n /** Bit size */\r\n bitSize?: number;\r\n /** Enum options (for enum type) */\r\n options?: (string | number)[];\r\n /** Units label */\r\n units?: string;\r\n /** Validation regex pattern (for string type) */\r\n pattern?: string;\r\n /** Whether this is a hazardous parameter */\r\n hazardous?: boolean;\r\n /** Hazardous description */\r\n hazardousDescription?: string;\r\n}\r\n\r\nexport interface CommandHistoryEntry {\r\n id: string;\r\n timestamp: Date;\r\n target: string;\r\n command: string;\r\n parameters: Record<string, unknown>;\r\n status: \"sent\" | \"success\" | \"error\";\r\n error?: string;\r\n}\r\n\r\nexport interface CommandBuilderProps {\r\n /** Target name */\r\n target: string;\r\n /** Command name */\r\n command: string;\r\n /** Command description */\r\n description?: string;\r\n /** Whether this is a hazardous command */\r\n hazardous?: boolean;\r\n /** Hazardous warning text */\r\n hazardousDescription?: string;\r\n /** Command parameters */\r\n parameters: CommandParameter[];\r\n /** Called when command is sent */\r\n onSend: (params: Record<string, unknown>) => void | Promise<void>;\r\n /** Command history entries */\r\n history?: CommandHistoryEntry[];\r\n /** Show command history (default: true) */\r\n showHistory?: boolean;\r\n /** Show raw command preview (default: true) */\r\n showPreview?: boolean;\r\n /** Whether send is disabled */\r\n disabled?: boolean;\r\n /** Height (default: auto) */\r\n height?: number | string;\r\n /** CSS class */\r\n className?: string;\r\n /** Show outer container border (default: true). Set false when embedded inside a Container/card. */\r\n bordered?: boolean;\r\n /** Custom style overrides for the outer container */\r\n style?: React.CSSProperties;\r\n}\r\n\r\n// =============================================================================\r\n// Component\r\n// =============================================================================\r\n\r\nexport const CommandBuilder = memo(function CommandBuilder({\r\n target,\r\n command,\r\n description,\r\n hazardous = false,\r\n hazardousDescription,\r\n parameters,\r\n onSend,\r\n history = [],\r\n showHistory = true,\r\n showPreview = true,\r\n disabled = false,\r\n height,\r\n className = \"\",\r\n bordered = true,\r\n style: styleProp,\r\n}: CommandBuilderProps): React.ReactElement {\r\n const { tokens, theme } = useTheme();\r\n const isTransparentTheme =\r\n theme === \"transparent\" ||\r\n theme === \"transparent-bold\" ||\r\n theme === \"transparent-minimal\";\r\n const [values, setValues] = useState<Record<string, unknown>>(() => {\r\n const defaults: Record<string, unknown> = {};\r\n parameters.forEach((p) => {\r\n if (p.default !== undefined) defaults[p.name] = p.default;\r\n else if (p.type === \"boolean\") defaults[p.name] = false;\r\n else if (p.type === \"enum\" && p.options?.length)\r\n defaults[p.name] = p.options[0];\r\n else defaults[p.name] = \"\";\r\n });\r\n return defaults;\r\n });\r\n const [errors, setErrors] = useState<Record<string, string>>({});\r\n const [sending, setSending] = useState(false);\r\n const [showConfirm, setShowConfirm] = useState(false);\r\n const [showHistoryPanel, setShowHistoryPanel] = useState(false);\r\n\r\n const setValue = useCallback((name: string, value: unknown) => {\r\n setValues((prev) => ({ ...prev, [name]: value }));\r\n setErrors((prev) => {\r\n const next = { ...prev };\r\n delete next[name];\r\n return next;\r\n });\r\n }, []);\r\n\r\n const validate = useCallback((): boolean => {\r\n const errs: Record<string, string> = {};\r\n parameters.forEach((p) => {\r\n const val = values[p.name];\r\n const required = p.required !== false;\r\n if (required && (val === undefined || val === \"\" || val === null)) {\r\n errs[p.name] = \"Required\";\r\n return;\r\n }\r\n if (val === \"\" || val === undefined) return;\r\n if (\r\n (p.type === \"int\" || p.type === \"uint\" || p.type === \"float\") &&\r\n typeof val === \"string\"\r\n ) {\r\n const num = Number(val);\r\n if (isNaN(num)) {\r\n errs[p.name] = \"Must be a number\";\r\n return;\r\n }\r\n if (p.min !== undefined && num < p.min) {\r\n errs[p.name] = `Min: ${p.min}`;\r\n return;\r\n }\r\n if (p.max !== undefined && num > p.max) {\r\n errs[p.name] = `Max: ${p.max}`;\r\n return;\r\n }\r\n if (p.type === \"uint\" && num < 0) {\r\n errs[p.name] = \"Must be >= 0\";\r\n return;\r\n }\r\n if (p.type === \"int\" && !Number.isInteger(num)) {\r\n errs[p.name] = \"Must be integer\";\r\n return;\r\n }\r\n }\r\n if (p.type === \"string\" && p.pattern && typeof val === \"string\") {\r\n if (!new RegExp(p.pattern).test(val)) {\r\n errs[p.name] = \"Invalid format\";\r\n }\r\n }\r\n });\r\n setErrors(errs);\r\n return Object.keys(errs).length === 0;\r\n }, [parameters, values]);\r\n\r\n const handleSend = useCallback(async () => {\r\n if (!validate()) return;\r\n if (hazardous && !showConfirm) {\r\n setShowConfirm(true);\r\n return;\r\n }\r\n setShowConfirm(false);\r\n setSending(true);\r\n try {\r\n const processedValues: Record<string, unknown> = {};\r\n parameters.forEach((p) => {\r\n let val = values[p.name];\r\n if (\r\n (p.type === \"int\" || p.type === \"uint\" || p.type === \"float\") &&\r\n typeof val === \"string\"\r\n ) {\r\n val = Number(val);\r\n }\r\n processedValues[p.name] = val;\r\n });\r\n await onSend(processedValues);\r\n } finally {\r\n setSending(false);\r\n }\r\n }, [validate, hazardous, showConfirm, parameters, values, onSend]);\r\n\r\n const commandString = useMemo(() => {\r\n const params = parameters\r\n .map((p) => `${p.name}=${JSON.stringify(values[p.name] ?? \"\")}`)\r\n .join(\", \");\r\n return `cmd(\"${target} ${command}\" ${params ? `with ${params}` : \"\"})`;\r\n }, [target, command, parameters, values]);\r\n\r\n const resetToDefaults = useCallback(() => {\r\n const defaults: Record<string, unknown> = {};\r\n parameters.forEach((p) => {\r\n if (p.default !== undefined) defaults[p.name] = p.default;\r\n else if (p.type === \"boolean\") defaults[p.name] = false;\r\n else if (p.type === \"enum\" && p.options?.length)\r\n defaults[p.name] = p.options[0];\r\n else defaults[p.name] = \"\";\r\n });\r\n setValues(defaults);\r\n setErrors({});\r\n }, [parameters]);\r\n\r\n const inputStyle: React.CSSProperties = {\r\n background: tokens.colors.background.base,\r\n color: tokens.colors.text.primary,\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n fontSize: tokens.typography.fontSize.xs,\r\n outline: \"none\",\r\n fontFamily: tokens.typography.fontFamily.mono,\r\n width: \"100%\",\r\n minHeight: 40,\r\n boxSizing: \"border-box\" as const,\r\n transition: \"border-color 150ms ease\",\r\n };\r\n\r\n return (\r\n <div\r\n className={`command-builder ${className}`}\r\n style={{\r\n height: typeof height === \"number\" ? height : undefined,\r\n background: tokens.colors.background.base,\r\n ...(bordered\r\n ? (tokens.colors.border.cardStyle ?? {\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n })\r\n : { border: \"none\" }),\r\n borderRadius: tokens.borderRadius.lg,\r\n overflow: \"hidden\",\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n fontFamily: tokens.typography.fontFamily.primary,\r\n color: tokens.colors.text.primary,\r\n backdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\r\n WebkitBackdropFilter: isTransparentTheme ? \"blur(10px)\" : undefined,\r\n ...styleProp,\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n style={{\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\r\n background: hazardous\r\n ? `${tokens.colors.status.critical}12`\r\n : tokens.colors.background.surface,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n }}\r\n >\r\n {hazardous && (\r\n <span\r\n role=\"img\"\r\n aria-label=\"Hazardous command\"\r\n style={{ fontSize: tokens.typography.fontSize.lg }}\r\n >\r\n &#x26A0;\r\n </span>\r\n )}\r\n <span\r\n style={{\r\n background: `${tokens.colors.interactive.default}22`,\r\n color: tokens.colors.interactive.default,\r\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\r\n borderRadius: tokens.borderRadius.md,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n }}\r\n >\r\n {target}\r\n </span>\r\n <span\r\n style={{\r\n fontWeight: tokens.typography.fontWeight.bold,\r\n fontSize: tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n {command}\r\n </span>\r\n {hazardous && (\r\n <span\r\n style={{\r\n background: `${tokens.colors.status.critical}22`,\r\n color: tokens.colors.status.critical,\r\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n fontSize: tokens.typography.fontSize.micro,\r\n fontWeight: tokens.typography.fontWeight.bold,\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.5px\",\r\n }}\r\n >\r\n Hazardous\r\n </span>\r\n )}\r\n </div>\r\n {showHistory && history.length > 0 && (\r\n <button\r\n onClick={() => setShowHistoryPanel((p) => !p)}\r\n aria-expanded={showHistoryPanel}\r\n aria-label={`Command history (${history.length} entries)`}\r\n style={{\r\n background: tokens.colors.background.base,\r\n color: tokens.colors.text.secondary,\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.xxs} ${tokens.spacing.sm}`,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n cursor: \"pointer\",\r\n transition: \"all 150ms ease\",\r\n }}\r\n >\r\n History ({history.length})\r\n </button>\r\n )}\r\n </div>\r\n\r\n {description && (\r\n <div\r\n style={{\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n fontSize: tokens.typography.fontSize.xs,\r\n color: tokens.colors.text.secondary,\r\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\r\n lineHeight: tokens.typography.lineHeight.normal,\r\n }}\r\n >\r\n {description}\r\n </div>\r\n )}\r\n\r\n {/* Parameters form */}\r\n <div\r\n role=\"form\"\r\n aria-label={`${target} ${command} parameters`}\r\n style={{ flex: 1, overflow: \"auto\", padding: tokens.spacing.smd }}\r\n >\r\n {parameters.length === 0 ? (\r\n <div\r\n style={{\r\n color: tokens.colors.text.muted,\r\n fontSize: tokens.typography.fontSize.xs,\r\n textAlign: \"center\",\r\n padding: tokens.spacing.xl,\r\n }}\r\n >\r\n No parameters — command will be sent as-is\r\n </div>\r\n ) : (\r\n <div\r\n style={{\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n gap: tokens.spacing.smd,\r\n }}\r\n >\r\n {parameters.map((p) => (\r\n <div key={p.name}>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n marginBottom: tokens.spacing.xs,\r\n }}\r\n >\r\n <label\r\n htmlFor={`cmd-param-${p.name}`}\r\n style={{\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n fontSize: tokens.typography.fontSize.xs,\r\n color: tokens.colors.text.primary,\r\n }}\r\n >\r\n {p.name}\r\n {p.required !== false && (\r\n <span\r\n aria-label=\"required\"\r\n style={{\r\n color: tokens.colors.status.critical,\r\n marginLeft: tokens.spacing.xxs,\r\n }}\r\n >\r\n *\r\n </span>\r\n )}\r\n </label>\r\n <span\r\n style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.muted,\r\n background: tokens.colors.background.surface,\r\n padding: `1px ${tokens.spacing.xs}`,\r\n borderRadius: tokens.borderRadius.sm,\r\n }}\r\n >\r\n {p.type}\r\n {p.bitSize ? ` (${p.bitSize}b)` : \"\"}\r\n </span>\r\n {p.units && (\r\n <span\r\n style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.interactive.default,\r\n }}\r\n >\r\n [{p.units}]\r\n </span>\r\n )}\r\n {p.hazardous && (\r\n <span\r\n aria-label=\"Hazardous parameter\"\r\n style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.status.critical,\r\n }}\r\n >\r\n &#x26A0;\r\n </span>\r\n )}\r\n </div>\r\n {p.description && (\r\n <div\r\n id={`cmd-param-desc-${p.name}`}\r\n style={{\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.muted,\r\n marginBottom: tokens.spacing.xs,\r\n lineHeight: tokens.typography.lineHeight.tight,\r\n }}\r\n >\r\n {p.description}\r\n </div>\r\n )}\r\n\r\n {/* Input by type */}\r\n {p.type === \"boolean\" ? (\r\n <label\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n fontSize: tokens.typography.fontSize.xs,\r\n cursor: \"pointer\",\r\n }}\r\n >\r\n <input\r\n id={`cmd-param-${p.name}`}\r\n type=\"checkbox\"\r\n checked={!!values[p.name]}\r\n onChange={(e) => setValue(p.name, e.target.checked)}\r\n aria-describedby={\r\n p.description ? `cmd-param-desc-${p.name}` : undefined\r\n }\r\n style={{ accentColor: tokens.colors.interactive.default }}\r\n />\r\n {values[p.name] ? \"TRUE\" : \"FALSE\"}\r\n </label>\r\n ) : p.type === \"enum\" ? (\r\n <select\r\n id={`cmd-param-${p.name}`}\r\n value={String(values[p.name] ?? \"\")}\r\n onChange={(e) => setValue(p.name, e.target.value)}\r\n aria-describedby={\r\n p.description ? `cmd-param-desc-${p.name}` : undefined\r\n }\r\n style={inputStyle}\r\n >\r\n {p.options?.map((opt) => (\r\n <option key={String(opt)} value={String(opt)}>\r\n {String(opt)}\r\n </option>\r\n ))}\r\n </select>\r\n ) : (\r\n <input\r\n id={`cmd-param-${p.name}`}\r\n type={\r\n p.type === \"int\" ||\r\n p.type === \"uint\" ||\r\n p.type === \"float\"\r\n ? \"number\"\r\n : \"text\"\r\n }\r\n value={String(values[p.name] ?? \"\")}\r\n onChange={(e) => setValue(p.name, e.target.value)}\r\n placeholder={\r\n p.default !== undefined\r\n ? `Default: ${p.default}`\r\n : undefined\r\n }\r\n min={p.min}\r\n max={p.max}\r\n step={p.type === \"float\" ? \"any\" : 1}\r\n aria-describedby={\r\n p.description ? `cmd-param-desc-${p.name}` : undefined\r\n }\r\n aria-invalid={!!errors[p.name]}\r\n style={{\r\n ...inputStyle,\r\n borderColor: errors[p.name]\r\n ? tokens.colors.status.critical\r\n : tokens.colors.border.muted,\r\n }}\r\n />\r\n )}\r\n {errors[p.name] && (\r\n <span\r\n role=\"alert\"\r\n style={{\r\n display: \"block\",\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.status.critical,\r\n marginTop: tokens.spacing.xxs,\r\n }}\r\n >\r\n {errors[p.name]}\r\n </span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Command preview */}\r\n {showPreview && (\r\n <div\r\n aria-label=\"Command preview\"\r\n style={{\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n borderTop: `1px solid ${tokens.colors.border.muted}`,\r\n background: tokens.colors.background.surface,\r\n fontFamily: tokens.typography.fontFamily.mono,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.muted,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {commandString}\r\n </div>\r\n )}\r\n\r\n {/* Hazardous confirmation */}\r\n {showConfirm && (\r\n <div\r\n role=\"alertdialog\"\r\n aria-label=\"Confirm hazardous command\"\r\n style={{\r\n padding: tokens.spacing.smd,\r\n borderTop: `1px solid ${tokens.colors.status.critical}44`,\r\n background: `${tokens.colors.status.critical}12`,\r\n }}\r\n >\r\n <div\r\n style={{\r\n fontWeight: tokens.typography.fontWeight.bold,\r\n color: tokens.colors.status.critical,\r\n marginBottom: tokens.spacing.sm,\r\n fontSize: tokens.typography.fontSize.sm,\r\n }}\r\n >\r\n Confirm Hazardous Command\r\n </div>\r\n <p\r\n style={{\r\n fontSize: tokens.typography.fontSize.xs,\r\n color: tokens.colors.text.secondary,\r\n marginBottom: tokens.spacing.smd,\r\n lineHeight: tokens.typography.lineHeight.normal,\r\n }}\r\n >\r\n {hazardousDescription ||\r\n `Are you sure you want to send ${target} ${command}?`}\r\n </p>\r\n <div style={{ display: \"flex\", gap: tokens.spacing.sm }}>\r\n <button\r\n onClick={handleSend}\r\n style={{\r\n background: tokens.colors.status.critical,\r\n color: tokens.colors.text.inverse,\r\n border: \"none\",\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\r\n fontSize: tokens.typography.fontSize.xs,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n cursor: \"pointer\",\r\n transition: \"opacity 150ms ease\",\r\n }}\r\n >\r\n Confirm Send\r\n </button>\r\n <button\r\n onClick={() => setShowConfirm(false)}\r\n style={{\r\n background: tokens.colors.background.base,\r\n color: tokens.colors.text.secondary,\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.md}`,\r\n fontSize: tokens.typography.fontSize.xs,\r\n cursor: \"pointer\",\r\n transition: \"opacity 150ms ease\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Send button bar */}\r\n {!showConfirm && (\r\n <div\r\n style={{\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n borderTop: `1px solid ${tokens.colors.border.muted}`,\r\n background: tokens.colors.background.surface,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"space-between\",\r\n }}\r\n >\r\n <button\r\n onClick={resetToDefaults}\r\n aria-label=\"Reset all parameters to defaults\"\r\n style={{\r\n background: \"transparent\",\r\n color: tokens.colors.text.muted,\r\n border: `1px solid ${tokens.colors.border.muted}`,\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.xs} ${tokens.spacing.sm}`,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n cursor: \"pointer\",\r\n transition: \"all 150ms ease\",\r\n }}\r\n >\r\n Reset Defaults\r\n </button>\r\n <button\r\n onClick={handleSend}\r\n disabled={disabled || sending}\r\n aria-busy={sending}\r\n style={{\r\n background: hazardous\r\n ? tokens.colors.status.critical\r\n : tokens.colors.interactive.default,\r\n color: tokens.colors.text.inverse,\r\n border: \"none\",\r\n borderRadius: tokens.borderRadius.md,\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.lg}`,\r\n fontSize: tokens.typography.fontSize.sm,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n cursor: disabled || sending ? \"not-allowed\" : \"pointer\",\r\n opacity: disabled || sending ? 0.5 : 1,\r\n transition: \"opacity 150ms ease\",\r\n }}\r\n >\r\n {sending ? \"Sending...\" : \"Send Command\"}\r\n </button>\r\n </div>\r\n )}\r\n\r\n {/* History panel */}\r\n {showHistoryPanel && history.length > 0 && (\r\n <div\r\n role=\"list\"\r\n aria-label=\"Command history\"\r\n style={{\r\n borderTop: `1px solid ${tokens.colors.border.muted}`,\r\n background: tokens.colors.background.surface,\r\n maxHeight: 200,\r\n overflow: \"auto\",\r\n }}\r\n >\r\n <div\r\n style={{\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n color: tokens.colors.text.muted,\r\n fontWeight: tokens.typography.fontWeight.medium,\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"0.5px\",\r\n }}\r\n >\r\n Command History\r\n </div>\r\n {history\r\n .slice()\r\n .reverse()\r\n .map((h) => (\r\n <div\r\n role=\"listitem\"\r\n key={h.id}\r\n style={{\r\n borderBottom: `1px solid ${tokens.colors.border.muted}`,\r\n }}\r\n >\r\n <button\r\n type=\"button\"\r\n aria-label={`${h.status} at ${h.timestamp.toLocaleTimeString()}`}\r\n style={{\r\n width: \"100%\",\r\n textAlign: \"left\",\r\n padding: `${tokens.spacing.sm} ${tokens.spacing.smd}`,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: tokens.spacing.sm,\r\n cursor: \"pointer\",\r\n transition: \"background 150ms ease\",\r\n border: \"none\",\r\n background: \"transparent\",\r\n color: \"inherit\",\r\n }}\r\n onClick={() => setValues(h.parameters)}\r\n >\r\n {/* Astro UX status shape */}\r\n <span\r\n aria-hidden=\"true\"\r\n style={{\r\n width: 8,\r\n height: 8,\r\n flexShrink: 0,\r\n ...(h.status === \"success\"\r\n ? {\r\n borderRadius: tokens.borderRadius.full,\r\n background: tokens.colors.status.normal,\r\n }\r\n : h.status === \"error\"\r\n ? {\r\n borderRadius: 0,\r\n background: tokens.colors.status.critical,\r\n clipPath: \"polygon(50% 100%, 0% 0%, 100% 0%)\",\r\n }\r\n : {\r\n borderRadius: tokens.borderRadius.full,\r\n background: \"transparent\",\r\n border: `2px solid ${tokens.colors.status.standby}`,\r\n }),\r\n }}\r\n />\r\n <span\r\n style={{\r\n color: tokens.colors.text.muted,\r\n fontFamily: tokens.typography.fontFamily.mono,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n flexShrink: 0,\r\n }}\r\n >\r\n {h.timestamp.toLocaleTimeString()}\r\n </span>\r\n <span\r\n style={{\r\n fontFamily: tokens.typography.fontFamily.mono,\r\n fontSize: tokens.typography.fontSize.xxs,\r\n flex: 1,\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n }}\r\n >\r\n {Object.entries(h.parameters)\r\n .map(([k, v]) => `${k}=${JSON.stringify(v)}`)\r\n .join(\", \")}\r\n </span>\r\n {h.error && (\r\n <span\r\n style={{\r\n fontSize: tokens.typography.fontSize.micro,\r\n color: tokens.colors.status.critical,\r\n }}\r\n >\r\n {h.error}\r\n </span>\r\n )}\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n});\r\n\r\nexport default CommandBuilder;\r\n"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import { default as React } from 'react';
2
2
  import { LabelPlacement } from '../inputs/Input';
3
-
4
3
  export interface ConnectionConfig {
5
4
  /** Host */
6
5
  host: string;
7
6
  /** Port */
8
7
  port: number;
9
8
  /** Protocol */
10
- protocol: 'ws' | 'wss' | 'mqtt' | 'mqtts' | 'tcp';
9
+ protocol: "ws" | "wss" | "mqtt" | "mqtts" | "tcp";
11
10
  /** Path (e.g. /mqtt) */
12
11
  path?: string;
13
12
  /** Username */
@@ -27,7 +26,7 @@ export interface ConnectionFormProps {
27
26
  /** Connection in progress */
28
27
  connecting?: boolean;
29
28
  /** Default protocol */
30
- defaultProtocol?: ConnectionConfig['protocol'];
29
+ defaultProtocol?: ConnectionConfig["protocol"];
31
30
  /** Default host */
32
31
  defaultHost?: string;
33
32
  /** Default port */