@openc3/vue-common 5.21.0-beta0

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 (399) hide show
  1. package/LICENSE.txt +729 -0
  2. package/README.md +25 -0
  3. package/dist/ArrayWidget-ChaMDaRA.js +105 -0
  4. package/dist/ArrayWidget-ChaMDaRA.js.map +1 -0
  5. package/dist/ArrayWidget-x7le0X73.cjs +3 -0
  6. package/dist/ArrayWidget-x7le0X73.cjs.map +1 -0
  7. package/dist/AstroStatus-CILMWL6F.cjs +2 -0
  8. package/dist/AstroStatus-CILMWL6F.cjs.map +1 -0
  9. package/dist/AstroStatus-CY9VkeTN.js +40 -0
  10. package/dist/AstroStatus-CY9VkeTN.js.map +1 -0
  11. package/dist/BarColumn-CqXfFAQ9.js +106 -0
  12. package/dist/BarColumn-CqXfFAQ9.js.map +1 -0
  13. package/dist/BarColumn-Ct4izXqV.cjs +2 -0
  14. package/dist/BarColumn-Ct4izXqV.cjs.map +1 -0
  15. package/dist/BlockWidget-BPefRY_h.cjs +3 -0
  16. package/dist/BlockWidget-BPefRY_h.cjs.map +1 -0
  17. package/dist/BlockWidget-DjiPs6ID.js +111 -0
  18. package/dist/BlockWidget-DjiPs6ID.js.map +1 -0
  19. package/dist/ButtonWidget-Dd80CjGt.js +165 -0
  20. package/dist/ButtonWidget-Dd80CjGt.js.map +1 -0
  21. package/dist/ButtonWidget-SoiP15gH.cjs +3 -0
  22. package/dist/ButtonWidget-SoiP15gH.cjs.map +1 -0
  23. package/dist/CanvasWidget-ALHiDq5o.js +39 -0
  24. package/dist/CanvasWidget-ALHiDq5o.js.map +1 -0
  25. package/dist/CanvasWidget-JapjwSXd.cjs +2 -0
  26. package/dist/CanvasWidget-JapjwSXd.cjs.map +1 -0
  27. package/dist/CanvasdotWidget-BU42MGW6.cjs +2 -0
  28. package/dist/CanvasdotWidget-BU42MGW6.cjs.map +1 -0
  29. package/dist/CanvasdotWidget-JkDXGoHm.js +19 -0
  30. package/dist/CanvasdotWidget-JkDXGoHm.js.map +1 -0
  31. package/dist/CanvasimageWidget-CQ_ZlEFj.cjs +2 -0
  32. package/dist/CanvasimageWidget-CQ_ZlEFj.cjs.map +1 -0
  33. package/dist/CanvasimageWidget-CTXlEJgA.js +58 -0
  34. package/dist/CanvasimageWidget-CTXlEJgA.js.map +1 -0
  35. package/dist/CanvasimagevalueWidget-CihOXOHH.js +107 -0
  36. package/dist/CanvasimagevalueWidget-CihOXOHH.js.map +1 -0
  37. package/dist/CanvasimagevalueWidget-DKejEVKr.cjs +2 -0
  38. package/dist/CanvasimagevalueWidget-DKejEVKr.cjs.map +1 -0
  39. package/dist/CanvaslabelWidget-2uD1FRT0.js +23 -0
  40. package/dist/CanvaslabelWidget-2uD1FRT0.js.map +1 -0
  41. package/dist/CanvaslabelWidget-zKoAOaaE.cjs +2 -0
  42. package/dist/CanvaslabelWidget-zKoAOaaE.cjs.map +1 -0
  43. package/dist/CanvaslabelvalueWidget-BCd0ssW9.js +42 -0
  44. package/dist/CanvaslabelvalueWidget-BCd0ssW9.js.map +1 -0
  45. package/dist/CanvaslabelvalueWidget-ZnyvNaVM.cjs +2 -0
  46. package/dist/CanvaslabelvalueWidget-ZnyvNaVM.cjs.map +1 -0
  47. package/dist/CanvaslineWidget-BRFrT-9r.cjs +2 -0
  48. package/dist/CanvaslineWidget-BRFrT-9r.cjs.map +1 -0
  49. package/dist/CanvaslineWidget-Cc8vj_vu.js +28 -0
  50. package/dist/CanvaslineWidget-Cc8vj_vu.js.map +1 -0
  51. package/dist/CanvaslinevalueWidget-CJTmkXEr.js +44 -0
  52. package/dist/CanvaslinevalueWidget-CJTmkXEr.js.map +1 -0
  53. package/dist/CanvaslinevalueWidget-DgIU-2d6.cjs +2 -0
  54. package/dist/CanvaslinevalueWidget-DgIU-2d6.cjs.map +1 -0
  55. package/dist/CheckbuttonWidget-BrUBiJWn.cjs +2 -0
  56. package/dist/CheckbuttonWidget-BrUBiJWn.cjs.map +1 -0
  57. package/dist/CheckbuttonWidget-lZD4wLcB.js +37 -0
  58. package/dist/CheckbuttonWidget-lZD4wLcB.js.map +1 -0
  59. package/dist/ComboboxWidget-BUMleWlR.cjs +2 -0
  60. package/dist/ComboboxWidget-BUMleWlR.cjs.map +1 -0
  61. package/dist/ComboboxWidget-D-nVY2Zf.js +37 -0
  62. package/dist/ComboboxWidget-D-nVY2Zf.js.map +1 -0
  63. package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs +2 -0
  64. package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs.map +1 -0
  65. package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js +10 -0
  66. package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js.map +1 -0
  67. package/dist/CriticalCmdDialog-BvPQYRie.cjs +2 -0
  68. package/dist/CriticalCmdDialog-BvPQYRie.cjs.map +1 -0
  69. package/dist/CriticalCmdDialog-ChYR9_7n.js +270 -0
  70. package/dist/CriticalCmdDialog-ChYR9_7n.js.map +1 -0
  71. package/dist/DateWidget-3e2qqqxw.cjs +2 -0
  72. package/dist/DateWidget-3e2qqqxw.cjs.map +1 -0
  73. package/dist/DateWidget-Bs2NufYI.js +40 -0
  74. package/dist/DateWidget-Bs2NufYI.js.map +1 -0
  75. package/dist/DetailsDialog-8ixZ1oPd.cjs +2 -0
  76. package/dist/DetailsDialog-8ixZ1oPd.cjs.map +1 -0
  77. package/dist/DetailsDialog-ScKx0N2e.js +767 -0
  78. package/dist/DetailsDialog-ScKx0N2e.js.map +1 -0
  79. package/dist/DynamicWidget-3wHr6Ng-.cjs +2 -0
  80. package/dist/DynamicWidget-3wHr6Ng-.cjs.map +1 -0
  81. package/dist/DynamicWidget-m9EliUR2.js +35 -0
  82. package/dist/DynamicWidget-m9EliUR2.js.map +1 -0
  83. package/dist/FormatvalueWidget-DEj59HDj.js +44 -0
  84. package/dist/FormatvalueWidget-DEj59HDj.js.map +1 -0
  85. package/dist/FormatvalueWidget-DK0tTvcs.cjs +2 -0
  86. package/dist/FormatvalueWidget-DK0tTvcs.cjs.map +1 -0
  87. package/dist/Graph-D2frd7mZ.js +1999 -0
  88. package/dist/Graph-D2frd7mZ.js.map +1 -0
  89. package/dist/Graph-DFEMzAGq.cjs +2 -0
  90. package/dist/Graph-DFEMzAGq.cjs.map +1 -0
  91. package/dist/GraphWidget-CbyYREVa.cjs +2 -0
  92. package/dist/GraphWidget-CbyYREVa.cjs.map +1 -0
  93. package/dist/GraphWidget-CvlfqTgn.js +129 -0
  94. package/dist/GraphWidget-CvlfqTgn.js.map +1 -0
  95. package/dist/HorizontalWidget-BEOYwm8D.js +41 -0
  96. package/dist/HorizontalWidget-BEOYwm8D.js.map +1 -0
  97. package/dist/HorizontalWidget-xEd4ZLsc.cjs +2 -0
  98. package/dist/HorizontalWidget-xEd4ZLsc.cjs.map +1 -0
  99. package/dist/HorizontalboxWidget-C2wA9_HA.js +38 -0
  100. package/dist/HorizontalboxWidget-C2wA9_HA.js.map +1 -0
  101. package/dist/HorizontalboxWidget-xwLnkDXf.cjs +2 -0
  102. package/dist/HorizontalboxWidget-xwLnkDXf.cjs.map +1 -0
  103. package/dist/HorizontallineWidget-BCKOQase.cjs +2 -0
  104. package/dist/HorizontallineWidget-BCKOQase.cjs.map +1 -0
  105. package/dist/HorizontallineWidget-BdlNB951.js +11 -0
  106. package/dist/HorizontallineWidget-BdlNB951.js.map +1 -0
  107. package/dist/IframeWidget-C42hZbe_.cjs +2 -0
  108. package/dist/IframeWidget-C42hZbe_.cjs.map +1 -0
  109. package/dist/IframeWidget-qwGlLyoS.js +29 -0
  110. package/dist/IframeWidget-qwGlLyoS.js.map +1 -0
  111. package/dist/ImageLoader-BSTQyLlJ.cjs +2 -0
  112. package/dist/ImageLoader-BSTQyLlJ.cjs.map +1 -0
  113. package/dist/ImageLoader-CQAyutzR.js +36 -0
  114. package/dist/ImageLoader-CQAyutzR.js.map +1 -0
  115. package/dist/ImageviewerWidget-B0HJk4Tf.cjs +2 -0
  116. package/dist/ImageviewerWidget-B0HJk4Tf.cjs.map +1 -0
  117. package/dist/ImageviewerWidget-CDeYB2QG.js +37 -0
  118. package/dist/ImageviewerWidget-CDeYB2QG.js.map +1 -0
  119. package/dist/InterfacesTab-D-VIrHHf.js +92 -0
  120. package/dist/InterfacesTab-D-VIrHHf.js.map +1 -0
  121. package/dist/InterfacesTab-NTrgd1dN.cjs +2 -0
  122. package/dist/InterfacesTab-NTrgd1dN.cjs.map +1 -0
  123. package/dist/LabelWidget-B1-se7_B.cjs +2 -0
  124. package/dist/LabelWidget-B1-se7_B.cjs.map +1 -0
  125. package/dist/LabelWidget-C5_cj8pA.js +48 -0
  126. package/dist/LabelWidget-C5_cj8pA.js.map +1 -0
  127. package/dist/LabelledWidget-3aDkVYzF.cjs +2 -0
  128. package/dist/LabelledWidget-3aDkVYzF.cjs.map +1 -0
  129. package/dist/LabelledWidget-DWOPmkyP.js +42 -0
  130. package/dist/LabelledWidget-DWOPmkyP.js.map +1 -0
  131. package/dist/LabelprogressbarWidget-DFPXYOTH.js +43 -0
  132. package/dist/LabelprogressbarWidget-DFPXYOTH.js.map +1 -0
  133. package/dist/LabelprogressbarWidget-Dsiw-uBJ.cjs +2 -0
  134. package/dist/LabelprogressbarWidget-Dsiw-uBJ.cjs.map +1 -0
  135. package/dist/LabelsparklineWidget-DG_Q8WOZ.js +44 -0
  136. package/dist/LabelsparklineWidget-DG_Q8WOZ.js.map +1 -0
  137. package/dist/LabelsparklineWidget-w6pdf_eu.cjs +2 -0
  138. package/dist/LabelsparklineWidget-w6pdf_eu.cjs.map +1 -0
  139. package/dist/LabelvalueWidget-CRtYLZfm.cjs +2 -0
  140. package/dist/LabelvalueWidget-CRtYLZfm.cjs.map +1 -0
  141. package/dist/LabelvalueWidget-CxL0zxQr.js +58 -0
  142. package/dist/LabelvalueWidget-CxL0zxQr.js.map +1 -0
  143. package/dist/LabelvaluedescWidget-CF9py8m9.cjs +2 -0
  144. package/dist/LabelvaluedescWidget-CF9py8m9.cjs.map +1 -0
  145. package/dist/LabelvaluedescWidget-ClWPSOeN.js +59 -0
  146. package/dist/LabelvaluedescWidget-ClWPSOeN.js.map +1 -0
  147. package/dist/LabelvaluelimitsbarWidget-DFUH0HNe.cjs +2 -0
  148. package/dist/LabelvaluelimitsbarWidget-DFUH0HNe.cjs.map +1 -0
  149. package/dist/LabelvaluelimitsbarWidget-DUyZ7KXT.js +55 -0
  150. package/dist/LabelvaluelimitsbarWidget-DUyZ7KXT.js.map +1 -0
  151. package/dist/LabelvaluelimitscolumnWidget-DdCNjIEm.js +45 -0
  152. package/dist/LabelvaluelimitscolumnWidget-DdCNjIEm.js.map +1 -0
  153. package/dist/LabelvaluelimitscolumnWidget-k0hVnMUV.cjs +2 -0
  154. package/dist/LabelvaluelimitscolumnWidget-k0hVnMUV.cjs.map +1 -0
  155. package/dist/LabelvaluerangebarWidget-CRqMQa_x.cjs +2 -0
  156. package/dist/LabelvaluerangebarWidget-CRqMQa_x.cjs.map +1 -0
  157. package/dist/LabelvaluerangebarWidget-DGJv44i4.js +79 -0
  158. package/dist/LabelvaluerangebarWidget-DGJv44i4.js.map +1 -0
  159. package/dist/Layout-C1uMy2Sd.js +14 -0
  160. package/dist/Layout-C1uMy2Sd.js.map +1 -0
  161. package/dist/Layout-C2VWUn33.cjs +2 -0
  162. package/dist/Layout-C2VWUn33.cjs.map +1 -0
  163. package/dist/LedWidget-C8LEesIO.js +69 -0
  164. package/dist/LedWidget-C8LEesIO.js.map +1 -0
  165. package/dist/LedWidget-tnHC12fA.cjs +2 -0
  166. package/dist/LedWidget-tnHC12fA.cjs.map +1 -0
  167. package/dist/LimitsbarWidget-DSJvR91d.cjs +2 -0
  168. package/dist/LimitsbarWidget-DSJvR91d.cjs.map +1 -0
  169. package/dist/LimitsbarWidget-DV94AaXX.js +52 -0
  170. package/dist/LimitsbarWidget-DV94AaXX.js.map +1 -0
  171. package/dist/LimitscolorWidget-BWfffXvj.cjs +2 -0
  172. package/dist/LimitscolorWidget-BWfffXvj.cjs.map +1 -0
  173. package/dist/LimitscolorWidget-DT_WG8Jb.js +59 -0
  174. package/dist/LimitscolorWidget-DT_WG8Jb.js.map +1 -0
  175. package/dist/LimitscolumnWidget-Ci2DqqsC.cjs +2 -0
  176. package/dist/LimitscolumnWidget-Ci2DqqsC.cjs.map +1 -0
  177. package/dist/LimitscolumnWidget-yGBCsGuc.js +49 -0
  178. package/dist/LimitscolumnWidget-yGBCsGuc.js.map +1 -0
  179. package/dist/LinegraphWidget-BG43_kkA.js +38 -0
  180. package/dist/LinegraphWidget-BG43_kkA.js.map +1 -0
  181. package/dist/LinegraphWidget-ByTUdpDj.cjs +2 -0
  182. package/dist/LinegraphWidget-ByTUdpDj.cjs.map +1 -0
  183. package/dist/MatrixbycolumnsWidget-Cfp2S5QC.js +56 -0
  184. package/dist/MatrixbycolumnsWidget-Cfp2S5QC.js.map +1 -0
  185. package/dist/MatrixbycolumnsWidget-GHZ6cCcr.cjs +2 -0
  186. package/dist/MatrixbycolumnsWidget-GHZ6cCcr.cjs.map +1 -0
  187. package/dist/MicroservicesTab-BuIftbHc.js +159 -0
  188. package/dist/MicroservicesTab-BuIftbHc.js.map +1 -0
  189. package/dist/MicroservicesTab-CdCozCVI.cjs +2 -0
  190. package/dist/MicroservicesTab-CdCozCVI.cjs.map +1 -0
  191. package/dist/OutputDialog-CjFsDUYh.js +244 -0
  192. package/dist/OutputDialog-CjFsDUYh.js.map +1 -0
  193. package/dist/OutputDialog-Dkn9Fli9.cjs +2 -0
  194. package/dist/OutputDialog-Dkn9Fli9.cjs.map +1 -0
  195. package/dist/PackagesTab-BwTViRcm.js +339 -0
  196. package/dist/PackagesTab-BwTViRcm.js.map +1 -0
  197. package/dist/PackagesTab-DPaJ_JbE.cjs +2 -0
  198. package/dist/PackagesTab-DPaJ_JbE.cjs.map +1 -0
  199. package/dist/PluginsTab-C7GizpA1.cjs +6 -0
  200. package/dist/PluginsTab-C7GizpA1.cjs.map +1 -0
  201. package/dist/PluginsTab-fld_-DT-.js +598 -0
  202. package/dist/PluginsTab-fld_-DT-.js.map +1 -0
  203. package/dist/ProgressbarWidget-BSPuQNU_.js +46 -0
  204. package/dist/ProgressbarWidget-BSPuQNU_.js.map +1 -0
  205. package/dist/ProgressbarWidget-D1wbbnow.cjs +2 -0
  206. package/dist/ProgressbarWidget-D1wbbnow.cjs.map +1 -0
  207. package/dist/RadiobuttonWidget-B4rrjT9j.js +34 -0
  208. package/dist/RadiobuttonWidget-B4rrjT9j.js.map +1 -0
  209. package/dist/RadiobuttonWidget-Bhcj3WY5.cjs +2 -0
  210. package/dist/RadiobuttonWidget-Bhcj3WY5.cjs.map +1 -0
  211. package/dist/RadiogroupWidget-CQrEv3Qs.cjs +2 -0
  212. package/dist/RadiogroupWidget-CQrEv3Qs.cjs.map +1 -0
  213. package/dist/RadiogroupWidget-VncDKxiZ.js +48 -0
  214. package/dist/RadiogroupWidget-VncDKxiZ.js.map +1 -0
  215. package/dist/RangebarWidget-Btu0oj_O.js +67 -0
  216. package/dist/RangebarWidget-Btu0oj_O.js.map +1 -0
  217. package/dist/RangebarWidget-CKmh0GEh.cjs +2 -0
  218. package/dist/RangebarWidget-CKmh0GEh.cjs.map +1 -0
  219. package/dist/RedisTab-BPFEQDx-.js +135 -0
  220. package/dist/RedisTab-BPFEQDx-.js.map +1 -0
  221. package/dist/RedisTab-DpbDcxH5.cjs +2 -0
  222. package/dist/RedisTab-DpbDcxH5.cjs.map +1 -0
  223. package/dist/RollupWidget-Bh-Gpi5l.cjs +2 -0
  224. package/dist/RollupWidget-Bh-Gpi5l.cjs.map +1 -0
  225. package/dist/RollupWidget-CIp8Akqq.js +81 -0
  226. package/dist/RollupWidget-CIp8Akqq.js.map +1 -0
  227. package/dist/RoutersTab-CTpmfcgq.js +94 -0
  228. package/dist/RoutersTab-CTpmfcgq.js.map +1 -0
  229. package/dist/RoutersTab-DLQ-_xsb.cjs +2 -0
  230. package/dist/RoutersTab-DLQ-_xsb.cjs.map +1 -0
  231. package/dist/ScriptChooser-Cku5i9C6.cjs +2 -0
  232. package/dist/ScriptChooser-Cku5i9C6.cjs.map +1 -0
  233. package/dist/ScriptChooser-Cx985GFr.js +199 -0
  234. package/dist/ScriptChooser-Cx985GFr.js.map +1 -0
  235. package/dist/ScrollwindowWidget-BIYEL78X.js +45 -0
  236. package/dist/ScrollwindowWidget-BIYEL78X.js.map +1 -0
  237. package/dist/ScrollwindowWidget-DWBLVHz1.cjs +2 -0
  238. package/dist/ScrollwindowWidget-DWBLVHz1.cjs.map +1 -0
  239. package/dist/SecretsTab-CV5WYD3N.cjs +2 -0
  240. package/dist/SecretsTab-CV5WYD3N.cjs.map +1 -0
  241. package/dist/SecretsTab-DfBaqZw2.js +202 -0
  242. package/dist/SecretsTab-DfBaqZw2.js.map +1 -0
  243. package/dist/SettingsTab-B1DNmvM5.js +1282 -0
  244. package/dist/SettingsTab-B1DNmvM5.js.map +1 -0
  245. package/dist/SettingsTab-BKD5vVwv.cjs +2 -0
  246. package/dist/SettingsTab-BKD5vVwv.cjs.map +1 -0
  247. package/dist/SignalWidget-f_2K-phy.js +61 -0
  248. package/dist/SignalWidget-f_2K-phy.js.map +1 -0
  249. package/dist/SignalWidget-vsx411XW.cjs +2 -0
  250. package/dist/SignalWidget-vsx411XW.cjs.map +1 -0
  251. package/dist/SimpleTextDialog-BLlux8b4.js +108 -0
  252. package/dist/SimpleTextDialog-BLlux8b4.js.map +1 -0
  253. package/dist/SimpleTextDialog-D2R3WQXD.cjs +2 -0
  254. package/dist/SimpleTextDialog-D2R3WQXD.cjs.map +1 -0
  255. package/dist/SpacerWidget-DGo6ZjYn.cjs +2 -0
  256. package/dist/SpacerWidget-DGo6ZjYn.cjs.map +1 -0
  257. package/dist/SpacerWidget-YhsM7srQ.js +19 -0
  258. package/dist/SpacerWidget-YhsM7srQ.js.map +1 -0
  259. package/dist/SparklineWidget-Bkx8nwqY.cjs +2 -0
  260. package/dist/SparklineWidget-Bkx8nwqY.cjs.map +1 -0
  261. package/dist/SparklineWidget-CuGChXzf.js +47 -0
  262. package/dist/SparklineWidget-CuGChXzf.js.map +1 -0
  263. package/dist/TabbookWidget-BlDW3n54.js +66 -0
  264. package/dist/TabbookWidget-BlDW3n54.js.map +1 -0
  265. package/dist/TabbookWidget-CDUj7RHp.cjs +2 -0
  266. package/dist/TabbookWidget-CDUj7RHp.cjs.map +1 -0
  267. package/dist/TargetsTab-B2Jw5Kec.js +128 -0
  268. package/dist/TargetsTab-B2Jw5Kec.js.map +1 -0
  269. package/dist/TargetsTab-fON6-iJc.cjs +2 -0
  270. package/dist/TargetsTab-fON6-iJc.cjs.map +1 -0
  271. package/dist/TextBoxDialog-CZ3h4LP-.js +110 -0
  272. package/dist/TextBoxDialog-CZ3h4LP-.js.map +1 -0
  273. package/dist/TextBoxDialog-DvUf3Cak.cjs +2 -0
  274. package/dist/TextBoxDialog-DvUf3Cak.cjs.map +1 -0
  275. package/dist/TextboxWidget-CWXCNL8K.js +92 -0
  276. package/dist/TextboxWidget-CWXCNL8K.js.map +1 -0
  277. package/dist/TextboxWidget-LhNzbjQI.cjs +2 -0
  278. package/dist/TextboxWidget-LhNzbjQI.cjs.map +1 -0
  279. package/dist/TextfieldWidget-AbalSObh.cjs +2 -0
  280. package/dist/TextfieldWidget-AbalSObh.cjs.map +1 -0
  281. package/dist/TextfieldWidget-CRVUO3wk.js +37 -0
  282. package/dist/TextfieldWidget-CRVUO3wk.js.map +1 -0
  283. package/dist/TimeWidget-BUMtokM-.cjs +2 -0
  284. package/dist/TimeWidget-BUMtokM-.cjs.map +1 -0
  285. package/dist/TimeWidget-CDo0yWlB.js +40 -0
  286. package/dist/TimeWidget-CDo0yWlB.js.map +1 -0
  287. package/dist/TitleWidget-Cvjndegg.js +26 -0
  288. package/dist/TitleWidget-Cvjndegg.js.map +1 -0
  289. package/dist/TitleWidget-DWieiIfq.cjs +2 -0
  290. package/dist/TitleWidget-DWieiIfq.cjs.map +1 -0
  291. package/dist/ToolsTab-Bu4syVrX.js +1519 -0
  292. package/dist/ToolsTab-Bu4syVrX.js.map +1 -0
  293. package/dist/ToolsTab-rS3KG7M5.cjs +7 -0
  294. package/dist/ToolsTab-rS3KG7M5.cjs.map +1 -0
  295. package/dist/TopBar-B1dOQ1W9.js +253 -0
  296. package/dist/TopBar-B1dOQ1W9.js.map +1 -0
  297. package/dist/TopBar-_j4ndwSi.cjs +2 -0
  298. package/dist/TopBar-_j4ndwSi.cjs.map +1 -0
  299. package/dist/UpgradeToEnterpriseDialog--cLHsvir.cjs +2 -0
  300. package/dist/UpgradeToEnterpriseDialog--cLHsvir.cjs.map +1 -0
  301. package/dist/UpgradeToEnterpriseDialog-CY9g4hzD.js +95 -0
  302. package/dist/UpgradeToEnterpriseDialog-CY9g4hzD.js.map +1 -0
  303. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-BrapmXxi.js +25215 -0
  304. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-BrapmXxi.js.map +1 -0
  305. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DdL5xG80.cjs +1416 -0
  306. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DdL5xG80.cjs.map +1 -0
  307. package/dist/VWidget-BRkvqAVS.cjs +2 -0
  308. package/dist/VWidget-BRkvqAVS.cjs.map +1 -0
  309. package/dist/VWidget-D9Wk0N9r.js +323 -0
  310. package/dist/VWidget-D9Wk0N9r.js.map +1 -0
  311. package/dist/ValueWidget-D3EJcN4C.js +115 -0
  312. package/dist/ValueWidget-D3EJcN4C.js.map +1 -0
  313. package/dist/ValueWidget-DxY7IZvc.cjs +2 -0
  314. package/dist/ValueWidget-DxY7IZvc.cjs.map +1 -0
  315. package/dist/ValuelimitsbarWidget-C5revcun.js +39 -0
  316. package/dist/ValuelimitsbarWidget-C5revcun.js.map +1 -0
  317. package/dist/ValuelimitsbarWidget-Dk6L7fl3.cjs +2 -0
  318. package/dist/ValuelimitsbarWidget-Dk6L7fl3.cjs.map +1 -0
  319. package/dist/ValuelimitscolumnWidget-BBEGOlON.js +38 -0
  320. package/dist/ValuelimitscolumnWidget-BBEGOlON.js.map +1 -0
  321. package/dist/ValuelimitscolumnWidget-YD_Xd3tD.cjs +2 -0
  322. package/dist/ValuelimitscolumnWidget-YD_Xd3tD.cjs.map +1 -0
  323. package/dist/ValuerangebarWidget-BtoenJky.cjs +2 -0
  324. package/dist/ValuerangebarWidget-BtoenJky.cjs.map +1 -0
  325. package/dist/ValuerangebarWidget-D70Xk8rM.js +65 -0
  326. package/dist/ValuerangebarWidget-D70Xk8rM.js.map +1 -0
  327. package/dist/VerticalWidget-Dw11Ey1R.cjs +2 -0
  328. package/dist/VerticalWidget-Dw11Ey1R.cjs.map +1 -0
  329. package/dist/VerticalWidget-RIOu-NI3.js +41 -0
  330. package/dist/VerticalWidget-RIOu-NI3.js.map +1 -0
  331. package/dist/VerticalboxWidget-BUjeAxtO.js +37 -0
  332. package/dist/VerticalboxWidget-BUjeAxtO.js.map +1 -0
  333. package/dist/VerticalboxWidget-DT-OCuyc.cjs +2 -0
  334. package/dist/VerticalboxWidget-DT-OCuyc.cjs.map +1 -0
  335. package/dist/Widget-C-EiCtmV.cjs +2 -0
  336. package/dist/Widget-C-EiCtmV.cjs.map +1 -0
  337. package/dist/Widget-C5V53T-a.js +197 -0
  338. package/dist/Widget-C5V53T-a.js.map +1 -0
  339. package/dist/addMonths-Be4oiWXO.js +19 -0
  340. package/dist/addMonths-Be4oiWXO.js.map +1 -0
  341. package/dist/addMonths-foItT0GW.cjs +2 -0
  342. package/dist/addMonths-foItT0GW.cjs.map +1 -0
  343. package/dist/axios-CXDYiOMX.js +1705 -0
  344. package/dist/axios-CXDYiOMX.js.map +1 -0
  345. package/dist/axios-tuVKNgv9.cjs +7 -0
  346. package/dist/axios-tuVKNgv9.cjs.map +1 -0
  347. package/dist/components.cjs +7 -0
  348. package/dist/components.cjs.map +1 -0
  349. package/dist/components.js +2936 -0
  350. package/dist/components.js.map +1 -0
  351. package/dist/fileIcon-BduOQcTc.cjs +2 -0
  352. package/dist/fileIcon-BduOQcTc.cjs.map +1 -0
  353. package/dist/fileIcon-DqRHb1_Z.js +22 -0
  354. package/dist/fileIcon-DqRHb1_Z.js.map +1 -0
  355. package/dist/format-BDZ4AOJt.cjs +2 -0
  356. package/dist/format-BDZ4AOJt.cjs.map +1 -0
  357. package/dist/format-Da42caYw.js +1229 -0
  358. package/dist/format-Da42caYw.js.map +1 -0
  359. package/dist/icons/status-dark.png +0 -0
  360. package/dist/icons/status-dark.xcf +0 -0
  361. package/dist/icons/status-light.png +0 -0
  362. package/dist/icons.cjs +2 -0
  363. package/dist/icons.cjs.map +1 -0
  364. package/dist/icons.js +157 -0
  365. package/dist/icons.js.map +1 -0
  366. package/dist/parse-BO9ihK1v.cjs +2 -0
  367. package/dist/parse-BO9ihK1v.cjs.map +1 -0
  368. package/dist/parse-dDr1Btat.js +1556 -0
  369. package/dist/parse-dDr1Btat.js.map +1 -0
  370. package/dist/plugins.cjs +9 -0
  371. package/dist/plugins.cjs.map +1 -0
  372. package/dist/plugins.js +771 -0
  373. package/dist/plugins.js.map +1 -0
  374. package/dist/style.css +1 -0
  375. package/dist/timeFilters-CN3Tdo2Z.js +607 -0
  376. package/dist/timeFilters-CN3Tdo2Z.js.map +1 -0
  377. package/dist/timeFilters-DwWhNG4a.cjs +2 -0
  378. package/dist/timeFilters-DwWhNG4a.cjs.map +1 -0
  379. package/dist/tools/admin.cjs +13 -0
  380. package/dist/tools/admin.cjs.map +1 -0
  381. package/dist/tools/admin.js +1909 -0
  382. package/dist/tools/admin.js.map +1 -0
  383. package/dist/tools/base.cjs +2 -0
  384. package/dist/tools/base.cjs.map +1 -0
  385. package/dist/tools/base.js +1580 -0
  386. package/dist/tools/base.js.map +1 -0
  387. package/dist/tools/calendar.cjs +2 -0
  388. package/dist/tools/calendar.cjs.map +1 -0
  389. package/dist/tools/calendar.js +1591 -0
  390. package/dist/tools/calendar.js.map +1 -0
  391. package/dist/util.cjs +2 -0
  392. package/dist/util.cjs.map +1 -0
  393. package/dist/util.js +9 -0
  394. package/dist/util.js.map +1 -0
  395. package/dist/widgets.cjs +2 -0
  396. package/dist/widgets.cjs.map +1 -0
  397. package/dist/widgets.js +130 -0
  398. package/dist/widgets.js.map +1 -0
  399. package/package.json +95 -0
@@ -0,0 +1,2936 @@
1
+ import { A as it, O as st } from "./OutputDialog-CjFsDUYh.js";
2
+ import { n as E, i as U, a as F, r as H, W as X, l as Y, s as j } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-BrapmXxi.js";
3
+ import { D as nt, b as at } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-BrapmXxi.js";
4
+ import { resolveComponent as o, openBlock as w, createBlock as x, withKeys as z, withCtx as n, createVNode as i, createElementVNode as d, withModifiers as O, withDirectives as R, toDisplayString as N, vShow as L, createTextVNode as _, normalizeProps as V, guardReactiveProps as D, createElementBlock as M, Fragment as q, renderList as J, createCommentVNode as S, normalizeStyle as G } from "vue";
5
+ import { _ as A } from "./CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js";
6
+ import { C as rt } from "./CriticalCmdDialog-ChYR9_7n.js";
7
+ import { D as ct } from "./DetailsDialog-ScKx0N2e.js";
8
+ import { E as mt, S as ht } from "./ScriptChooser-Cx985GFr.js";
9
+ import { f as Q } from "./fileIcon-DqRHb1_Z.js";
10
+ import { G as pt, a as gt, b as vt } from "./Graph-D2frd7mZ.js";
11
+ import { AstroStatusColors as W, UnknownToAstroStatus as K } from "./icons.js";
12
+ import { T as $ } from "./timeFilters-CN3Tdo2Z.js";
13
+ import { f as ee } from "./format-Da42caYw.js";
14
+ import { S as yt } from "./SimpleTextDialog-BLlux8b4.js";
15
+ import { T as wt } from "./TextBoxDialog-CZ3h4LP-.js";
16
+ import { T as xt } from "./TopBar-B1dOQ1W9.js";
17
+ import { U as Ct } from "./UpgradeToEnterpriseDialog-CY9g4hzD.js";
18
+ class te {
19
+ constructor() {
20
+ E.get("/openc3-api/autocomplete/data/screen").then((e) => {
21
+ this.autocompleteData = e.data;
22
+ }), this.api = new U();
23
+ }
24
+ async getCompletions(e, s, r, l, a) {
25
+ var u = s.getLine(r.row), m = u.slice(0, r.column), f = m.trimStart().split(/ (?![^<]*>)/), p = this.autocompleteData;
26
+ f.length > 1 && (p = p.find((c) => c.caption === f[0]));
27
+ var g = {}, h = !0;
28
+ if (p && p.params) {
29
+ p.params.length == f.length - 1 && (h = !1);
30
+ var k = p.params[f.length - 2];
31
+ if (k["Target name"]) {
32
+ var C = await this.api.get_target_names();
33
+ p = C.reduce((c, b) => (c[b] = 1, c), {});
34
+ } else if (k["Packet name"]) {
35
+ var T = f[f.length - 2], y = await this.api.get_all_tlm(T);
36
+ p = y.reduce(
37
+ (c, b) => (c[b.packet_name] = b.description, c),
38
+ {}
39
+ );
40
+ } else if (k["Item name"]) {
41
+ var T = f[f.length - 3], v = f[f.length - 2], v = await this.api.get_tlm(T, v);
42
+ p = v.items.reduce(
43
+ (b, P) => (b[P.name] = P.description, b),
44
+ {}
45
+ );
46
+ } else
47
+ p = k;
48
+ g = Object.keys(p || {}).map((c) => {
49
+ var b = {
50
+ value: c + (h ? " " : ""),
51
+ // We want the autoComplete to continue right up
52
+ // to the last parameter
53
+ command: h && "startAutocomplete"
54
+ };
55
+ return typeof p[c] == "string" && (b.meta = p[c]), b;
56
+ });
57
+ } else
58
+ g = p;
59
+ a(null, g);
60
+ }
61
+ }
62
+ const Ge = {
63
+ data: {
64
+ configKey: "",
65
+ // Applications can set to avoid persisting default config
66
+ // Useful when loading and setting existing config
67
+ dontSaveDefaultConfig: !1
68
+ },
69
+ methods: {
70
+ loadDefaultConfig: function() {
71
+ return localStorage[`${this.configKey}__default`] ? JSON.parse(localStorage[`${this.configKey}__default`]) : {};
72
+ },
73
+ saveDefaultConfig: function(t) {
74
+ this.dontSaveDefaultConfig !== !0 && (localStorage[`${this.configKey}__default`] = JSON.stringify(t));
75
+ },
76
+ openConfigBase: function(t, e = !1, s = null) {
77
+ new U().load_config(this.configKey, t).then((r) => {
78
+ r ? (this.$notify.normal({
79
+ title: "Loading configuration",
80
+ body: t
81
+ }), s && s(JSON.parse(r)), e || this.$route.fullPath.includes(t) || this.$router.push({
82
+ query: {
83
+ config: t
84
+ }
85
+ })) : this.$notify.caution({
86
+ title: "Unknown configuration",
87
+ body: t
88
+ });
89
+ }).catch((r) => {
90
+ r && this.$notify.serious({
91
+ title: `Error opening configuration: ${t}`,
92
+ body: r
93
+ });
94
+ });
95
+ },
96
+ saveConfigBase: function(t, e) {
97
+ new U().save_config(this.configKey, t, JSON.stringify(e)).then(() => {
98
+ this.$notify.normal({
99
+ title: "Saved configuration",
100
+ body: t
101
+ });
102
+ }).catch((s) => {
103
+ s && this.$notify.serious({
104
+ title: `Error saving configuration: ${t}`,
105
+ body: s
106
+ });
107
+ });
108
+ },
109
+ resetConfigBase: function() {
110
+ localStorage.removeItem(`${this.configKey}__default`);
111
+ const t = { ...this.$route.query };
112
+ delete t.config, this.$router.replace({ query: t });
113
+ }
114
+ }
115
+ }, ie = {
116
+ props: {
117
+ configKey: String,
118
+ modelValue: Boolean
119
+ // modelValue is the default prop when using v-model
120
+ },
121
+ data() {
122
+ return {
123
+ configs: [],
124
+ headers: [
125
+ {
126
+ title: "Configuration",
127
+ value: "config"
128
+ },
129
+ {
130
+ title: "Actions",
131
+ value: "actions",
132
+ align: "end",
133
+ sortable: !1
134
+ }
135
+ ],
136
+ search: null,
137
+ selectedRows: []
138
+ };
139
+ },
140
+ computed: {
141
+ selectedItem: function() {
142
+ return this.selectedRows.length ? this.configs.find(
143
+ (t) => t.configId === this.selectedRows[0]
144
+ ) : null;
145
+ },
146
+ error: function() {
147
+ return this.selectedItem === "" || this.selectedItem === null ? "Must select a config" : null;
148
+ },
149
+ show: {
150
+ get() {
151
+ return this.modelValue;
152
+ },
153
+ set(t) {
154
+ this.$emit("update:modelValue", t);
155
+ }
156
+ }
157
+ },
158
+ mounted() {
159
+ let t = -1;
160
+ new U().list_configs(this.configKey).then((e) => {
161
+ this.configs = e.map((s) => (t += 1, { configId: t, config: s }));
162
+ }).catch((e) => {
163
+ this.$emit("warning", `Failed to connect to OpenC3. ${e}`);
164
+ });
165
+ },
166
+ methods: {
167
+ selectRow: function(t) {
168
+ this.selectedRows = [t.item.configId];
169
+ },
170
+ success: function() {
171
+ this.selectedItem && (this.$emit("success", this.selectedItem.config), this.show = !1, this.search = null, this.selectedRows = []);
172
+ },
173
+ cancel: function() {
174
+ this.show = !1, this.search = null, this.selectedRows = [];
175
+ },
176
+ deleteConfig: function(t) {
177
+ this.$dialog.confirm(`Are you sure you want to delete: ${t.config}`, {
178
+ okText: "Delete",
179
+ cancelText: "Cancel"
180
+ }).then((e) => {
181
+ var s;
182
+ ((s = this.selectedItem) == null ? void 0 : s.config) === t.config && (this.selectedRows = []), this.configs.splice(this.configs.indexOf(t), 1), new U().delete_config(this.configKey, t.config);
183
+ }).catch((e) => {
184
+ e !== !0 && this.$emit(
185
+ "warning",
186
+ `Failed to delete config ${t.config} Error: ${e}`
187
+ );
188
+ });
189
+ }
190
+ }
191
+ }, se = { class: "mt-4 pa-3" }, le = ["textContent"];
192
+ function ne(t, e, s, r, l, a) {
193
+ const u = o("v-spacer"), m = o("v-toolbar"), f = o("v-text-field"), p = o("v-row"), g = o("v-btn"), h = o("v-data-table"), k = o("v-card-text"), C = o("v-card-actions"), T = o("v-card"), y = o("v-dialog");
194
+ return w(), x(y, {
195
+ modelValue: a.show,
196
+ "onUpdate:modelValue": e[4] || (e[4] = (v) => a.show = v),
197
+ onKeydown: z(a.cancel, ["esc"]),
198
+ width: "600"
199
+ }, {
200
+ default: n(() => [
201
+ i(T, null, {
202
+ default: n(() => [
203
+ d("form", {
204
+ onSubmit: e[3] || (e[3] = O((...v) => a.success && a.success(...v), ["prevent"]))
205
+ }, [
206
+ i(m, { height: "24" }, {
207
+ default: n(() => [
208
+ i(u),
209
+ e[5] || (e[5] = d("span", null, "Open Configuration", -1)),
210
+ i(u)
211
+ ]),
212
+ _: 1
213
+ }),
214
+ i(k, null, {
215
+ default: n(() => [
216
+ d("div", se, [
217
+ i(p, { dense: "" }, {
218
+ default: n(() => [
219
+ i(f, {
220
+ label: "search",
221
+ modelValue: l.search,
222
+ "onUpdate:modelValue": e[0] || (e[0] = (v) => l.search = v),
223
+ type: "text",
224
+ "prepend-inner-icon": "mdi-magnify",
225
+ clearable: "",
226
+ variant: "outlined",
227
+ density: "compact",
228
+ "clear-icon": "mdi-close-circle-outline",
229
+ autofocus: "",
230
+ "single-line": "",
231
+ "hide-details": "",
232
+ "data-test": "search"
233
+ }, null, 8, ["modelValue"])
234
+ ]),
235
+ _: 1
236
+ }),
237
+ i(h, {
238
+ modelValue: l.selectedRows,
239
+ "onUpdate:modelValue": e[1] || (e[1] = (v) => l.selectedRows = v),
240
+ "show-select": "",
241
+ "select-strategy": "single",
242
+ "item-value": "configId",
243
+ search: l.search,
244
+ headers: l.headers,
245
+ items: l.configs,
246
+ "items-per-page": 5,
247
+ "items-per-page-options": [5],
248
+ "onClick:row": e[2] || (e[2] = (v, c) => a.selectRow(c))
249
+ }, {
250
+ "item.actions": n(({ item: v }) => [
251
+ i(g, {
252
+ class: "mt-1",
253
+ icon: "mdi-delete",
254
+ variant: "text",
255
+ "data-test": "item-delete",
256
+ onClick: (c) => a.deleteConfig(v)
257
+ }, null, 8, ["onClick"])
258
+ ]),
259
+ _: 1
260
+ }, 8, ["modelValue", "search", "headers", "items"]),
261
+ i(p, { dense: "" }, {
262
+ default: n(() => [
263
+ R(d("span", {
264
+ class: "ma-2 text-red",
265
+ textContent: N(a.error)
266
+ }, null, 8, le), [
267
+ [L, a.error]
268
+ ])
269
+ ]),
270
+ _: 1
271
+ })
272
+ ])
273
+ ]),
274
+ _: 1
275
+ }),
276
+ i(C, { class: "px-2" }, {
277
+ default: n(() => [
278
+ i(u),
279
+ i(g, {
280
+ variant: "outlined",
281
+ onClick: a.cancel,
282
+ "data-test": "open-config-cancel-btn"
283
+ }, {
284
+ default: n(() => e[6] || (e[6] = [
285
+ _(" Cancel ")
286
+ ])),
287
+ _: 1
288
+ }, 8, ["onClick"]),
289
+ i(g, {
290
+ variant: "flat",
291
+ onClick: O(a.success, ["prevent"]),
292
+ type: "submit",
293
+ "data-test": "open-config-submit-btn",
294
+ disabled: !!a.error
295
+ }, {
296
+ default: n(() => e[7] || (e[7] = [
297
+ _(" Ok ")
298
+ ])),
299
+ _: 1
300
+ }, 8, ["onClick", "disabled"])
301
+ ]),
302
+ _: 1
303
+ })
304
+ ], 32)
305
+ ]),
306
+ _: 1
307
+ })
308
+ ]),
309
+ _: 1
310
+ }, 8, ["modelValue", "onKeydown"]);
311
+ }
312
+ const Ze = /* @__PURE__ */ A(ie, [["render", ne]]), ae = {
313
+ props: {
314
+ configKey: String,
315
+ modelValue: Boolean
316
+ // modelValue is the default prop when using v-model
317
+ },
318
+ data() {
319
+ return {
320
+ configName: "",
321
+ configs: [],
322
+ headers: [
323
+ {
324
+ title: "Configuration",
325
+ value: "config"
326
+ },
327
+ {
328
+ title: "Actions",
329
+ value: "actions",
330
+ align: "end",
331
+ sortable: !1
332
+ }
333
+ ],
334
+ search: null,
335
+ selectedRows: []
336
+ };
337
+ },
338
+ computed: {
339
+ selectedItem: function() {
340
+ return this.selectedRows.length ? this.configs.find(
341
+ (t) => t.configId === this.selectedRows[0]
342
+ ) : null;
343
+ },
344
+ error: function() {
345
+ return this.configName ? null : "Config must have a name";
346
+ },
347
+ show: {
348
+ get() {
349
+ return this.modelValue;
350
+ },
351
+ set(t) {
352
+ this.$emit("update:modelValue", t);
353
+ }
354
+ }
355
+ },
356
+ mounted() {
357
+ let t = -1;
358
+ new U().list_configs(this.configKey).then((e) => {
359
+ this.configs = e.map((s) => (t += 1, { configId: t, config: s }));
360
+ }).catch((e) => {
361
+ this.$emit("warning", `Failed to connect to OpenC3. ${e}`);
362
+ });
363
+ },
364
+ methods: {
365
+ selectRow: function(t) {
366
+ this.selectedRows = [t.item.configId];
367
+ },
368
+ success: function() {
369
+ this.$emit("success", this.configName), this.show = !1, this.search = null, this.selectedRows = [], this.configName = "";
370
+ },
371
+ cancel: function() {
372
+ this.show = !1, this.search = null, this.selectedRows = [], this.configName = "";
373
+ },
374
+ deleteConfig: function(t) {
375
+ this.$dialog.confirm(`Are you sure you want to delete: ${t.config}`, {
376
+ okText: "Delete",
377
+ cancelText: "Cancel"
378
+ }).then((e) => {
379
+ var s;
380
+ ((s = this.selectedItem) == null ? void 0 : s.config) === t.config && (this.selectedRows = [], this.configName = ""), this.configs.splice(this.configs.indexOf(t), 1), new U().delete_config(this.configKey, t.config);
381
+ }).catch((e) => {
382
+ e !== !0 && this.$emit(
383
+ "warning",
384
+ `Failed to delete config ${t.config} Error: ${e}`
385
+ );
386
+ });
387
+ }
388
+ },
389
+ watch: {
390
+ selectedItem: function(t) {
391
+ t && (this.configName = t.config);
392
+ }
393
+ }
394
+ }, oe = { class: "mt-4 pa-3" }, re = ["textContent"];
395
+ function de(t, e, s, r, l, a) {
396
+ const u = o("v-spacer"), m = o("v-toolbar"), f = o("v-text-field"), p = o("v-row"), g = o("v-btn"), h = o("v-data-table"), k = o("v-card-text"), C = o("v-card-actions"), T = o("v-card"), y = o("v-dialog");
397
+ return w(), x(y, {
398
+ modelValue: a.show,
399
+ "onUpdate:modelValue": e[5] || (e[5] = (v) => a.show = v),
400
+ onKeydown: z(a.cancel, ["esc"]),
401
+ width: "600"
402
+ }, {
403
+ default: n(() => [
404
+ i(T, null, {
405
+ default: n(() => [
406
+ d("form", {
407
+ onSubmit: e[4] || (e[4] = O((...v) => a.success && a.success(...v), ["prevent"]))
408
+ }, [
409
+ i(m, { height: "24" }, {
410
+ default: n(() => [
411
+ i(u),
412
+ e[6] || (e[6] = d("span", null, "Save Configuration", -1)),
413
+ i(u)
414
+ ]),
415
+ _: 1
416
+ }),
417
+ i(k, null, {
418
+ default: n(() => [
419
+ d("div", oe, [
420
+ i(p, { dense: "" }, {
421
+ default: n(() => [
422
+ i(f, {
423
+ label: "search",
424
+ modelValue: l.search,
425
+ "onUpdate:modelValue": e[0] || (e[0] = (v) => l.search = v),
426
+ type: "text",
427
+ "prepend-inner-icon": "mdi-magnify",
428
+ clearable: "",
429
+ variant: "outlined",
430
+ density: "compact",
431
+ "clear-icon": "mdi-close-circle-outline",
432
+ "single-line": "",
433
+ "hide-details": "",
434
+ "data-test": "search"
435
+ }, null, 8, ["modelValue"])
436
+ ]),
437
+ _: 1
438
+ }),
439
+ i(h, {
440
+ modelValue: l.selectedRows,
441
+ "onUpdate:modelValue": e[1] || (e[1] = (v) => l.selectedRows = v),
442
+ "show-select": "",
443
+ "select-strategy": "single",
444
+ "item-value": "configId",
445
+ search: l.search,
446
+ headers: l.headers,
447
+ items: l.configs,
448
+ "items-per-page": 5,
449
+ "items-per-page-options": [5],
450
+ "onClick:row": e[2] || (e[2] = (v, c) => a.selectRow(c))
451
+ }, {
452
+ "item.actions": n(({ item: v }) => [
453
+ i(g, {
454
+ class: "mt-1",
455
+ icon: "mdi-delete",
456
+ variant: "text",
457
+ "data-test": "item-delete",
458
+ onClick: (c) => a.deleteConfig(v)
459
+ }, null, 8, ["onClick"])
460
+ ]),
461
+ _: 1
462
+ }, 8, ["modelValue", "search", "headers", "items"]),
463
+ i(p, { dense: "" }, {
464
+ default: n(() => [
465
+ i(f, {
466
+ modelValue: l.configName,
467
+ "onUpdate:modelValue": e[3] || (e[3] = (v) => l.configName = v),
468
+ "hide-details": "",
469
+ autofocus: "",
470
+ disabled: !!a.selectedItem,
471
+ label: "Configuration Name",
472
+ "data-test": "name-input-save-config-dialog"
473
+ }, null, 8, ["modelValue", "disabled"])
474
+ ]),
475
+ _: 1
476
+ }),
477
+ i(p, { dense: "" }, {
478
+ default: n(() => [
479
+ R(d("span", {
480
+ class: "ma-2 text-red",
481
+ textContent: N(a.error)
482
+ }, null, 8, re), [
483
+ [L, a.error]
484
+ ])
485
+ ]),
486
+ _: 1
487
+ })
488
+ ])
489
+ ]),
490
+ _: 1
491
+ }),
492
+ i(C, { class: "px-2" }, {
493
+ default: n(() => [
494
+ i(u),
495
+ i(g, {
496
+ variant: "outlined",
497
+ onClick: a.cancel
498
+ }, {
499
+ default: n(() => e[7] || (e[7] = [
500
+ _(" Cancel ")
501
+ ])),
502
+ _: 1
503
+ }, 8, ["onClick"]),
504
+ i(g, {
505
+ variant: "flat",
506
+ onClick: O(a.success, ["prevent"]),
507
+ type: "submit",
508
+ "data-test": "save-config-submit-btn",
509
+ disabled: !!a.error
510
+ }, {
511
+ default: n(() => e[8] || (e[8] = [
512
+ _(" Ok ")
513
+ ])),
514
+ _: 1
515
+ }, 8, ["onClick", "disabled"])
516
+ ]),
517
+ _: 1
518
+ })
519
+ ], 32)
520
+ ]),
521
+ _: 1
522
+ })
523
+ ]),
524
+ _: 1
525
+ }, 8, ["modelValue", "onKeydown"]);
526
+ }
527
+ const He = /* @__PURE__ */ A(ae, [["render", de]]), ce = {
528
+ props: {
529
+ modelValue: Boolean,
530
+ target: {
531
+ type: String,
532
+ default: ""
533
+ },
534
+ screen: {
535
+ type: String,
536
+ default: ""
537
+ },
538
+ definition: {
539
+ type: String,
540
+ default: ""
541
+ },
542
+ keywords: {
543
+ type: Array,
544
+ default: () => []
545
+ },
546
+ errors: {
547
+ type: Array,
548
+ default: () => []
549
+ }
550
+ },
551
+ data() {
552
+ return {
553
+ file: null,
554
+ docsKeyword: "",
555
+ contextMenu: !1,
556
+ menuX: 0,
557
+ menuY: 0
558
+ };
559
+ },
560
+ computed: {
561
+ editErrors: function() {
562
+ if (this.definition === "" && !this.file)
563
+ return ["Input can not be blank."];
564
+ if (this.errors.length !== 0) {
565
+ let t = /* @__PURE__ */ new Set(), e = [];
566
+ for (const s of this.errors) {
567
+ if (t.has(s.message))
568
+ continue;
569
+ let r = `At ${s.lineNumber}: (${s.line}) ${s.message}.`;
570
+ s.usage && (r += ` Usage: ${s.usage}`), e.push(r), t.add(s.message);
571
+ }
572
+ return e;
573
+ }
574
+ return [];
575
+ },
576
+ show: {
577
+ get() {
578
+ return this.modelValue;
579
+ },
580
+ set(t) {
581
+ this.$emit("update:modelValue", t);
582
+ }
583
+ }
584
+ },
585
+ mounted: function() {
586
+ this.editor = F.edit(this.$refs.editor), this.editor.setTheme("ace/theme/twilight");
587
+ const t = this.buildScreenMode();
588
+ this.editor.session.setMode(new t()), this.editor.session.setTabSize(2), this.editor.session.setUseWrapMode(!0), this.editor.$blockScrolling = 1 / 0, this.editor.setOption("enableBasicAutocompletion", !0), this.editor.setOption("enableLiveAutocompletion", !0), this.editor.completers = [new te()], this.editor.setHighlightActiveLine(!1), this.editor.setValue(this.definition), this.editor.clearSelection(), this.editor.focus();
589
+ },
590
+ beforeUnmount() {
591
+ this.editor.destroy(), this.editor.container.remove();
592
+ },
593
+ methods: {
594
+ showContextMenu: function(t) {
595
+ this.menuX = t.pageX, this.menuY = t.pageY;
596
+ let e = this.editor.getCursorPosition(), s = this.editor.session.getTokenAt(e.row, e.column);
597
+ if (s) {
598
+ let r = s.value.trim();
599
+ r.includes(" ") ? this.docsKeyword = r.split(" ")[0] : this.docsKeyword = r, this.contextMenu = !0;
600
+ }
601
+ },
602
+ openDocumentation() {
603
+ window.open(
604
+ `${window.location.origin}/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,
605
+ "_blank"
606
+ );
607
+ },
608
+ buildScreenMode() {
609
+ let t = F.require("ace/lib/oop"), e = F.require(
610
+ "ace/mode/text_highlight_rules"
611
+ ).TextHighlightRules, s = this.keywords.join("|"), r = function() {
612
+ this.$rules = {
613
+ start: [
614
+ {
615
+ token: "comment",
616
+ regex: "#.*$"
617
+ },
618
+ {
619
+ token: "string",
620
+ regex: '".*?"'
621
+ },
622
+ {
623
+ token: "string",
624
+ regex: "'.*?'"
625
+ },
626
+ {
627
+ token: "constant.numeric",
628
+ regex: "\\b\\d+(?:\\.\\d+)?\\b"
629
+ },
630
+ {
631
+ token: "keyword",
632
+ regex: new RegExp(`^\\s*(${s})\\b`)
633
+ }
634
+ ]
635
+ }, this.normalizeRules();
636
+ };
637
+ t.inherits(r, e);
638
+ let l = function() {
639
+ this.HighlightRules = r;
640
+ }, a = F.require("ace/mode/text").Mode;
641
+ return t.inherits(l, a), (function() {
642
+ this.$id = "ace/mode/openc3";
643
+ }).call(l.prototype), l;
644
+ },
645
+ downloadScreen: function() {
646
+ const t = new Blob([this.editor.getValue()], {
647
+ type: "text/plain"
648
+ }), e = document.createElement("a");
649
+ e.href = URL.createObjectURL(t), e.setAttribute("download", `${this.screen.toLowerCase()}.txt`), e.click();
650
+ },
651
+ loadFile: function() {
652
+ const t = new FileReader();
653
+ t.readAsText(this.file);
654
+ const e = this;
655
+ t.onload = function() {
656
+ e.editor.setValue(t.result), e.file = null;
657
+ };
658
+ },
659
+ deleteScreen: function() {
660
+ this.$dialog.confirm("Are you sure you want to delete this screen?!", {
661
+ okText: "Delete",
662
+ cancelText: "Cancel"
663
+ }).then((t) => {
664
+ this.$emit("delete");
665
+ });
666
+ }
667
+ }
668
+ }, ue = { class: "mx-2" }, me = { class: "mx-2" }, he = ["textContent"];
669
+ function fe(t, e, s, r, l, a) {
670
+ const u = o("v-icon"), m = o("v-tooltip"), f = o("v-spacer"), p = o("v-toolbar"), g = o("v-row"), h = o("v-btn"), k = o("v-file-input"), C = o("v-list-item-title"), T = o("v-list-item"), y = o("v-list"), v = o("v-menu"), c = o("v-card-text"), b = o("v-card"), P = o("v-dialog");
671
+ return w(), x(P, {
672
+ persistent: "",
673
+ modelValue: a.show,
674
+ "onUpdate:modelValue": e[5] || (e[5] = (I) => a.show = I),
675
+ width: "75vw"
676
+ }, {
677
+ default: n(() => [
678
+ i(b, null, {
679
+ default: n(() => [
680
+ i(p, { height: "24" }, {
681
+ default: n(() => [
682
+ d("div", ue, [
683
+ i(m, { location: "top" }, {
684
+ activator: n(({ props: I }) => [
685
+ d("div", V(D(I)), [
686
+ i(u, {
687
+ "data-test": "delete-screen-icon",
688
+ onClick: a.deleteScreen
689
+ }, {
690
+ default: n(() => e[6] || (e[6] = [
691
+ _(" mdi-delete ")
692
+ ])),
693
+ _: 1
694
+ }, 8, ["onClick"])
695
+ ], 16)
696
+ ]),
697
+ default: n(() => [
698
+ e[7] || (e[7] = d("span", null, " Delete Screen ", -1))
699
+ ]),
700
+ _: 1
701
+ })
702
+ ]),
703
+ i(f),
704
+ d("span", null, " Edit Screen: " + N(s.target) + " " + N(s.screen), 1),
705
+ i(f),
706
+ d("div", me, [
707
+ i(m, { location: "top" }, {
708
+ activator: n(({ props: I }) => [
709
+ d("div", V(D(I)), [
710
+ i(u, {
711
+ "data-test": "download-screen-icon",
712
+ onClick: a.downloadScreen
713
+ }, {
714
+ default: n(() => e[8] || (e[8] = [
715
+ _(" mdi-download ")
716
+ ])),
717
+ _: 1
718
+ }, 8, ["onClick"])
719
+ ], 16)
720
+ ]),
721
+ default: n(() => [
722
+ e[9] || (e[9] = d("span", null, " Download Screen ", -1))
723
+ ]),
724
+ _: 1
725
+ })
726
+ ])
727
+ ]),
728
+ _: 1
729
+ }),
730
+ i(c, null, {
731
+ default: n(() => [
732
+ i(g, { class: "mt-3" }, {
733
+ default: n(() => e[10] || (e[10] = [
734
+ _(" Upload a screen file. ")
735
+ ])),
736
+ _: 1
737
+ }),
738
+ i(g, {
739
+ "no-gutters": "",
740
+ align: "center"
741
+ }, {
742
+ default: n(() => [
743
+ i(h, {
744
+ onClick: a.loadFile,
745
+ disabled: !l.file,
746
+ color: "primary",
747
+ class: "mr-3",
748
+ "data-test": "edit-screen-load"
749
+ }, {
750
+ default: n(() => e[11] || (e[11] = [
751
+ _(" Load ")
752
+ ])),
753
+ _: 1
754
+ }, 8, ["onClick", "disabled"]),
755
+ i(k, {
756
+ modelValue: l.file,
757
+ "onUpdate:modelValue": e[0] || (e[0] = (I) => l.file = I),
758
+ "truncate-length": "15",
759
+ accept: ".txt",
760
+ label: "Click to select .txt screen file."
761
+ }, null, 8, ["modelValue"])
762
+ ]),
763
+ _: 1
764
+ }),
765
+ i(g, { class: "mb-2" }, {
766
+ default: n(() => e[12] || (e[12] = [
767
+ _(" Edit the screen definition. ")
768
+ ])),
769
+ _: 1
770
+ }),
771
+ i(g, { class: "mb-2" }, {
772
+ default: n(() => [
773
+ d("pre", {
774
+ ref: "editor",
775
+ class: "editor",
776
+ onContextmenu: e[1] || (e[1] = O((...I) => a.showContextMenu && a.showContextMenu(...I), ["prevent"]))
777
+ }, null, 544),
778
+ i(v, {
779
+ modelValue: l.contextMenu,
780
+ "onUpdate:modelValue": e[2] || (e[2] = (I) => l.contextMenu = I),
781
+ target: [l.menuX, l.menuY]
782
+ }, {
783
+ default: n(() => [
784
+ i(y, null, {
785
+ default: n(() => [
786
+ i(T, { link: "" }, {
787
+ default: n(() => [
788
+ i(C, { onClick: a.openDocumentation }, {
789
+ default: n(() => [
790
+ _(N(l.docsKeyword) + " documentation ", 1)
791
+ ]),
792
+ _: 1
793
+ }, 8, ["onClick"])
794
+ ]),
795
+ _: 1
796
+ })
797
+ ]),
798
+ _: 1
799
+ })
800
+ ]),
801
+ _: 1
802
+ }, 8, ["modelValue", "target"])
803
+ ]),
804
+ _: 1
805
+ }),
806
+ (w(!0), M(q, null, J(a.editErrors, (I, Z) => (w(), x(g, {
807
+ key: Z,
808
+ class: "my-3"
809
+ }, {
810
+ default: n(() => [
811
+ d("span", {
812
+ class: "text-red",
813
+ textContent: N(I)
814
+ }, null, 8, he)
815
+ ]),
816
+ _: 2
817
+ }, 1024))), 128)),
818
+ i(g, null, {
819
+ default: n(() => [
820
+ e[15] || (e[15] = d("span", null, "Ctrl-space brings up autocomplete. Right click keywords for documentation.", -1)),
821
+ i(f),
822
+ i(h, {
823
+ onClick: e[3] || (e[3] = (I) => t.$emit("cancel")),
824
+ class: "mx-2",
825
+ variant: "outlined",
826
+ "data-test": "edit-screen-cancel"
827
+ }, {
828
+ default: n(() => e[13] || (e[13] = [
829
+ _(" Cancel ")
830
+ ])),
831
+ _: 1
832
+ }),
833
+ i(h, {
834
+ onClick: e[4] || (e[4] = (I) => t.$emit("save", t.editor.getValue())),
835
+ class: "mx-2",
836
+ color: "primary",
837
+ "data-test": "edit-screen-save"
838
+ }, {
839
+ default: n(() => e[14] || (e[14] = [
840
+ _(" Save ")
841
+ ])),
842
+ _: 1
843
+ })
844
+ ]),
845
+ _: 1
846
+ })
847
+ ]),
848
+ _: 1
849
+ })
850
+ ]),
851
+ _: 1
852
+ })
853
+ ]),
854
+ _: 1
855
+ }, 8, ["modelValue"]);
856
+ }
857
+ const pe = /* @__PURE__ */ A(ce, [["render", fe], ["__scopeId", "data-v-9e086b45"]]), ge = {};
858
+ function ve(t, e) {
859
+ return w(), M("div");
860
+ }
861
+ const Xe = /* @__PURE__ */ A(ge, [["render", ve]]), _e = {
862
+ props: {
863
+ modelValue: Boolean
864
+ },
865
+ data() {
866
+ return {
867
+ alert: "",
868
+ alertType: "success",
869
+ showAlert: !1,
870
+ search: "",
871
+ key: "",
872
+ keyValue: "",
873
+ environment: [],
874
+ headers: [
875
+ {
876
+ text: "Key",
877
+ value: "key"
878
+ },
879
+ {
880
+ text: "Value",
881
+ value: "value"
882
+ },
883
+ {
884
+ text: "Actions",
885
+ value: "actions",
886
+ align: "end",
887
+ sortable: !1
888
+ }
889
+ ]
890
+ };
891
+ },
892
+ computed: {
893
+ show: {
894
+ get() {
895
+ return this.modelValue;
896
+ },
897
+ set(t) {
898
+ this.$emit("update:modelValue", t);
899
+ }
900
+ }
901
+ },
902
+ mounted() {
903
+ this.update();
904
+ },
905
+ methods: {
906
+ alertHandler: function(t) {
907
+ this.alert = t.text, this.alertType = t.type, this.showAlert = !0;
908
+ },
909
+ update: function() {
910
+ E.get("/openc3-api/environment").then((t) => {
911
+ this.environment = t.data;
912
+ }).catch((t) => {
913
+ });
914
+ },
915
+ addEnvironment: function() {
916
+ E.post("/openc3-api/environment", {
917
+ data: {
918
+ key: this.key.toUpperCase(),
919
+ value: this.keyValue
920
+ }
921
+ }).then((t) => {
922
+ `${t.data.name}`, this.update();
923
+ }).catch((t) => {
924
+ const e = {
925
+ text: `Failed to add environment variable: ${t}`,
926
+ type: "error"
927
+ };
928
+ this.alertHandler(e);
929
+ }), this.key = "", this.keyValue = "";
930
+ },
931
+ deleteEnvironment: function(t) {
932
+ this.$dialog.confirm(`Are you sure you want to delete: ${t.key}=${t.value}`, {
933
+ okText: "Delete",
934
+ cancelText: "Cancel"
935
+ }).then((e) => E.delete(`/openc3-api/environment/${t.name}`)).then((e) => {
936
+ const s = {
937
+ text: `Removed environment variable: ${t.name}`,
938
+ type: "success"
939
+ };
940
+ this.alertHandler(s), this.update();
941
+ }).catch((e) => {
942
+ const s = {
943
+ text: `Failed to delete environment: ${e}`,
944
+ type: "error"
945
+ };
946
+ this.alertHandler(s);
947
+ });
948
+ }
949
+ }
950
+ }, ye = { class: "pa-3" };
951
+ function be(t, e, s, r, l, a) {
952
+ const u = o("v-spacer"), m = o("v-toolbar"), f = o("v-text-field"), p = o("v-row"), g = o("v-icon"), h = o("v-btn"), k = o("v-data-table"), C = o("v-col"), T = o("v-card-text"), y = o("v-card"), v = o("v-dialog");
953
+ return w(), x(v, {
954
+ modelValue: a.show,
955
+ "onUpdate:modelValue": e[4] || (e[4] = (c) => a.show = c),
956
+ width: "600"
957
+ }, {
958
+ default: n(() => [
959
+ i(y, null, {
960
+ default: n(() => [
961
+ d("form", {
962
+ onSubmit: e[3] || (e[3] = O((...c) => a.addEnvironment && a.addEnvironment(...c), ["prevent"]))
963
+ }, [
964
+ i(m, { height: "24" }, {
965
+ default: n(() => [
966
+ i(u),
967
+ e[5] || (e[5] = d("span", null, "Global Environment Variables", -1)),
968
+ i(u)
969
+ ]),
970
+ _: 1
971
+ }),
972
+ i(T, null, {
973
+ default: n(() => [
974
+ d("div", ye, [
975
+ i(p, {
976
+ dense: "",
977
+ class: "mb-2"
978
+ }, {
979
+ default: n(() => [
980
+ i(f, {
981
+ modelValue: l.search,
982
+ "onUpdate:modelValue": e[0] || (e[0] = (c) => l.search = c),
983
+ label: "search",
984
+ type: "text",
985
+ "data-test": "search",
986
+ "prepend-inner-icon": "mdi-magnify",
987
+ clearable: "",
988
+ variant: "outlined",
989
+ density: "compact",
990
+ "clear-icon": "mdi-close-circle-outline",
991
+ autofocus: "",
992
+ "single-line": "",
993
+ "hide-details": ""
994
+ }, null, 8, ["modelValue"])
995
+ ]),
996
+ _: 1
997
+ }),
998
+ i(k, {
999
+ "item-key": "name",
1000
+ "hide-default-header": "",
1001
+ "data-test": "env-table",
1002
+ search: l.search,
1003
+ headers: l.headers,
1004
+ items: l.environment,
1005
+ "items-per-page": 5,
1006
+ "items-per-page-options": [5]
1007
+ }, {
1008
+ "item.actions": n(({ item: c }) => [
1009
+ i(h, {
1010
+ onClick: (b) => a.deleteEnvironment(c),
1011
+ icon: "",
1012
+ class: "mt-1",
1013
+ "data-test": "item-delete"
1014
+ }, {
1015
+ default: n(() => [
1016
+ i(g, null, {
1017
+ default: n(() => e[6] || (e[6] = [
1018
+ _("mdi-delete")
1019
+ ])),
1020
+ _: 1
1021
+ })
1022
+ ]),
1023
+ _: 2
1024
+ }, 1032, ["onClick"])
1025
+ ]),
1026
+ _: 1
1027
+ }, 8, ["search", "headers", "items"]),
1028
+ i(p, { dense: "" }, {
1029
+ default: n(() => [
1030
+ i(C, null, {
1031
+ default: n(() => [
1032
+ i(f, {
1033
+ modelValue: l.key,
1034
+ "onUpdate:modelValue": e[1] || (e[1] = (c) => l.key = c),
1035
+ label: "Key",
1036
+ "data-test": "env-key"
1037
+ }, null, 8, ["modelValue"])
1038
+ ]),
1039
+ _: 1
1040
+ }),
1041
+ i(C, null, {
1042
+ default: n(() => [
1043
+ i(f, {
1044
+ modelValue: l.keyValue,
1045
+ "onUpdate:modelValue": e[2] || (e[2] = (c) => l.keyValue = c),
1046
+ label: "Value",
1047
+ "data-test": "env-value"
1048
+ }, null, 8, ["modelValue"])
1049
+ ]),
1050
+ _: 1
1051
+ })
1052
+ ]),
1053
+ _: 1
1054
+ }),
1055
+ i(p, { dense: "" }, {
1056
+ default: n(() => [
1057
+ i(h, {
1058
+ onClick: O(a.addEnvironment, ["prevent"]),
1059
+ block: "",
1060
+ type: "submit",
1061
+ color: "primary",
1062
+ "data-test": "add-env",
1063
+ disabled: !l.key || !l.keyValue
1064
+ }, {
1065
+ default: n(() => e[7] || (e[7] = [
1066
+ _(" Add ")
1067
+ ])),
1068
+ _: 1
1069
+ }, 8, ["onClick", "disabled"])
1070
+ ]),
1071
+ _: 1
1072
+ })
1073
+ ])
1074
+ ]),
1075
+ _: 1
1076
+ })
1077
+ ], 32)
1078
+ ]),
1079
+ _: 1
1080
+ })
1081
+ ]),
1082
+ _: 1
1083
+ }, 8, ["modelValue"]);
1084
+ }
1085
+ const Ye = /* @__PURE__ */ A(_e, [["render", be]]), we = {
1086
+ props: {
1087
+ type: {
1088
+ type: String,
1089
+ required: !0,
1090
+ validator: function(t) {
1091
+ return ["open", "save"].indexOf(t) !== -1;
1092
+ }
1093
+ },
1094
+ apiUrl: String,
1095
+ // Base API URL for use with scripts or cmd-tlm
1096
+ requireTargetParentDir: Boolean,
1097
+ // Require that the save filename be nested in a directory with the name of a target
1098
+ inputFilename: String,
1099
+ // passed if this is a 'save' dialog
1100
+ modelValue: Boolean
1101
+ },
1102
+ data() {
1103
+ return {
1104
+ tree: [],
1105
+ items: [],
1106
+ id: 1,
1107
+ search: null,
1108
+ selectedFile: null,
1109
+ disableButtons: !1,
1110
+ targets: [],
1111
+ loading: !0
1112
+ };
1113
+ },
1114
+ computed: {
1115
+ show: {
1116
+ get() {
1117
+ return this.modelValue;
1118
+ },
1119
+ set(t) {
1120
+ this.$emit("update:modelValue", t);
1121
+ }
1122
+ },
1123
+ title: function() {
1124
+ return this.type === "open" ? "File Open" : "File Save As...";
1125
+ },
1126
+ submit: function() {
1127
+ return this.type === "open" ? "OPEN" : "SAVE";
1128
+ },
1129
+ helpText: function() {
1130
+ return this.type === "open" ? "Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results." : "Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.";
1131
+ },
1132
+ error: function() {
1133
+ if (this.selectedFile === "" || this.selectedFile === null)
1134
+ return "No file selected must select a file";
1135
+ if (!this.selectedFile.match(this.validFilenameRegex) || this.selectedFile.match(/\.\.|\/\/|\.\/|\/\./)) {
1136
+ let t = `${this.selectedFile} is not a valid filename. Must `;
1137
+ return this.requireTargetParentDir && (t += "be in a target directory and "), t += `only contain alphanumeric characters (including !-_.*) and a valid extension.
1138
+
1139
+ For example: TGT1/procedures/test.py or TGT2/lib/inst.rb`, t;
1140
+ }
1141
+ return this.type === "save" && this.selectedFile.match(/\*$/) ? `${this.selectedFile} is not a valid filename. Must not end in '*'.` : null;
1142
+ },
1143
+ validFilenameRegex: function() {
1144
+ const t = "0-9a-zA-Z";
1145
+ let s = `[${`${t}\\/\\!\\-\\_\\.\\*\\'\\(\\)`}]+\\.[${t}]+`;
1146
+ return this.requireTargetParentDir && (s = `\\/?${`(${this.targets.join("|")})`}\\/${s}`), new RegExp(s);
1147
+ }
1148
+ },
1149
+ created() {
1150
+ this.loadFiles(), this.requireTargetParentDir && E.get("/openc3-api/targets").then((t) => {
1151
+ this.targets = t.data, this.targets.push("__TEMP__");
1152
+ });
1153
+ },
1154
+ methods: {
1155
+ calcIcon: function(t) {
1156
+ return Q(t);
1157
+ },
1158
+ loadFiles: function() {
1159
+ E.get(this.apiUrl).then((t) => {
1160
+ this.items = [], this.id = 1;
1161
+ for (let e of t.data)
1162
+ this.filepath = e, this.insertFile(this.items, 1, e), this.id++;
1163
+ this.inputFilename && (this.selectedFile = this.inputFilename), this.loading = !1;
1164
+ }).catch((t) => {
1165
+ this.$emit("error", `Failed to connect to OpenC3. ${t}`);
1166
+ });
1167
+ },
1168
+ clear: function() {
1169
+ this.show = !1, this.overwrite = !1, this.disableButtons = !1;
1170
+ },
1171
+ activeFile: function(t) {
1172
+ t.length === 0 ? this.selectedFile = null : (this.selectedFile = this.findItem(this.items, t[0]), setTimeout(() => {
1173
+ this.$refs.submitBtn.$el.focus();
1174
+ }, 100));
1175
+ },
1176
+ findItem: function(t, e) {
1177
+ for (let s of t) {
1178
+ if (s.id === e)
1179
+ return s.path;
1180
+ if (s.children) {
1181
+ const r = this.findItem(s.children, e);
1182
+ if (r)
1183
+ return r;
1184
+ }
1185
+ }
1186
+ return null;
1187
+ },
1188
+ exists: function(t, e) {
1189
+ let s = !1;
1190
+ for (let r of t) {
1191
+ if (r.path === e || r.path.length > 1 && r.path[r.path.length - 1] === "*" && r.path.slice(0, r.path.length - 1) === e)
1192
+ return !0;
1193
+ r.children && (s = s || this.exists(r.children, e));
1194
+ }
1195
+ return s;
1196
+ },
1197
+ success: function() {
1198
+ this.selectedFile !== null && this.error === null && (this.type === "open" ? this.openSuccess() : this.saveSuccess());
1199
+ },
1200
+ deleteTemp: function() {
1201
+ this.$dialog.confirm("Are you sure you want to delete all the temporary files?", {
1202
+ okText: "Delete",
1203
+ cancelText: "Cancel"
1204
+ }).then((t) => E.delete("/script-api/scripts/temp_files")).then((t) => {
1205
+ this.$emit("clear-temp"), this.loadFiles();
1206
+ }).catch((t) => {
1207
+ this.$notify.serious({
1208
+ title: "Error",
1209
+ body: `Failed to remove script temporary files due to ${t}`
1210
+ });
1211
+ });
1212
+ },
1213
+ openSuccess: function() {
1214
+ this.disableButtons = !0, E.get(`${this.apiUrl}/${this.selectedFile}`).then((t) => {
1215
+ const e = {
1216
+ name: this.selectedFile,
1217
+ contents: t.data.contents
1218
+ };
1219
+ t.data.suites && (e.suites = JSON.parse(t.data.suites)), t.data.error && (e.error = t.data.error), t.data.success && (e.success = t.data.success);
1220
+ const s = t.data.locked, r = t.data.breakpoints;
1221
+ this.$emit("file", { file: e, locked: s, breakpoints: r }), this.clear();
1222
+ }).catch((t) => {
1223
+ this.$emit("error", `Failed to open ${this.selectedFile}. ${t}`), this.clear();
1224
+ });
1225
+ },
1226
+ saveSuccess: function() {
1227
+ this.exists(this.items, this.selectedFile) ? this.$dialog.confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {
1228
+ okText: "Overwrite",
1229
+ cancelText: "Cancel"
1230
+ }).then((e) => {
1231
+ this.$emit("filename", this.selectedFile), this.clear();
1232
+ }).catch((e) => {
1233
+ }) : (this.$emit("filename", this.selectedFile), this.clear());
1234
+ },
1235
+ insertFile: function(t, e, s) {
1236
+ let r = s.split("/");
1237
+ if (r.length === 1) {
1238
+ t.push({
1239
+ id: this.id,
1240
+ title: r[0],
1241
+ file: "ruby",
1242
+ path: this.filepath
1243
+ }), this.id++;
1244
+ return;
1245
+ }
1246
+ const l = t.findIndex((a) => a.title === r[0]);
1247
+ l === -1 ? (t.push({
1248
+ id: this.id,
1249
+ title: r[0],
1250
+ children: [],
1251
+ path: this.filepath.split("/").slice(0, e).join("/")
1252
+ }), this.id++, this.insertFile(
1253
+ t[t.length - 1].children,
1254
+ // Start from the node we just added
1255
+ e + 1,
1256
+ r.slice(1).join("/")
1257
+ // Strip the first part of the path
1258
+ )) : this.insertFile(
1259
+ t[l].children,
1260
+ e + 1,
1261
+ r.slice(1).join("/")
1262
+ );
1263
+ }
1264
+ }
1265
+ }, Ne = { class: "pa-3" };
1266
+ function xe(t, e, s, r, l, a) {
1267
+ const u = o("v-progress-circular"), m = o("v-overlay"), f = o("v-spacer"), p = o("v-toolbar"), g = o("v-row"), h = o("v-text-field"), k = o("v-icon"), C = o("v-btn"), T = o("v-treeview"), y = o("v-card-text"), v = o("v-card"), c = o("v-dialog");
1268
+ return w(), x(c, {
1269
+ modelValue: a.show,
1270
+ "onUpdate:modelValue": e[5] || (e[5] = (b) => a.show = b),
1271
+ width: "600",
1272
+ scrollable: "",
1273
+ onKeydown: e[6] || (e[6] = z((b) => a.success(), ["enter"]))
1274
+ }, {
1275
+ default: n(() => [
1276
+ i(v, null, {
1277
+ default: n(() => [
1278
+ i(m, { "model-value": l.loading }, {
1279
+ default: n(() => [
1280
+ i(u, {
1281
+ indeterminate: "",
1282
+ absolute: "",
1283
+ size: "64"
1284
+ })
1285
+ ]),
1286
+ _: 1
1287
+ }, 8, ["model-value"]),
1288
+ d("form", {
1289
+ onSubmit: e[4] || (e[4] = O((...b) => a.success && a.success(...b), ["prevent"]))
1290
+ }, [
1291
+ i(p, { height: "24" }, {
1292
+ default: n(() => [
1293
+ i(f),
1294
+ d("span", null, N(a.title), 1),
1295
+ i(f)
1296
+ ]),
1297
+ _: 1
1298
+ }),
1299
+ i(y, null, {
1300
+ default: n(() => [
1301
+ d("div", Ne, [
1302
+ i(g, null, {
1303
+ default: n(() => [
1304
+ _(N(a.helpText), 1)
1305
+ ]),
1306
+ _: 1
1307
+ }),
1308
+ i(g, {
1309
+ dense: "",
1310
+ class: "mt-5"
1311
+ }, {
1312
+ default: n(() => [
1313
+ i(h, {
1314
+ modelValue: l.search,
1315
+ "onUpdate:modelValue": e[0] || (e[0] = (b) => l.search = b),
1316
+ flat: "",
1317
+ autofocus: "",
1318
+ "hide-details": "",
1319
+ clearable: "",
1320
+ label: "Search",
1321
+ "prepend-inner-icon": "mdi-magnify",
1322
+ density: "compact",
1323
+ "data-test": "file-open-save-search"
1324
+ }, null, 8, ["modelValue"])
1325
+ ]),
1326
+ _: 1
1327
+ }),
1328
+ i(g, {
1329
+ dense: "",
1330
+ class: "mt-2"
1331
+ }, {
1332
+ default: n(() => [
1333
+ i(T, {
1334
+ modelValue: l.tree,
1335
+ "onUpdate:modelValue": e[1] || (e[1] = (b) => l.tree = b),
1336
+ "onUpdate:activated": a.activeFile,
1337
+ density: "compact",
1338
+ activatable: "",
1339
+ ref: "tree",
1340
+ style: { width: "100%", "max-height": "60vh", overflow: "auto" },
1341
+ "item-value": "id",
1342
+ items: l.items,
1343
+ search: l.search,
1344
+ "open-on-click": s.type === "open",
1345
+ "open-all": !!l.search
1346
+ }, {
1347
+ prepend: n(({ item: b, open: P }) => [
1348
+ b.file ? (w(), x(k, { key: 1 }, {
1349
+ default: n(() => [
1350
+ _(N(a.calcIcon(b.title)), 1)
1351
+ ]),
1352
+ _: 2
1353
+ }, 1024)) : (w(), x(k, { key: 0 }, {
1354
+ default: n(() => [
1355
+ _(N(P ? "mdi-folder-open" : "mdi-folder"), 1)
1356
+ ]),
1357
+ _: 2
1358
+ }, 1024))
1359
+ ]),
1360
+ append: n(({ item: b }) => [
1361
+ b.title === "__TEMP__" ? (w(), x(C, {
1362
+ key: 0,
1363
+ icon: "",
1364
+ onClick: a.deleteTemp
1365
+ }, {
1366
+ default: n(() => [
1367
+ i(k, null, {
1368
+ default: n(() => e[7] || (e[7] = [
1369
+ _(" mdi-delete ")
1370
+ ])),
1371
+ _: 1
1372
+ })
1373
+ ]),
1374
+ _: 1
1375
+ }, 8, ["onClick"])) : S("", !0)
1376
+ ]),
1377
+ _: 1
1378
+ }, 8, ["modelValue", "onUpdate:activated", "items", "search", "open-on-click", "open-all"])
1379
+ ]),
1380
+ _: 1
1381
+ }),
1382
+ i(g, { class: "my-2" }, {
1383
+ default: n(() => [
1384
+ i(h, {
1385
+ modelValue: l.selectedFile,
1386
+ "onUpdate:modelValue": e[2] || (e[2] = (b) => l.selectedFile = b),
1387
+ "hide-details": "",
1388
+ label: "Filename",
1389
+ "data-test": "file-open-save-filename",
1390
+ disabled: s.type === "open"
1391
+ }, null, 8, ["modelValue", "disabled"])
1392
+ ]),
1393
+ _: 1
1394
+ }),
1395
+ i(g, { dense: "" }, {
1396
+ default: n(() => [
1397
+ R(d("div", {
1398
+ class: "my-2 text-red",
1399
+ style: { "white-space": "pre-line" }
1400
+ }, N(a.error), 513), [
1401
+ [L, a.error]
1402
+ ])
1403
+ ]),
1404
+ _: 1
1405
+ }),
1406
+ i(g, { class: "mt-2" }, {
1407
+ default: n(() => [
1408
+ i(f),
1409
+ i(C, {
1410
+ onClick: e[3] || (e[3] = (b) => a.show = !1),
1411
+ variant: "outlined",
1412
+ class: "mx-2",
1413
+ "data-test": "file-open-save-cancel-btn",
1414
+ disabled: l.disableButtons
1415
+ }, {
1416
+ default: n(() => e[8] || (e[8] = [
1417
+ _(" Cancel ")
1418
+ ])),
1419
+ _: 1
1420
+ }, 8, ["disabled"]),
1421
+ i(C, {
1422
+ onClick: O(a.success, ["prevent"]),
1423
+ ref: "submitBtn",
1424
+ type: "submit",
1425
+ color: "primary",
1426
+ class: "mx-2",
1427
+ "data-test": "file-open-save-submit-btn",
1428
+ disabled: l.disableButtons || !!a.error
1429
+ }, {
1430
+ default: n(() => [
1431
+ _(N(a.submit), 1)
1432
+ ]),
1433
+ _: 1
1434
+ }, 8, ["onClick", "disabled"])
1435
+ ]),
1436
+ _: 1
1437
+ })
1438
+ ])
1439
+ ]),
1440
+ _: 1
1441
+ })
1442
+ ], 32)
1443
+ ]),
1444
+ _: 1
1445
+ })
1446
+ ]),
1447
+ _: 1
1448
+ }, 8, ["modelValue"]);
1449
+ }
1450
+ const je = /* @__PURE__ */ A(we, [["render", xe]]), ke = {
1451
+ props: {
1452
+ historyCount: {
1453
+ type: Number,
1454
+ default: 200
1455
+ },
1456
+ timeZone: {
1457
+ type: String,
1458
+ default: "local"
1459
+ }
1460
+ },
1461
+ mixins: [$],
1462
+ data() {
1463
+ return {
1464
+ AstroStatusColors: W,
1465
+ data: [],
1466
+ shownData: [],
1467
+ logLevels: ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"],
1468
+ logLevel: "INFO",
1469
+ search: "",
1470
+ headers: [
1471
+ { title: "Time", value: "timestamp", nowrap: !0 },
1472
+ { title: "Level", value: "level" },
1473
+ { title: "Source", value: "microservice_name" },
1474
+ { title: "Message", value: "message" }
1475
+ ],
1476
+ cable: new H(),
1477
+ subscription: null,
1478
+ paused: !1
1479
+ };
1480
+ },
1481
+ computed: {
1482
+ buttonLabel: function() {
1483
+ return this.paused ? "Resume" : "Pause";
1484
+ },
1485
+ buttonIcon: function() {
1486
+ return this.paused ? "mdi-play" : "mdi-pause";
1487
+ }
1488
+ },
1489
+ watch: {
1490
+ logLevel: function(t, e) {
1491
+ this.createSubscription();
1492
+ }
1493
+ },
1494
+ created() {
1495
+ this.createSubscription();
1496
+ },
1497
+ unmounted() {
1498
+ this.subscription && this.subscription.unsubscribe(), this.cable.disconnect();
1499
+ },
1500
+ methods: {
1501
+ pause: function() {
1502
+ this.paused = !this.paused;
1503
+ },
1504
+ createSubscription() {
1505
+ this.subscription && (this.subscription.unsubscribe(), this.data = [], this.shownData = this.data), this.cable.createSubscription(
1506
+ "MessagesChannel",
1507
+ window.openc3Scope,
1508
+ {
1509
+ received: (t) => {
1510
+ this.cable.recordPing(), t.length > this.historyCount && t.splice(0, t.length - this.historyCount), t = t.filter((e) => {
1511
+ switch (this.logLevel) {
1512
+ case "DEBUG":
1513
+ return !0;
1514
+ case "INFO":
1515
+ if (e.level !== "DEBUG")
1516
+ return !0;
1517
+ break;
1518
+ case "WARN":
1519
+ if (e.level !== "DEBUG" && e.level !== "INFO")
1520
+ return !0;
1521
+ break;
1522
+ case "ERROR":
1523
+ if (e.level !== "DEBUG" && e.level !== "INFO" && e.level !== "WARN")
1524
+ return !0;
1525
+ break;
1526
+ case "FATAL":
1527
+ if (e.level !== "DEBUG" && e.level !== "INFO" && e.level !== "WARN" && e.level !== "ERROR")
1528
+ return !0;
1529
+ break;
1530
+ }
1531
+ return !1;
1532
+ }), t.map((e) => {
1533
+ if (e.timestamp = this.formatTimestamp(
1534
+ e["@timestamp"],
1535
+ this.timeZone
1536
+ ), e.message.raw && e.message.json_class === "String") {
1537
+ let s = "0x";
1538
+ for (let r = 0; r < e.message.raw.length; r++) {
1539
+ let l = e.message.raw[r].toString(16).toUpperCase();
1540
+ l.length < 2 && (l = "0" + l), s += l;
1541
+ }
1542
+ e.message = s;
1543
+ } else
1544
+ e.message = e.message.replaceAll("\\n", `
1545
+ `);
1546
+ }), this.data = t.reverse().concat(this.data), this.data.length > this.historyCount && (this.data.length = this.historyCount), this.paused || (this.shownData = this.data);
1547
+ }
1548
+ },
1549
+ {
1550
+ // Channel parameter is history_count with underscore
1551
+ history_count: this.historyCount,
1552
+ types: ["log", "notification", "alert"]
1553
+ }
1554
+ ).then((t) => {
1555
+ this.subscription = t;
1556
+ });
1557
+ },
1558
+ getColor(t) {
1559
+ return W[K[t]];
1560
+ },
1561
+ getStatus(t) {
1562
+ return K[t];
1563
+ },
1564
+ downloadLog() {
1565
+ const t = this.shownData.map(
1566
+ (r) => (
1567
+ // Other fields are available like container_name, msg_id ... probably not useful
1568
+ `${r.timestamp} | ${r.level} | ${r.microservice_name} | ${r.message}`
1569
+ )
1570
+ ).join(`
1571
+ `), e = new Blob([t], {
1572
+ type: "text/plain"
1573
+ }), s = document.createElement("a");
1574
+ s.href = URL.createObjectURL(e), s.setAttribute(
1575
+ "download",
1576
+ ee(Date.now(), "yyyy_MM_dd_HH_mm_ss") + "_message_log.txt"
1577
+ ), s.click();
1578
+ },
1579
+ clearLog: function() {
1580
+ this.$dialog.confirm("Are you sure you want to clear the log?", {
1581
+ okText: "Clear",
1582
+ cancelText: "Cancel"
1583
+ }).then((t) => {
1584
+ this.data = [], this.shownData = [];
1585
+ }).catch(function(t) {
1586
+ });
1587
+ }
1588
+ }
1589
+ }, Ce = { class: "d-flex align-baseline" }, Te = ["title", "datetime"], Ie = { style: { "white-space": "pre-wrap" } };
1590
+ function Ve(t, e, s, r, l, a) {
1591
+ const u = o("v-btn"), m = o("v-tooltip"), f = o("v-spacer"), p = o("v-select"), g = o("v-text-field"), h = o("v-card-title"), k = o("rux-status"), C = o("v-data-table"), T = o("v-card");
1592
+ return w(), x(T, null, {
1593
+ default: n(() => [
1594
+ i(h, { class: "d-flex align-center justify-content-space-between" }, {
1595
+ default: n(() => [
1596
+ d("div", Ce, [
1597
+ i(m, { location: "top" }, {
1598
+ activator: n(({ props: y }) => [
1599
+ d("div", V(D(y)), [
1600
+ i(u, {
1601
+ icon: "mdi-download",
1602
+ variant: "text",
1603
+ size: "small",
1604
+ class: "mr-2",
1605
+ "data-test": "download-log",
1606
+ onClick: a.downloadLog
1607
+ }, null, 8, ["onClick"])
1608
+ ], 16)
1609
+ ]),
1610
+ default: n(() => [
1611
+ e[2] || (e[2] = d("span", null, " Download Log ", -1))
1612
+ ]),
1613
+ _: 1
1614
+ }),
1615
+ e[3] || (e[3] = d("span", null, " Log Messages ", -1)),
1616
+ i(m, { location: "top" }, {
1617
+ activator: n(({ props: y }) => [
1618
+ d("div", V(D(y)), [
1619
+ i(u, {
1620
+ icon: a.buttonIcon,
1621
+ variant: "text",
1622
+ "data-test": "pause",
1623
+ onClick: a.pause
1624
+ }, null, 8, ["icon", "onClick"])
1625
+ ], 16)
1626
+ ]),
1627
+ default: n(() => [
1628
+ d("span", null, N(a.buttonLabel), 1)
1629
+ ]),
1630
+ _: 1
1631
+ })
1632
+ ]),
1633
+ i(f),
1634
+ i(p, {
1635
+ label: "Filter by log level",
1636
+ "hide-details": "",
1637
+ variant: "outlined",
1638
+ density: "compact",
1639
+ items: l.logLevels,
1640
+ modelValue: l.logLevel,
1641
+ "onUpdate:modelValue": e[0] || (e[0] = (y) => l.logLevel = y),
1642
+ class: "mr-2",
1643
+ style: { "max-width": "150px" },
1644
+ "data-test": "log-messages-level"
1645
+ }, null, 8, ["items", "modelValue"]),
1646
+ i(f),
1647
+ i(g, {
1648
+ modelValue: l.search,
1649
+ "onUpdate:modelValue": e[1] || (e[1] = (y) => l.search = y),
1650
+ label: "Search",
1651
+ "prepend-inner-icon": "mdi-magnify",
1652
+ clearable: "",
1653
+ variant: "outlined",
1654
+ density: "compact",
1655
+ "single-line": "",
1656
+ "hide-details": "",
1657
+ style: { "max-width": "300px" },
1658
+ class: "search",
1659
+ "data-test": "search-log-messages"
1660
+ }, null, 8, ["modelValue"]),
1661
+ i(m, { location: "top" }, {
1662
+ activator: n(({ props: y }) => [
1663
+ d("div", V(D(y)), [
1664
+ i(u, {
1665
+ icon: "mdi-delete",
1666
+ variant: "text",
1667
+ class: "ml-2",
1668
+ "data-test": "clear-log",
1669
+ onClick: a.clearLog
1670
+ }, null, 8, ["onClick"])
1671
+ ], 16)
1672
+ ]),
1673
+ default: n(() => [
1674
+ e[4] || (e[4] = d("span", null, " Clear Log ", -1))
1675
+ ]),
1676
+ _: 1
1677
+ })
1678
+ ]),
1679
+ _: 1
1680
+ }),
1681
+ i(C, {
1682
+ headers: l.headers,
1683
+ items: l.shownData,
1684
+ search: l.search,
1685
+ "items-per-page": -1,
1686
+ "hide-default-footer": "",
1687
+ "multi-sort": "",
1688
+ density: "compact",
1689
+ sticky: "",
1690
+ hover: "",
1691
+ "data-test": "log-messages"
1692
+ }, {
1693
+ "item.timestamp": n(({ item: y }) => [
1694
+ d("time", {
1695
+ title: y.timestamp,
1696
+ datetime: y.timestamp
1697
+ }, N(y.timestamp), 9, Te)
1698
+ ]),
1699
+ "item.level": n(({ item: y }) => [
1700
+ d("span", {
1701
+ style: G("display: inline-flex; color:" + a.getColor(y.level))
1702
+ }, [
1703
+ i(k, {
1704
+ class: "mr-1",
1705
+ status: a.getStatus(y.level)
1706
+ }, null, 8, ["status"]),
1707
+ _(" " + N(y.level), 1)
1708
+ ], 4)
1709
+ ]),
1710
+ "item.message": n(({ item: y }) => [
1711
+ d("div", Ie, N(y.message), 1)
1712
+ ]),
1713
+ _: 1
1714
+ }, 8, ["headers", "items", "search"])
1715
+ ]),
1716
+ _: 1
1717
+ });
1718
+ }
1719
+ const qe = /* @__PURE__ */ A(ke, [["render", Ve], ["__scopeId", "data-v-d5f1f607"]]), De = {};
1720
+ function Se(t, e) {
1721
+ const s = o("v-card-title"), r = o("v-card-text"), l = o("v-card");
1722
+ return w(), x(l, null, {
1723
+ default: n(() => [
1724
+ i(s, null, {
1725
+ default: n(() => e[0] || (e[0] = [
1726
+ _("404 Not Found Error")
1727
+ ])),
1728
+ _: 1
1729
+ }),
1730
+ i(r, null, {
1731
+ default: n(() => [
1732
+ e[1] || (e[1] = _("The requested URL ")),
1733
+ d("code", null, N(t.$route.fullPath), 1),
1734
+ e[2] || (e[2] = _(" was not routable."))
1735
+ ]),
1736
+ _: 1
1737
+ })
1738
+ ]),
1739
+ _: 1
1740
+ });
1741
+ }
1742
+ const Je = /* @__PURE__ */ A(De, [["render", Se]]), B = 20, Ee = {
1743
+ mixins: [X],
1744
+ components: {
1745
+ EditScreenDialog: pe
1746
+ },
1747
+ props: {
1748
+ target: {
1749
+ type: String,
1750
+ default: ""
1751
+ },
1752
+ screen: {
1753
+ type: String,
1754
+ default: ""
1755
+ },
1756
+ definition: {
1757
+ type: String,
1758
+ default: ""
1759
+ },
1760
+ keywords: {
1761
+ type: Array,
1762
+ default: () => []
1763
+ },
1764
+ initialFloated: {
1765
+ type: Boolean,
1766
+ default: !1
1767
+ },
1768
+ initialTop: {
1769
+ type: Number,
1770
+ default: 0
1771
+ },
1772
+ initialLeft: {
1773
+ type: Number,
1774
+ default: 0
1775
+ },
1776
+ initialZ: {
1777
+ type: Number,
1778
+ default: 0
1779
+ },
1780
+ minZ: {
1781
+ type: Number,
1782
+ default: 0
1783
+ },
1784
+ fixFloated: {
1785
+ type: Boolean,
1786
+ default: !1
1787
+ },
1788
+ count: {
1789
+ type: Number,
1790
+ default: 0
1791
+ },
1792
+ showClose: {
1793
+ type: Boolean,
1794
+ default: !0
1795
+ },
1796
+ timeZone: {
1797
+ type: String,
1798
+ default: "local"
1799
+ }
1800
+ },
1801
+ data() {
1802
+ return {
1803
+ api: null,
1804
+ backup: "",
1805
+ currentDefinition: this.definition,
1806
+ editDialog: !1,
1807
+ expand: !0,
1808
+ configParser: null,
1809
+ configError: !1,
1810
+ currentLayout: null,
1811
+ layoutStack: [],
1812
+ namedWidgets: {},
1813
+ dynamicWidgets: [],
1814
+ width: null,
1815
+ height: null,
1816
+ staleTime: 30,
1817
+ cacheTimeout: 0.1,
1818
+ globalSettings: [],
1819
+ substitute: !1,
1820
+ original_target_name: null,
1821
+ force_substitute: !1,
1822
+ pollingPeriod: 1,
1823
+ errors: [],
1824
+ errorDialog: !1,
1825
+ screenKey: null,
1826
+ dragX: 0,
1827
+ dragY: 0,
1828
+ floated: this.initialFloated,
1829
+ top: this.initialTop,
1830
+ left: this.initialLeft,
1831
+ zIndex: this.initialZ,
1832
+ changeCounter: 0,
1833
+ screenItems: [],
1834
+ screenValues: {},
1835
+ updateCounter: 0,
1836
+ screenId: Y.uniqueId("openc3-screen_")
1837
+ };
1838
+ },
1839
+ watch: {
1840
+ count: {
1841
+ handler(t, e) {
1842
+ this.currentDefinition = this.definition, this.rerender();
1843
+ }
1844
+ }
1845
+ },
1846
+ computed: {
1847
+ error: function() {
1848
+ if (this.errorDialog && this.errors.length > 0) {
1849
+ let t = /* @__PURE__ */ new Set(), e = "";
1850
+ for (const s of this.errors) {
1851
+ if (t.has(s.message))
1852
+ continue;
1853
+ let r = `${s.time}: (${s.type}) ${s.message}
1854
+ `;
1855
+ e += r, t.add(s.message);
1856
+ }
1857
+ return e;
1858
+ }
1859
+ return null;
1860
+ },
1861
+ computedStyle() {
1862
+ let t = {};
1863
+ return this.floated && (t.position = "absolute", t.top = this.top + "px", t.left = this.left + "px"), t;
1864
+ }
1865
+ },
1866
+ // Called when an error from any descendent component is captured
1867
+ // We need this because an error can occur from any of the children
1868
+ // in the widget stack and are typically thrown on create()
1869
+ errorCaptured(t, e, s) {
1870
+ return console.log({ err: t, vm: e, info: s }), this.errors.length < B && (console.log({ errors: this.errors }), t.usage ? this.errors.push({
1871
+ type: "usage",
1872
+ message: t.message,
1873
+ usage: t.usage,
1874
+ line: t.line,
1875
+ lineNumber: t.lineNumber,
1876
+ time: (/* @__PURE__ */ new Date()).getTime()
1877
+ }) : this.errors.push({
1878
+ type: "error",
1879
+ message: t,
1880
+ time: (/* @__PURE__ */ new Date()).getTime()
1881
+ }), this.configError = !0), !1;
1882
+ },
1883
+ created() {
1884
+ this.api = new U(), this.configParser = new j(), this.parseDefinition(), this.screenKey = Math.floor(Math.random() * 1e6);
1885
+ },
1886
+ mounted() {
1887
+ this.updateRefreshInterval(), this.floated && (this.$refs.bar.onmousedown = this.dragMouseDown, this.$refs.bar.parentElement.parentElement.style = "z-index: " + this.zIndex);
1888
+ },
1889
+ unmounted() {
1890
+ this.updater != null && (clearInterval(this.updater), this.updater = null);
1891
+ },
1892
+ methods: {
1893
+ // These are API methods that ButtonWidget uses to open and close screens
1894
+ open(t, e) {
1895
+ this.$parent.showScreen(t, e);
1896
+ },
1897
+ close(t, e) {
1898
+ this.$parent.closeScreenByName(t, e);
1899
+ },
1900
+ closeAll() {
1901
+ this.$parent.closeAll();
1902
+ },
1903
+ clearErrors: function() {
1904
+ this.errors = [], this.configError = !1;
1905
+ },
1906
+ updateRefreshInterval: function() {
1907
+ let t = this.pollingPeriod * 1e3;
1908
+ this.updater && clearInterval(this.updater), this.updater = setInterval(() => {
1909
+ this.update();
1910
+ }, t);
1911
+ },
1912
+ parseDefinition: function() {
1913
+ if (this.clearErrors(), this.namedWidgets = {}, this.layoutStack = [], this.dynamicWidgets = [], this.layoutStack.push({
1914
+ type: "VerticalWidget",
1915
+ parameters: [],
1916
+ widgets: []
1917
+ }), this.currentLayout = this.layoutStack[this.layoutStack.length - 1], this.configParser.parse_string(
1918
+ this.currentDefinition,
1919
+ "",
1920
+ !1,
1921
+ !0,
1922
+ (t, e, s, r) => {
1923
+ if (t)
1924
+ switch (t) {
1925
+ case "SCREEN":
1926
+ this.configParser.verify_num_parameters(
1927
+ 3,
1928
+ 4,
1929
+ `${t} <Width or AUTO> <Height or AUTO> <Polling Period>`
1930
+ ), this.width = parseInt(e[0]), this.height = parseInt(e[1]), this.pollingPeriod = parseFloat(e[2]);
1931
+ break;
1932
+ case "END":
1933
+ this.configParser.verify_num_parameters(0, 0, `${t}`), this.layoutStack.pop(), this.currentLayout = this.layoutStack[this.layoutStack.length - 1];
1934
+ break;
1935
+ case "STALE_TIME":
1936
+ this.configParser.verify_num_parameters(
1937
+ 1,
1938
+ 1,
1939
+ `${t} <Time (s)>`
1940
+ ), this.staleTime = parseInt(e[0]);
1941
+ break;
1942
+ case "SETTING":
1943
+ case "SUBSETTING":
1944
+ (this.currentLayout.widgets[this.currentLayout.widgets.length - 1] ?? this.currentLayout).settings.push(e);
1945
+ break;
1946
+ case "GLOBAL_SETTING":
1947
+ case "GLOBAL_SUBSETTING":
1948
+ this.globalSettings.push(e);
1949
+ break;
1950
+ default:
1951
+ this.processWidget(t, e, s, r);
1952
+ break;
1953
+ }
1954
+ }
1955
+ ), typeof this.layoutStack[0] > "u") {
1956
+ let t = [], e = [];
1957
+ for (const s of this.dynamicWidgets)
1958
+ t.push(s.name), e.push(s.lineNumber);
1959
+ this.errors.length < B && (this.errors.push({
1960
+ type: "usage",
1961
+ message: `Unknown widget! Are these widgets: ${t.join(",")}?`,
1962
+ lineNumber: e.join(","),
1963
+ time: (/* @__PURE__ */ new Date()).getTime()
1964
+ }), this.configError = !0), this.layoutStack[0] = {
1965
+ type: "VerticalWidget",
1966
+ parameters: [],
1967
+ widgets: []
1968
+ };
1969
+ } else
1970
+ this.applyGlobalSettings(this.layoutStack[0].widgets);
1971
+ },
1972
+ openEdit: function() {
1973
+ this.backup = this.currentDefinition.repeat(1), this.editDialog = !0;
1974
+ },
1975
+ upScreen: function() {
1976
+ this.zIndex += 1, this.$refs.bar.parentElement.parentElement.style = "z-index: " + this.zIndex, this.$emit("drag-screen", [
1977
+ this.floated,
1978
+ this.top,
1979
+ this.left,
1980
+ this.zIndex
1981
+ ]);
1982
+ },
1983
+ downScreen: function() {
1984
+ this.zIndex > this.minZ && (this.zIndex -= 1, this.$refs.bar.parentElement.parentElement.style = "z-index: " + this.zIndex, this.$emit("drag-screen", [
1985
+ this.floated,
1986
+ this.top,
1987
+ this.left,
1988
+ this.zIndex
1989
+ ]));
1990
+ },
1991
+ floatScreen: function() {
1992
+ if (this.floated)
1993
+ this.$refs.bar.onmousedown = null, this.$refs.bar.parentElement.parentElement.style = "z-index: 0", this.floated = !1, this.$emit("unfloat-screen", [
1994
+ this.floated,
1995
+ this.top,
1996
+ this.left,
1997
+ this.zIndex
1998
+ ]);
1999
+ else {
2000
+ let t = this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect(), e = this.$refs.bar.getBoundingClientRect();
2001
+ this.top = e.top - t.top - 5, this.left = e.left - t.left - 5, this.$refs.bar.onmousedown = this.dragMouseDown, this.$refs.bar.parentElement.parentElement.style = "z-index: " + this.zIndex, this.floated = !0, this.$emit("float-screen", [
2002
+ this.floated,
2003
+ this.top,
2004
+ this.left,
2005
+ this.zIndex
2006
+ ]);
2007
+ }
2008
+ },
2009
+ dragMouseDown: function(t) {
2010
+ t = t || window.event, t.preventDefault(), this.dragX = t.clientX, this.dragY = t.clientY, document.onmouseup = this.closeDragElement, document.onmousemove = this.elementDrag;
2011
+ },
2012
+ elementDrag: function(t) {
2013
+ t = t || window.event, t.preventDefault();
2014
+ let e = this.dragX - t.clientX, s = this.dragY - t.clientY;
2015
+ this.dragX = t.clientX, this.dragY = t.clientY, this.top = this.$refs.bar.offsetTop - s, this.left = this.$refs.bar.offsetLeft - e, this.$emit("drag-screen", [
2016
+ this.floated,
2017
+ this.top,
2018
+ this.left,
2019
+ this.zIndex
2020
+ ]);
2021
+ },
2022
+ closeDragElement: function() {
2023
+ document.onmouseup = null, document.onmousemove = null;
2024
+ },
2025
+ rerender: function() {
2026
+ this.parseDefinition(), this.updateRefreshInterval(), this.screenKey = Math.floor(Math.random() * 1e6), this.$nextTick(function() {
2027
+ this.clearErrors(), this.$emit("edit-screen");
2028
+ });
2029
+ },
2030
+ cancelEdit: function() {
2031
+ this.file = null, this.editDialog = !1, this.currentDefinition = this.backup, this.rerender();
2032
+ },
2033
+ saveEdit: function(t) {
2034
+ this.editDialog = !1, this.currentDefinition = t, this.rerender(), this.$nextTick(function() {
2035
+ E.post(
2036
+ "/openc3-api/screen/",
2037
+ {
2038
+ data: {
2039
+ scope: window.openc3Scope,
2040
+ target: this.target,
2041
+ screen: this.screen,
2042
+ text: this.currentDefinition
2043
+ }
2044
+ },
2045
+ 0
2046
+ );
2047
+ });
2048
+ },
2049
+ deleteScreen: function() {
2050
+ this.editDialog = !1, E.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(
2051
+ (t) => {
2052
+ this.$emit("delete-screen");
2053
+ }
2054
+ );
2055
+ },
2056
+ minMaxTransition: function() {
2057
+ this.expand = !this.expand, this.$emit("min-max-screen");
2058
+ },
2059
+ processWidget: function(t, e, s, r) {
2060
+ let l = null;
2061
+ t === "NAMED_WIDGET" && (this.configParser.verify_num_parameters(
2062
+ 2,
2063
+ null,
2064
+ `${t} <Widget Name> <Widget Type> <Widget Settings... (optional)>`
2065
+ ), l = e[0].toUpperCase(), t = e[1].toUpperCase(), e = e.slice(2, e.length));
2066
+ const a = t.charAt(0).toUpperCase() + t.slice(1).toLowerCase() + "Widget";
2067
+ let u = [];
2068
+ if (u.push(["__SCREEN_ID__", this.screenId]), l !== null && u.push(["NAMED_WIDGET", l]), t === "VERTICAL" || t === "VERTICALBOX" || t === "HORIZONTAL" || t === "HORIZONTALBOX" || t === "MATRIXBYCOLUMNS" || t === "TABBOOK" || t === "TABITEM" || t === "CANVAS" || t === "RADIOGROUP" || t === "SCROLLWINDOW") {
2069
+ const m = {
2070
+ type: a,
2071
+ parameters: e,
2072
+ settings: u,
2073
+ screenValues: this.screenValues,
2074
+ screenTimeZone: this.timeZone,
2075
+ widgets: []
2076
+ };
2077
+ this.layoutStack.push(m), this.currentLayout.widgets.push(m), this.currentLayout = m;
2078
+ } else if (this.$options.components[a])
2079
+ this.currentLayout.widgets.push({
2080
+ type: a,
2081
+ target: this.target,
2082
+ parameters: e,
2083
+ settings: u,
2084
+ screenValues: this.screenValues,
2085
+ screenTimeZone: this.timeZone,
2086
+ line: s,
2087
+ lineNumber: r
2088
+ });
2089
+ else {
2090
+ let m = {
2091
+ type: "DynamicWidget",
2092
+ target: this.target,
2093
+ parameters: e,
2094
+ settings: u,
2095
+ screenValues: this.screenValues,
2096
+ screenTimeZone: this.timeZone,
2097
+ name: a,
2098
+ line: s,
2099
+ lineNumber: r
2100
+ };
2101
+ this.currentLayout.widgets.push(m), this.dynamicWidgets.push(m);
2102
+ }
2103
+ },
2104
+ applyGlobalSettings: function(t) {
2105
+ t.forEach((e) => {
2106
+ this.globalSettings.forEach((s) => {
2107
+ e.type.toLowerCase() === s[0].toLowerCase() + "widget" && e.settings.push(s.slice(1));
2108
+ }), e.widgets && this.applyGlobalSettings(e.widgets);
2109
+ });
2110
+ },
2111
+ update: function() {
2112
+ this.screenItems.length !== 0 && this.configError === !1 && this.api.get_tlm_values(this.screenItems, this.staleTime, this.cacheTimeout).then((t) => {
2113
+ this.clearErrors(), this.updateValues(t);
2114
+ }).catch((t) => {
2115
+ let e = JSON.stringify(t, null, 2);
2116
+ e.includes("no response received") || (this.configError = !0), this.errors.find((s) => s.message === e) || this.errors.length < B && this.errors.push({
2117
+ type: "error",
2118
+ message: e,
2119
+ time: (/* @__PURE__ */ new Date()).getTime()
2120
+ });
2121
+ });
2122
+ },
2123
+ updateValues: function(t) {
2124
+ this.updateCounter += 1;
2125
+ for (let e = 0; e < t.length; e++)
2126
+ t[e].push(this.updateCounter), this.screenValues[this.screenItems[e]] = t[e];
2127
+ },
2128
+ addItem: function(t) {
2129
+ this.screenItems.push(t), this.screenValues[t] = [null, null, 0];
2130
+ },
2131
+ deleteItem: function(t) {
2132
+ let e = this.screenItems.indexOf(t);
2133
+ this.screenItems.splice(e, 1);
2134
+ }
2135
+ }
2136
+ }, Ae = {
2137
+ class: "pa-1",
2138
+ style: { position: "relative" },
2139
+ ref: "screen"
2140
+ };
2141
+ function Re(t, e, s, r, l, a) {
2142
+ const u = o("v-icon"), m = o("v-tooltip"), f = o("v-spacer"), p = o("v-toolbar"), g = o("v-overlay"), h = o("vertical-widget"), k = o("v-expand-transition"), C = o("v-card"), T = o("edit-screen-dialog"), y = o("v-textarea"), v = o("v-dialog");
2143
+ return w(), M("div", {
2144
+ style: G(a.computedStyle),
2145
+ ref: "bar"
2146
+ }, [
2147
+ i(C, {
2148
+ "min-height": l.height,
2149
+ "min-width": l.width,
2150
+ style: { cursor: "default" }
2151
+ }, {
2152
+ default: n(() => [
2153
+ i(p, { height: "24" }, {
2154
+ default: n(() => [
2155
+ R(d("div", null, [
2156
+ i(m, { location: "top" }, {
2157
+ activator: n(({ props: c }) => [
2158
+ d("div", V(D(c)), [
2159
+ i(u, {
2160
+ "data-test": "error-graph-icon",
2161
+ onClick: e[0] || (e[0] = (b) => l.errorDialog = !0)
2162
+ }, {
2163
+ default: n(() => e[7] || (e[7] = [
2164
+ _(" mdi-alert ")
2165
+ ])),
2166
+ _: 1
2167
+ })
2168
+ ], 16)
2169
+ ]),
2170
+ default: n(() => [
2171
+ e[8] || (e[8] = d("span", null, " Errors ", -1))
2172
+ ]),
2173
+ _: 1
2174
+ })
2175
+ ], 512), [
2176
+ [L, l.errors.length !== 0]
2177
+ ]),
2178
+ i(m, { location: "top" }, {
2179
+ activator: n(({ props: c }) => [
2180
+ d("div", V(D(c)), [
2181
+ i(u, {
2182
+ "data-test": "edit-screen-icon",
2183
+ onClick: a.openEdit
2184
+ }, {
2185
+ default: n(() => e[9] || (e[9] = [
2186
+ _(" mdi-pencil ")
2187
+ ])),
2188
+ _: 1
2189
+ }, 8, ["onClick"])
2190
+ ], 16)
2191
+ ]),
2192
+ default: n(() => [
2193
+ e[10] || (e[10] = d("span", null, " Edit Screen ", -1))
2194
+ ]),
2195
+ _: 1
2196
+ }),
2197
+ s.fixFloated ? S("", !0) : (w(), x(m, {
2198
+ key: 0,
2199
+ location: "top"
2200
+ }, {
2201
+ activator: n(({ props: c }) => [
2202
+ d("div", V(D(c)), [
2203
+ i(u, {
2204
+ "data-test": "float-screen-icon",
2205
+ onClick: a.floatScreen
2206
+ }, {
2207
+ default: n(() => [
2208
+ _(N(l.floated ? "mdi-balloon" : "mdi-view-grid-outline"), 1)
2209
+ ]),
2210
+ _: 1
2211
+ }, 8, ["onClick"])
2212
+ ], 16)
2213
+ ]),
2214
+ default: n(() => [
2215
+ d("span", null, N(l.floated ? "Unfloat Screen" : "Float Screen"), 1)
2216
+ ]),
2217
+ _: 1
2218
+ })),
2219
+ l.floated ? (w(), x(m, {
2220
+ key: 1,
2221
+ location: "top"
2222
+ }, {
2223
+ activator: n(({ props: c }) => [
2224
+ d("div", V(D(c)), [
2225
+ i(u, {
2226
+ "data-test": "up-screen-icon",
2227
+ onClick: a.upScreen
2228
+ }, {
2229
+ default: n(() => e[11] || (e[11] = [
2230
+ _(" mdi-arrow-up ")
2231
+ ])),
2232
+ _: 1
2233
+ }, 8, ["onClick"])
2234
+ ], 16)
2235
+ ]),
2236
+ default: n(() => [
2237
+ e[12] || (e[12] = d("span", null, " Move Screen Up ", -1))
2238
+ ]),
2239
+ _: 1
2240
+ })) : S("", !0),
2241
+ l.floated && l.zIndex > s.minZ ? (w(), x(m, {
2242
+ key: 2,
2243
+ location: "top"
2244
+ }, {
2245
+ activator: n(({ props: c }) => [
2246
+ d("div", V(D(c)), [
2247
+ i(u, {
2248
+ "data-test": "down-screen-icon",
2249
+ onClick: a.downScreen
2250
+ }, {
2251
+ default: n(() => e[13] || (e[13] = [
2252
+ _(" mdi-arrow-down ")
2253
+ ])),
2254
+ _: 1
2255
+ }, 8, ["onClick"])
2256
+ ], 16)
2257
+ ]),
2258
+ default: n(() => [
2259
+ e[14] || (e[14] = d("span", null, " Move Screen Down ", -1))
2260
+ ]),
2261
+ _: 1
2262
+ })) : S("", !0),
2263
+ i(f),
2264
+ d("span", null, N(s.target) + " " + N(s.screen), 1),
2265
+ i(f),
2266
+ i(m, { location: "top" }, {
2267
+ activator: n(({ props: c }) => [
2268
+ d("div", V(D(c)), [
2269
+ R(i(u, {
2270
+ "data-test": "minimize-screen-icon",
2271
+ onClick: a.minMaxTransition
2272
+ }, {
2273
+ default: n(() => e[15] || (e[15] = [
2274
+ _(" mdi-window-minimize ")
2275
+ ])),
2276
+ _: 1
2277
+ }, 8, ["onClick"]), [
2278
+ [L, l.expand]
2279
+ ]),
2280
+ R(i(u, {
2281
+ "data-test": "maximize-screen-icon",
2282
+ onClick: a.minMaxTransition
2283
+ }, {
2284
+ default: n(() => e[16] || (e[16] = [
2285
+ _(" mdi-window-maximize ")
2286
+ ])),
2287
+ _: 1
2288
+ }, 8, ["onClick"]), [
2289
+ [L, !l.expand]
2290
+ ])
2291
+ ], 16)
2292
+ ]),
2293
+ default: n(() => [
2294
+ R(d("span", null, " Minimize Screen ", 512), [
2295
+ [L, l.expand]
2296
+ ]),
2297
+ R(d("span", null, " Maximize Screen ", 512), [
2298
+ [L, !l.expand]
2299
+ ])
2300
+ ]),
2301
+ _: 1
2302
+ }),
2303
+ s.showClose ? (w(), x(m, {
2304
+ key: 3,
2305
+ location: "top"
2306
+ }, {
2307
+ activator: n(({ props: c }) => [
2308
+ d("div", V(D(c)), [
2309
+ i(u, {
2310
+ "data-test": "close-screen-icon",
2311
+ onClick: e[1] || (e[1] = (b) => t.$emit("close-screen"))
2312
+ }, {
2313
+ default: n(() => e[17] || (e[17] = [
2314
+ _(" mdi-close-box ")
2315
+ ])),
2316
+ _: 1
2317
+ })
2318
+ ], 16)
2319
+ ]),
2320
+ default: n(() => [
2321
+ e[18] || (e[18] = d("span", null, " Close Screen ", -1))
2322
+ ]),
2323
+ _: 1
2324
+ })) : S("", !0)
2325
+ ]),
2326
+ _: 1
2327
+ }),
2328
+ l.editDialog ? S("", !0) : (w(), x(k, { key: 0 }, {
2329
+ default: n(() => [
2330
+ R(d("div", Ae, [
2331
+ i(g, {
2332
+ style: { "pointer-events": "none" },
2333
+ "model-value": l.errors.length !== 0,
2334
+ opacity: "0.8",
2335
+ absolute: ""
2336
+ }, null, 8, ["model-value"]),
2337
+ (w(), x(h, {
2338
+ key: l.screenKey,
2339
+ widgets: l.layoutStack[0].widgets,
2340
+ "screen-values": l.screenValues,
2341
+ "screen-time-zone": s.timeZone,
2342
+ onAddItem: a.addItem,
2343
+ onDeleteItem: a.deleteItem,
2344
+ onOpen: a.open,
2345
+ onClose: a.close,
2346
+ onCloseAll: a.closeAll
2347
+ }, null, 8, ["widgets", "screen-values", "screen-time-zone", "onAddItem", "onDeleteItem", "onOpen", "onClose", "onCloseAll"]))
2348
+ ], 512), [
2349
+ [L, l.expand]
2350
+ ])
2351
+ ]),
2352
+ _: 1
2353
+ }))
2354
+ ]),
2355
+ _: 1
2356
+ }, 8, ["min-height", "min-width"]),
2357
+ l.editDialog ? (w(), x(T, {
2358
+ key: 0,
2359
+ modelValue: l.editDialog,
2360
+ "onUpdate:modelValue": e[2] || (e[2] = (c) => l.editDialog = c),
2361
+ target: s.target,
2362
+ screen: s.screen,
2363
+ definition: l.currentDefinition,
2364
+ keywords: s.keywords,
2365
+ errors: l.errors,
2366
+ onSave: e[3] || (e[3] = (c) => a.saveEdit(c)),
2367
+ onCancel: e[4] || (e[4] = (c) => a.cancelEdit()),
2368
+ onDelete: e[5] || (e[5] = (c) => a.deleteScreen())
2369
+ }, null, 8, ["modelValue", "target", "screen", "definition", "keywords", "errors"])) : S("", !0),
2370
+ i(v, {
2371
+ modelValue: l.errorDialog,
2372
+ "onUpdate:modelValue": e[6] || (e[6] = (c) => l.errorDialog = c),
2373
+ "max-width": "600"
2374
+ }, {
2375
+ default: n(() => [
2376
+ i(p, { height: "24" }, {
2377
+ default: n(() => [
2378
+ i(f),
2379
+ d("span", null, " Screen: " + N(s.target) + " " + N(s.screen) + " Errors ", 1),
2380
+ i(f)
2381
+ ]),
2382
+ _: 1
2383
+ }),
2384
+ i(C, null, {
2385
+ default: n(() => [
2386
+ i(y, {
2387
+ class: "errors",
2388
+ readonly: "",
2389
+ rows: "13",
2390
+ "model-value": a.error
2391
+ }, null, 8, ["model-value"])
2392
+ ]),
2393
+ _: 1
2394
+ })
2395
+ ]),
2396
+ _: 1
2397
+ }, 8, ["modelValue"])
2398
+ ], 4);
2399
+ }
2400
+ const Qe = /* @__PURE__ */ A(Ee, [["render", Re], ["__scopeId", "data-v-97014e16"]]), Le = {
2401
+ props: {
2402
+ allowAll: {
2403
+ type: Boolean,
2404
+ default: !1
2405
+ },
2406
+ allowAllTargets: {
2407
+ type: Boolean,
2408
+ default: !1
2409
+ },
2410
+ buttonText: {
2411
+ type: String,
2412
+ default: null
2413
+ },
2414
+ chooseItem: {
2415
+ type: Boolean,
2416
+ default: !1
2417
+ },
2418
+ disabled: {
2419
+ type: Boolean,
2420
+ default: !1
2421
+ },
2422
+ initialTargetName: {
2423
+ type: String,
2424
+ default: ""
2425
+ },
2426
+ initialPacketName: {
2427
+ type: String,
2428
+ default: ""
2429
+ },
2430
+ initialItemName: {
2431
+ type: String,
2432
+ default: ""
2433
+ },
2434
+ selectTypes: {
2435
+ type: Boolean,
2436
+ default: !1
2437
+ },
2438
+ mode: {
2439
+ type: String,
2440
+ default: "tlm",
2441
+ // TODO: add validators throughout
2442
+ validator: (t) => ["cmd", "tlm"].includes(t)
2443
+ },
2444
+ unknown: {
2445
+ type: Boolean,
2446
+ default: !1
2447
+ },
2448
+ vertical: {
2449
+ type: Boolean,
2450
+ default: !1
2451
+ },
2452
+ hidden: {
2453
+ type: Boolean,
2454
+ default: !1
2455
+ }
2456
+ },
2457
+ data() {
2458
+ var t, e, s;
2459
+ return {
2460
+ targetNames: [],
2461
+ selectedTargetName: (t = this.initialTargetName) == null ? void 0 : t.toUpperCase(),
2462
+ packetNames: [],
2463
+ selectedPacketName: (e = this.initialPacketName) == null ? void 0 : e.toUpperCase(),
2464
+ itemNames: [],
2465
+ selectedItemName: (s = this.initialItemName) == null ? void 0 : s.toUpperCase(),
2466
+ valueTypes: ["CONVERTED", "RAW"],
2467
+ selectedValueType: "CONVERTED",
2468
+ reductionModes: [
2469
+ // Map NONE to DECOM for clarity
2470
+ { title: "NONE", value: "DECOM" },
2471
+ { title: "REDUCED_MINUTE", value: "REDUCED_MINUTE" },
2472
+ { title: "REDUCED_HOUR", value: "REDUCED_HOUR" },
2473
+ { title: "REDUCED_DAY", value: "REDUCED_DAY" }
2474
+ ],
2475
+ selectedArrayIndex: null,
2476
+ selectedReduced: "DECOM",
2477
+ reducedTypes: ["MIN", "MAX", "AVG", "STDDEV"],
2478
+ selectedReducedType: "AVG",
2479
+ description: "",
2480
+ hazardous: !1,
2481
+ internalDisabled: !1,
2482
+ packetsDisabled: !1,
2483
+ itemsDisabled: !1,
2484
+ api: null,
2485
+ ALL: {
2486
+ label: "[ ALL ]",
2487
+ value: "ALL",
2488
+ description: "ALL"
2489
+ },
2490
+ // Constant to indicate all packets or items
2491
+ UNKNOWN: {
2492
+ label: "[ UNKNOWN ]",
2493
+ value: "UNKNOWN",
2494
+ description: "UNKNOWN"
2495
+ }
2496
+ };
2497
+ },
2498
+ created() {
2499
+ this.internalDisabled = !0, this.api = new U(), this.api.get_target_names().then((t) => {
2500
+ this.targetNames = t.flatMap((e) => e == "UNKNOWN" ? [] : { label: e, value: e }), this.allowAllTargets && this.targetNames.unshift(this.ALL), this.selectedTargetName ? this.updatePackets() : (this.selectedTargetName = this.targetNames[0].value, this.targetNameChanged(this.selectedTargetName)), this.unknown && this.targetNames.push(this.UNKNOWN);
2501
+ });
2502
+ },
2503
+ computed: {
2504
+ actualButtonText: function() {
2505
+ return this.selectedPacketName === "ALL" ? "Add Target" : this.selectedItemName === "ALL" ? "Add Packet" : this.buttonText;
2506
+ },
2507
+ autocompleteDisabled: function() {
2508
+ return this.disabled || this.internalDisabled;
2509
+ },
2510
+ buttonDisabled: function() {
2511
+ return this.disabled || this.internalDisabled || this.selectedTargetName === null || this.selectedPacketName === null || this.selectedItemNameWIndex === null;
2512
+ },
2513
+ colSize: function() {
2514
+ return this.vertical ? 12 : !1;
2515
+ },
2516
+ selectedItemNameWIndex: function() {
2517
+ return this.itemIsArray() && this.selectedArrayIndex !== null && this.selectedArrayIndex !== this.ALL.label ? `${this.selectedItemName}[${this.selectedArrayIndex}]` : this.selectedItemName;
2518
+ }
2519
+ },
2520
+ watch: {
2521
+ mode: function(t, e) {
2522
+ this.selectedPacketName = null, this.selectedItemName = null, this.targetNameChanged(this.selectedTargetName);
2523
+ },
2524
+ chooseItem: function(t, e) {
2525
+ t ? this.updateItems() : this.itemNames = [];
2526
+ }
2527
+ },
2528
+ methods: {
2529
+ updatePackets: function() {
2530
+ if (this.selectedTargetName === "UNKNOWN") {
2531
+ this.packetNames = [this.UNKNOWN], this.selectedPacketName = this.packetNames[0].value, this.updatePacketDetails(this.UNKNOWN.value), this.description = "UNKNOWN";
2532
+ return;
2533
+ }
2534
+ if (this.selectedTargetName === "ALL") {
2535
+ this.packetNames = [this.ALL], this.selectedPacketName = this.packetNames[0].value, this.updatePacketDetails(this.ALL.value), this.description = "ALL";
2536
+ return;
2537
+ }
2538
+ this.internalDisabled = !0;
2539
+ const t = this.mode === "tlm" ? "get_all_tlm_names" : "get_all_cmd_names";
2540
+ this.api[t](this.selectedTargetName, this.hidden).then((e) => {
2541
+ this.packetNames = e.map((r) => ({
2542
+ label: r,
2543
+ value: r
2544
+ })), this.allowAll && this.packetNames.unshift(this.ALL), this.selectedPacketName || (this.selectedPacketName = this.packetNames[0].value), this.updatePacketDetails(this.selectedPacketName), this.packetNames.find((r) => r.value === this.selectedPacketName) && this.chooseItem && this.updateItems(), this.internalDisabled = !1;
2545
+ });
2546
+ },
2547
+ updateItems: function() {
2548
+ if (this.selectedPacketName === "ALL")
2549
+ return;
2550
+ this.internalDisabled = !0;
2551
+ const t = this.mode === "tlm" ? "get_tlm" : "get_cmd";
2552
+ this.api[t](this.selectedTargetName, this.selectedPacketName).then(
2553
+ (e) => {
2554
+ this.itemNames = e.items.map((s) => {
2555
+ let r = s.name;
2556
+ return s.data_type == "DERIVED" && (r += " *"), [
2557
+ {
2558
+ label: r,
2559
+ value: s.name,
2560
+ description: s.description,
2561
+ array: s.array_size / s.bit_size
2562
+ }
2563
+ ];
2564
+ }).reduce((s, r) => s.concat(r), []), this.itemNames.sort((s, r) => s.label > r.label ? 1 : -1), this.allowAll && this.itemNames.unshift(this.ALL), this.selectedItemName || (this.selectedItemName = this.itemNames[0].value), this.description = this.itemNames[0].description, this.itemIsArray(), this.$emit("on-set", {
2565
+ targetName: this.selectedTargetName,
2566
+ packetName: this.selectedPacketName,
2567
+ itemName: this.selectedItemNameWIndex,
2568
+ valueType: this.selectedValueType,
2569
+ reduced: this.selectedReduced,
2570
+ reducedType: this.selectedReducedType
2571
+ }), this.internalDisabled = !1;
2572
+ }
2573
+ );
2574
+ },
2575
+ itemIsArray: function() {
2576
+ let t = this.itemNames.findIndex(
2577
+ (e) => e.value === this.selectedItemName
2578
+ );
2579
+ return t === -1 ? (this.selectedArrayIndex = null, !1) : isNaN(this.itemNames[t].array) ? (this.selectedArrayIndex = null, !1) : (this.selectedArrayIndex === null && (this.selectedArrayIndex = 0), !0);
2580
+ },
2581
+ arrayIndexes: function() {
2582
+ let t = this.itemNames.findIndex(
2583
+ (s) => s.value === this.selectedItemName
2584
+ ), e = [...Array(this.itemNames[t].array).keys()];
2585
+ return this.allowAll && e.unshift(this.ALL.label), e;
2586
+ },
2587
+ targetNameChanged: function(t) {
2588
+ this.selectedTargetName = t, this.selectedPacketName = "", this.selectedItemName = "", t !== null && this.updatePackets();
2589
+ },
2590
+ packetNameChanged: function(t) {
2591
+ this.selectedItemName = "", t !== null && this.updatePacketDetails(t);
2592
+ },
2593
+ updatePacketDetails: function(t) {
2594
+ if (t === "ALL")
2595
+ this.itemsDisabled = !0, this.internalDisabled = !1;
2596
+ else {
2597
+ this.itemsDisabled = !1;
2598
+ const e = this.packetNames.find((s) => t === s.value);
2599
+ if (e) {
2600
+ this.selectedPacketName = e.value;
2601
+ const s = this.mode === "tlm" ? "get_tlm" : "get_cmd";
2602
+ this.api[s](this.selectedTargetName, this.selectedPacketName).then(
2603
+ (r) => {
2604
+ this.description = r.description, this.hazardous = r.hazardous;
2605
+ }
2606
+ );
2607
+ }
2608
+ }
2609
+ this.chooseItem ? this.updateItems() : this.$emit("on-set", {
2610
+ targetName: this.selectedTargetName,
2611
+ packetName: this.selectedPacketName,
2612
+ itemName: this.selectedItemNameWIndex,
2613
+ valueType: this.selectedValueType,
2614
+ reduced: this.selectedReduced,
2615
+ reducedType: this.selectedReducedType
2616
+ });
2617
+ },
2618
+ itemNameChanged: function(t) {
2619
+ const e = this.itemNames.find((s) => t === s.value);
2620
+ e && (this.itemIsArray(), this.selectedItemName = e.value, this.description = e.description, this.$emit("on-set", {
2621
+ targetName: this.selectedTargetName,
2622
+ packetName: this.selectedPacketName,
2623
+ itemName: this.selectedItemNameWIndex,
2624
+ valueType: this.selectedValueType,
2625
+ reduced: this.selectedReduced,
2626
+ reducedType: this.selectedReducedType
2627
+ }));
2628
+ },
2629
+ indexChanged: function(t) {
2630
+ this.$emit("on-set", {
2631
+ targetName: this.selectedTargetName,
2632
+ packetName: this.selectedPacketName,
2633
+ itemName: this.selectedItemNameWIndex,
2634
+ valueType: this.selectedValueType,
2635
+ reduced: this.selectedReduced,
2636
+ reducedType: this.selectedReducedType
2637
+ });
2638
+ },
2639
+ buttonPressed: function() {
2640
+ this.selectedPacketName === "ALL" ? this.allTargetPacketItems() : this.selectedItemName === "ALL" ? this.allPacketItems() : this.chooseItem ? this.$emit("addItem", {
2641
+ targetName: this.selectedTargetName,
2642
+ packetName: this.selectedPacketName,
2643
+ itemName: this.selectedItemNameWIndex,
2644
+ valueType: this.selectedValueType,
2645
+ reduced: this.selectedReduced,
2646
+ reducedType: this.selectedReducedType
2647
+ }) : this.$emit("addItem", {
2648
+ targetName: this.selectedTargetName,
2649
+ packetName: this.selectedPacketName,
2650
+ valueType: this.selectedValueType,
2651
+ reduced: this.selectedReduced,
2652
+ reducedType: this.selectedReducedType
2653
+ });
2654
+ },
2655
+ allTargetPacketItems: function() {
2656
+ this.packetNames.forEach((t) => {
2657
+ if (t === this.ALL) return;
2658
+ const e = this.mode === "tlm" ? "get_tlm" : "get_cmd";
2659
+ this.api[e](this.selectedTargetName, t.value).then(
2660
+ (s) => {
2661
+ s.items.forEach((r) => {
2662
+ this.$emit("addItem", {
2663
+ targetName: this.selectedTargetName,
2664
+ packetName: t.value,
2665
+ itemName: r.name,
2666
+ valueType: this.selectedValueType,
2667
+ reduced: this.selectedReduced,
2668
+ reducedType: this.selectedReducedType
2669
+ });
2670
+ });
2671
+ }
2672
+ );
2673
+ });
2674
+ },
2675
+ allPacketItems: function() {
2676
+ this.itemNames.forEach((t) => {
2677
+ t !== this.ALL && this.$emit("addItem", {
2678
+ targetName: this.selectedTargetName,
2679
+ packetName: this.selectedPacketName,
2680
+ itemName: t.value,
2681
+ valueType: this.selectedValueType,
2682
+ reduced: this.selectedReduced,
2683
+ reducedType: this.selectedReducedType
2684
+ });
2685
+ });
2686
+ }
2687
+ }
2688
+ }, Ue = { class: "pt-4 pb-4" };
2689
+ function Oe(t, e, s, r, l, a) {
2690
+ const u = o("v-autocomplete"), m = o("v-col"), f = o("v-combobox"), p = o("v-btn"), g = o("v-row");
2691
+ return w(), M("div", Ue, [
2692
+ i(g, null, {
2693
+ default: n(() => [
2694
+ i(m, {
2695
+ cols: a.colSize,
2696
+ class: "select",
2697
+ "data-test": "select-target"
2698
+ }, {
2699
+ default: n(() => [
2700
+ i(u, {
2701
+ label: "Select Target",
2702
+ "hide-details": "",
2703
+ density: "compact",
2704
+ variant: "outlined",
2705
+ "onUpdate:modelValue": [
2706
+ a.targetNameChanged,
2707
+ e[0] || (e[0] = (h) => l.selectedTargetName = h)
2708
+ ],
2709
+ items: l.targetNames,
2710
+ "item-title": "label",
2711
+ "item-value": "value",
2712
+ modelValue: l.selectedTargetName
2713
+ }, null, 8, ["onUpdate:modelValue", "items", "modelValue"])
2714
+ ]),
2715
+ _: 1
2716
+ }, 8, ["cols"]),
2717
+ i(m, {
2718
+ cols: a.colSize,
2719
+ class: "select",
2720
+ "data-test": "select-packet"
2721
+ }, {
2722
+ default: n(() => [
2723
+ i(u, {
2724
+ label: "Select Packet",
2725
+ "hide-details": "",
2726
+ density: "compact",
2727
+ variant: "outlined",
2728
+ "onUpdate:modelValue": [
2729
+ a.packetNameChanged,
2730
+ e[1] || (e[1] = (h) => l.selectedPacketName = h)
2731
+ ],
2732
+ disabled: l.packetsDisabled || a.autocompleteDisabled,
2733
+ items: l.packetNames,
2734
+ "item-title": "label",
2735
+ "item-value": "value",
2736
+ modelValue: l.selectedPacketName
2737
+ }, null, 8, ["onUpdate:modelValue", "disabled", "items", "modelValue"])
2738
+ ]),
2739
+ _: 1
2740
+ }, 8, ["cols"]),
2741
+ s.chooseItem ? (w(), x(m, {
2742
+ key: 0,
2743
+ cols: a.colSize,
2744
+ class: "select",
2745
+ "data-test": "select-item"
2746
+ }, {
2747
+ default: n(() => [
2748
+ i(u, {
2749
+ label: "Select Item",
2750
+ "hide-details": "",
2751
+ density: "compact",
2752
+ variant: "outlined",
2753
+ "onUpdate:modelValue": [
2754
+ e[2] || (e[2] = (h) => a.itemNameChanged(h)),
2755
+ e[3] || (e[3] = (h) => l.selectedItemName = h)
2756
+ ],
2757
+ disabled: l.itemsDisabled || a.autocompleteDisabled,
2758
+ items: l.itemNames,
2759
+ "item-title": "label",
2760
+ "item-value": "value",
2761
+ modelValue: l.selectedItemName
2762
+ }, null, 8, ["disabled", "items", "modelValue"])
2763
+ ]),
2764
+ _: 1
2765
+ }, 8, ["cols"])) : S("", !0),
2766
+ s.chooseItem && a.itemIsArray() ? (w(), x(m, {
2767
+ key: 1,
2768
+ cols: "1",
2769
+ class: "select",
2770
+ "data-test": "array-index"
2771
+ }, {
2772
+ default: n(() => [
2773
+ i(f, {
2774
+ label: "Index",
2775
+ "hide-details": "",
2776
+ density: "compact",
2777
+ variant: "outlined",
2778
+ "onUpdate:modelValue": [
2779
+ e[4] || (e[4] = (h) => a.indexChanged(h)),
2780
+ e[5] || (e[5] = (h) => l.selectedArrayIndex = h)
2781
+ ],
2782
+ disabled: l.itemsDisabled || a.autocompleteDisabled,
2783
+ items: a.arrayIndexes(),
2784
+ "item-title": "label",
2785
+ "item-value": "value",
2786
+ modelValue: l.selectedArrayIndex
2787
+ }, null, 8, ["disabled", "items", "modelValue"])
2788
+ ]),
2789
+ _: 1
2790
+ })) : S("", !0),
2791
+ s.buttonText ? (w(), x(m, {
2792
+ key: 2,
2793
+ cols: a.colSize,
2794
+ style: { "max-width": "140px" }
2795
+ }, {
2796
+ default: n(() => [
2797
+ i(p, {
2798
+ disabled: a.buttonDisabled,
2799
+ color: "primary",
2800
+ "data-test": "select-send",
2801
+ onClick: a.buttonPressed
2802
+ }, {
2803
+ default: n(() => [
2804
+ _(N(a.actualButtonText), 1)
2805
+ ]),
2806
+ _: 1
2807
+ }, 8, ["disabled", "onClick"])
2808
+ ]),
2809
+ _: 1
2810
+ }, 8, ["cols"])) : S("", !0)
2811
+ ]),
2812
+ _: 1
2813
+ }),
2814
+ s.selectTypes ? (w(), x(g, { key: 0 }, {
2815
+ default: n(() => [
2816
+ i(m, {
2817
+ cols: a.colSize,
2818
+ class: "select",
2819
+ "data-test": "data-type"
2820
+ }, {
2821
+ default: n(() => [
2822
+ i(u, {
2823
+ label: "Value Type",
2824
+ "hide-details": "",
2825
+ density: "compact",
2826
+ variant: "outlined",
2827
+ items: l.valueTypes,
2828
+ modelValue: l.selectedValueType,
2829
+ "onUpdate:modelValue": e[6] || (e[6] = (h) => l.selectedValueType = h)
2830
+ }, null, 8, ["items", "modelValue"])
2831
+ ]),
2832
+ _: 1
2833
+ }, 8, ["cols"]),
2834
+ i(m, {
2835
+ cols: a.colSize,
2836
+ class: "select",
2837
+ "data-test": "reduced"
2838
+ }, {
2839
+ default: n(() => [
2840
+ i(u, {
2841
+ label: "Reduced",
2842
+ "hide-details": "",
2843
+ density: "compact",
2844
+ variant: "outlined",
2845
+ items: l.reductionModes,
2846
+ modelValue: l.selectedReduced,
2847
+ "onUpdate:modelValue": e[7] || (e[7] = (h) => l.selectedReduced = h)
2848
+ }, null, 8, ["items", "modelValue"])
2849
+ ]),
2850
+ _: 1
2851
+ }, 8, ["cols"]),
2852
+ i(m, {
2853
+ cols: a.colSize,
2854
+ class: "select",
2855
+ "data-test": "reduced-type"
2856
+ }, {
2857
+ default: n(() => [
2858
+ i(u, {
2859
+ label: "Reduced Type",
2860
+ "hide-details": "",
2861
+ density: "compact",
2862
+ variant: "outlined",
2863
+ disabled: l.selectedReduced === "DECOM",
2864
+ items: l.reducedTypes,
2865
+ modelValue: l.selectedReducedType,
2866
+ "onUpdate:modelValue": e[8] || (e[8] = (h) => l.selectedReducedType = h)
2867
+ }, null, 8, ["disabled", "items", "modelValue"])
2868
+ ]),
2869
+ _: 1
2870
+ }, 8, ["cols"]),
2871
+ i(m, {
2872
+ cols: a.colSize,
2873
+ style: { "max-width": "140px" }
2874
+ }, null, 8, ["cols"])
2875
+ ]),
2876
+ _: 1
2877
+ })) : S("", !0),
2878
+ i(g, {
2879
+ "no-gutters": "",
2880
+ class: "pt-3 pb-3"
2881
+ }, {
2882
+ default: n(() => [
2883
+ l.hazardous ? (w(), x(m, {
2884
+ key: 0,
2885
+ cols: a.colSize,
2886
+ class: "openc3-yellow"
2887
+ }, {
2888
+ default: n(() => [
2889
+ _("Description: " + N(l.description) + " (HAZARDOUS)", 1)
2890
+ ]),
2891
+ _: 1
2892
+ }, 8, ["cols"])) : (w(), x(m, {
2893
+ key: 1,
2894
+ cols: a.colSize
2895
+ }, {
2896
+ default: n(() => [
2897
+ _("Description: " + N(l.description), 1)
2898
+ ]),
2899
+ _: 1
2900
+ }, 8, ["cols"]))
2901
+ ]),
2902
+ _: 1
2903
+ })
2904
+ ]);
2905
+ }
2906
+ const $e = /* @__PURE__ */ A(Le, [["render", Oe], ["__scopeId", "data-v-c1c7e787"]]);
2907
+ export {
2908
+ it as AceEditorModes,
2909
+ Ge as Config,
2910
+ rt as CriticalCmdDialog,
2911
+ nt as DataViewerComponent,
2912
+ at as DataViewerHistoryComponent,
2913
+ ct as DetailsDialog,
2914
+ pe as EditScreenDialog,
2915
+ Xe as Empty,
2916
+ mt as EnvironmentChooser,
2917
+ Ye as EnvironmentDialog,
2918
+ je as FileOpenSaveDialog,
2919
+ pt as Graph,
2920
+ gt as GraphEditDialog,
2921
+ vt as GraphEditItemDialog,
2922
+ qe as LogMessages,
2923
+ Je as NotFound,
2924
+ Ze as OpenConfigDialog,
2925
+ Qe as Openc3Screen,
2926
+ st as OutputDialog,
2927
+ He as SaveConfigDialog,
2928
+ te as ScreenCompleter,
2929
+ ht as ScriptChooser,
2930
+ yt as SimpleTextDialog,
2931
+ $e as TargetPacketItemChooser,
2932
+ wt as TextBoxDialog,
2933
+ xt as TopBar,
2934
+ Ct as UpgradeToEnterpriseDialog
2935
+ };
2936
+ //# sourceMappingURL=components.js.map