@openc3/vue-common 6.5.1 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (442) hide show
  1. package/dist/{ArrayWidget-Ck6pzAyW.js → ArrayWidget-BSG8KEtf.js} +4 -4
  2. package/dist/{ArrayWidget-Ck6pzAyW.js.map → ArrayWidget-BSG8KEtf.js.map} +1 -1
  3. package/dist/{ArrayWidget-Bb_Ldxq7.cjs → ArrayWidget-B__t3xOt.cjs} +2 -2
  4. package/dist/{ArrayWidget-Bb_Ldxq7.cjs.map → ArrayWidget-B__t3xOt.cjs.map} +1 -1
  5. package/dist/ArrayplotWidget-BduWyJlL.cjs +2 -0
  6. package/dist/ArrayplotWidget-BduWyJlL.cjs.map +1 -0
  7. package/dist/{ArrayplotWidget-ntRLh6-B.js → ArrayplotWidget-WVu76Kqn.js} +22 -22
  8. package/dist/ArrayplotWidget-WVu76Kqn.js.map +1 -0
  9. package/dist/AstroStatus-CILMWL6F.cjs.map +1 -1
  10. package/dist/AstroStatus-CY9VkeTN.js.map +1 -1
  11. package/dist/{BarColumn-Bgz2YJ59.js → BarColumn-Cflh9pUz.js} +3 -3
  12. package/dist/{BarColumn-Bgz2YJ59.js.map → BarColumn-Cflh9pUz.js.map} +1 -1
  13. package/dist/{BarColumn-DtRNuOpa.cjs → BarColumn-DVn9f2WO.cjs} +2 -2
  14. package/dist/{BarColumn-DtRNuOpa.cjs.map → BarColumn-DVn9f2WO.cjs.map} +1 -1
  15. package/dist/{BlockWidget-DGH3Zz5p.js → BlockWidget-B7ryWGCq.js} +4 -4
  16. package/dist/{BlockWidget-DGH3Zz5p.js.map → BlockWidget-B7ryWGCq.js.map} +1 -1
  17. package/dist/{BlockWidget-DOY5lVfa.cjs → BlockWidget-CRqA09Ve.cjs} +2 -2
  18. package/dist/{BlockWidget-DOY5lVfa.cjs.map → BlockWidget-CRqA09Ve.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-D_tupiPB.js → ButtonWidget-BKih3ix9.js} +17 -13
  20. package/dist/{ButtonWidget-D_tupiPB.js.map → ButtonWidget-BKih3ix9.js.map} +1 -1
  21. package/dist/{ButtonWidget-CFyZXGt6.cjs → ButtonWidget-Bb46aUCR.cjs} +3 -3
  22. package/dist/{ButtonWidget-CFyZXGt6.cjs.map → ButtonWidget-Bb46aUCR.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-CzG2jYQb.js → CanvasWidget-DT9xMSfb.js} +2 -2
  24. package/dist/{CanvasWidget-CzG2jYQb.js.map → CanvasWidget-DT9xMSfb.js.map} +1 -1
  25. package/dist/{CanvasWidget-C6dc7mUw.cjs → CanvasWidget-DT_vPAoc.cjs} +2 -2
  26. package/dist/{CanvasWidget-C6dc7mUw.cjs.map → CanvasWidget-DT_vPAoc.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-0FAaw4G2.js → CanvasdotWidget-7H5Hvcn-.js} +2 -2
  28. package/dist/{CanvasdotWidget-0FAaw4G2.js.map → CanvasdotWidget-7H5Hvcn-.js.map} +1 -1
  29. package/dist/{CanvasdotWidget-9bBVHC1l.cjs → CanvasdotWidget-DNSQriVo.cjs} +2 -2
  30. package/dist/{CanvasdotWidget-9bBVHC1l.cjs.map → CanvasdotWidget-DNSQriVo.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-CNJlzLqo.js → CanvasimageWidget-BbWYx6Gj.js} +3 -3
  32. package/dist/{CanvasimageWidget-CNJlzLqo.js.map → CanvasimageWidget-BbWYx6Gj.js.map} +1 -1
  33. package/dist/{CanvasimageWidget-DjvdDCRS.cjs → CanvasimageWidget-CfleScIF.cjs} +2 -2
  34. package/dist/{CanvasimageWidget-DjvdDCRS.cjs.map → CanvasimageWidget-CfleScIF.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-DudwwOD6.js → CanvasimagevalueWidget-Blvoe2X4.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-DudwwOD6.js.map → CanvasimagevalueWidget-Blvoe2X4.js.map} +1 -1
  37. package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs → CanvasimagevalueWidget-ouM4DBeD.cjs} +2 -2
  38. package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs.map → CanvasimagevalueWidget-ouM4DBeD.cjs.map} +1 -1
  39. package/dist/{CanvaslabelWidget-BZQp16dH.js → CanvaslabelWidget-BPx_Rm4o.js} +2 -2
  40. package/dist/{CanvaslabelWidget-BZQp16dH.js.map → CanvaslabelWidget-BPx_Rm4o.js.map} +1 -1
  41. package/dist/{CanvaslabelWidget--6Sjc4E8.cjs → CanvaslabelWidget-DB3qox5N.cjs} +2 -2
  42. package/dist/{CanvaslabelWidget--6Sjc4E8.cjs.map → CanvaslabelWidget-DB3qox5N.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs → CanvaslabelvalueWidget-2k6TjSNj.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs.map → CanvaslabelvalueWidget-2k6TjSNj.cjs.map} +1 -1
  45. package/dist/{CanvaslabelvalueWidget-CHS36Te9.js → CanvaslabelvalueWidget-DzdWvL0W.js} +2 -2
  46. package/dist/{CanvaslabelvalueWidget-CHS36Te9.js.map → CanvaslabelvalueWidget-DzdWvL0W.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-nhKEAGhs.js → CanvaslineWidget-CqskilGk.js} +2 -2
  48. package/dist/{CanvaslineWidget-nhKEAGhs.js.map → CanvaslineWidget-CqskilGk.js.map} +1 -1
  49. package/dist/{CanvaslineWidget-Bn83Rb10.cjs → CanvaslineWidget-oAoznYZP.cjs} +2 -2
  50. package/dist/{CanvaslineWidget-Bn83Rb10.cjs.map → CanvaslineWidget-oAoznYZP.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs → CanvaslinevalueWidget-BmyIxGNz.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs.map → CanvaslinevalueWidget-BmyIxGNz.cjs.map} +1 -1
  53. package/dist/{CanvaslinevalueWidget-DsyIDkJy.js → CanvaslinevalueWidget-C0JIKdvZ.js} +2 -2
  54. package/dist/{CanvaslinevalueWidget-DsyIDkJy.js.map → CanvaslinevalueWidget-C0JIKdvZ.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-BvggsGZY.cjs → CheckbuttonWidget-C548xrRy.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-BvggsGZY.cjs.map → CheckbuttonWidget-C548xrRy.cjs.map} +1 -1
  57. package/dist/{CheckbuttonWidget-DCam7Jd0.js → CheckbuttonWidget-C9FbJx2v.js} +2 -2
  58. package/dist/{CheckbuttonWidget-DCam7Jd0.js.map → CheckbuttonWidget-C9FbJx2v.js.map} +1 -1
  59. package/dist/ClassificationBanners-BTdLBSfy.cjs +2 -0
  60. package/dist/ClassificationBanners-BTdLBSfy.cjs.map +1 -0
  61. package/dist/ClassificationBanners-CgJiwgTp.js +35 -0
  62. package/dist/ClassificationBanners-CgJiwgTp.js.map +1 -0
  63. package/dist/{ComboboxWidget-BS5WSbrK.cjs → ComboboxWidget-AErojGw0.cjs} +2 -2
  64. package/dist/{ComboboxWidget-BS5WSbrK.cjs.map → ComboboxWidget-AErojGw0.cjs.map} +1 -1
  65. package/dist/{ComboboxWidget-ZX-k-_aK.js → ComboboxWidget-BbNKT0s8.js} +2 -2
  66. package/dist/{ComboboxWidget-ZX-k-_aK.js.map → ComboboxWidget-BbNKT0s8.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-Dylpoz_4.js → CriticalCmdDialog-CF7Sqjdm.js} +11 -8
  68. package/dist/{CriticalCmdDialog-Dylpoz_4.js.map → CriticalCmdDialog-CF7Sqjdm.js.map} +1 -1
  69. package/dist/CriticalCmdDialog-N06JxCHg.cjs +2 -0
  70. package/dist/{CriticalCmdDialog-7tOK2XQk.cjs.map → CriticalCmdDialog-N06JxCHg.cjs.map} +1 -1
  71. package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
  72. package/dist/CustomIcon-h5X7369N.js.map +1 -1
  73. package/dist/{DateWidget-DuJ5uC2t.js → DateWidget-CBMsdRUE.js} +2 -2
  74. package/dist/{DateWidget-DuJ5uC2t.js.map → DateWidget-CBMsdRUE.js.map} +1 -1
  75. package/dist/{DateWidget-jejbk2-G.cjs → DateWidget-CCIkDM9_.cjs} +2 -2
  76. package/dist/{DateWidget-jejbk2-G.cjs.map → DateWidget-CCIkDM9_.cjs.map} +1 -1
  77. package/dist/DetailsDialog-CVYBgZll.cjs +2 -0
  78. package/dist/DetailsDialog-CVYBgZll.cjs.map +1 -0
  79. package/dist/{DetailsDialog-BQE0TraI.js → DetailsDialog-DRVahE5z.js} +129 -97
  80. package/dist/DetailsDialog-DRVahE5z.js.map +1 -0
  81. package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
  82. package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
  83. package/dist/EventListDialog-CjYLRdkb.cjs +2 -0
  84. package/dist/{EventListDialog-CDcJcxy5.cjs.map → EventListDialog-CjYLRdkb.cjs.map} +1 -1
  85. package/dist/{EventListDialog-CGUFCrJF.js → EventListDialog-DDWL9gIQ.js} +46 -31
  86. package/dist/{EventListDialog-CGUFCrJF.js.map → EventListDialog-DDWL9gIQ.js.map} +1 -1
  87. package/dist/{FormatvalueWidget-DYICPNcx.js → FormatvalueWidget-BLWsqhIZ.js} +3 -3
  88. package/dist/{FormatvalueWidget-DYICPNcx.js.map → FormatvalueWidget-BLWsqhIZ.js.map} +1 -1
  89. package/dist/{FormatvalueWidget-wu7Q3sXu.cjs → FormatvalueWidget-BiaqheLJ.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-wu7Q3sXu.cjs.map → FormatvalueWidget-BiaqheLJ.cjs.map} +1 -1
  91. package/dist/Graph-BiU56Qj2.js +2669 -0
  92. package/dist/Graph-BiU56Qj2.js.map +1 -0
  93. package/dist/Graph-CWjf71TK.cjs +2 -0
  94. package/dist/Graph-CWjf71TK.cjs.map +1 -0
  95. package/dist/{GraphWidget-cTVq29cY.js → GraphWidget-Ga0AEfrJ.js} +31 -44
  96. package/dist/{GraphWidget-cTVq29cY.js.map → GraphWidget-Ga0AEfrJ.js.map} +1 -1
  97. package/dist/GraphWidget-cfgX_skM.cjs +2 -0
  98. package/dist/{GraphWidget-CQjKAMPR.cjs.map → GraphWidget-cfgX_skM.cjs.map} +1 -1
  99. package/dist/{HorizontalWidget-v1pfd94Z.js → HorizontalWidget-CsVhLwZO.js} +6 -6
  100. package/dist/{HorizontalWidget-v1pfd94Z.js.map → HorizontalWidget-CsVhLwZO.js.map} +1 -1
  101. package/dist/HorizontalWidget-i6aqMSRv.cjs +2 -0
  102. package/dist/{HorizontalWidget--AkRJPlL.cjs.map → HorizontalWidget-i6aqMSRv.cjs.map} +1 -1
  103. package/dist/HorizontalboxWidget-B_S8mswF.cjs +2 -0
  104. package/dist/{HorizontalboxWidget-synL-Bar.cjs.map → HorizontalboxWidget-B_S8mswF.cjs.map} +1 -1
  105. package/dist/{HorizontalboxWidget-B06-c_n4.js → HorizontalboxWidget-xC6PADl3.js} +15 -15
  106. package/dist/{HorizontalboxWidget-B06-c_n4.js.map → HorizontalboxWidget-xC6PADl3.js.map} +1 -1
  107. package/dist/{HorizontallineWidget-lTr2JTFY.cjs → HorizontallineWidget-Cpys-185.cjs} +2 -2
  108. package/dist/{HorizontallineWidget-lTr2JTFY.cjs.map → HorizontallineWidget-Cpys-185.cjs.map} +1 -1
  109. package/dist/{HorizontallineWidget-DEODVJCk.js → HorizontallineWidget-NZIxmRVN.js} +2 -2
  110. package/dist/{HorizontallineWidget-DEODVJCk.js.map → HorizontallineWidget-NZIxmRVN.js.map} +1 -1
  111. package/dist/{IframeWidget-n8lNXrpt.js → IframeWidget-BgzjSfag.js} +2 -2
  112. package/dist/{IframeWidget-n8lNXrpt.js.map → IframeWidget-BgzjSfag.js.map} +1 -1
  113. package/dist/{IframeWidget-ByhwW9yG.cjs → IframeWidget-CCdvd8rg.cjs} +2 -2
  114. package/dist/{IframeWidget-ByhwW9yG.cjs.map → IframeWidget-CCdvd8rg.cjs.map} +1 -1
  115. package/dist/{ImageLoader-DBWVFtNu.cjs → ImageLoader-BIKl6vGc.cjs} +2 -2
  116. package/dist/{ImageLoader-DBWVFtNu.cjs.map → ImageLoader-BIKl6vGc.cjs.map} +1 -1
  117. package/dist/{ImageLoader-CfcErydq.js → ImageLoader-DbFVK1Ui.js} +2 -2
  118. package/dist/{ImageLoader-CfcErydq.js.map → ImageLoader-DbFVK1Ui.js.map} +1 -1
  119. package/dist/{ImageviewerWidget-DE8fj06Z.js → ImageviewerWidget-BnT5m-nw.js} +2 -2
  120. package/dist/{ImageviewerWidget-DE8fj06Z.js.map → ImageviewerWidget-BnT5m-nw.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-D4mU6wLX.cjs → ImageviewerWidget-lnralJZa.cjs} +2 -2
  122. package/dist/{ImageviewerWidget-D4mU6wLX.cjs.map → ImageviewerWidget-lnralJZa.cjs.map} +1 -1
  123. package/dist/{InterfacesTab-BF-Wx5gk.js → InterfacesTab-Cd_RITVP.js} +3 -3
  124. package/dist/{InterfacesTab-BF-Wx5gk.js.map → InterfacesTab-Cd_RITVP.js.map} +1 -1
  125. package/dist/{InterfacesTab-DTAAIx-y.cjs → InterfacesTab-DjlzjJYG.cjs} +2 -2
  126. package/dist/{InterfacesTab-DTAAIx-y.cjs.map → InterfacesTab-DjlzjJYG.cjs.map} +1 -1
  127. package/dist/{LabelWidget-DQZqRxKF.cjs → LabelWidget-CRHSFVPT.cjs} +2 -2
  128. package/dist/{LabelWidget-DQZqRxKF.cjs.map → LabelWidget-CRHSFVPT.cjs.map} +1 -1
  129. package/dist/{LabelWidget-iUIJLhdA.js → LabelWidget-DSDYmz6X.js} +2 -2
  130. package/dist/{LabelWidget-iUIJLhdA.js.map → LabelWidget-DSDYmz6X.js.map} +1 -1
  131. package/dist/{LabelledWidget-9HWChRmv.cjs → LabelledWidget-BXf9cTf_.cjs} +2 -2
  132. package/dist/{LabelledWidget-9HWChRmv.cjs.map → LabelledWidget-BXf9cTf_.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-KI6fMlsr.js → LabelledWidget-DMb-myxs.js} +4 -4
  134. package/dist/{LabelledWidget-KI6fMlsr.js.map → LabelledWidget-DMb-myxs.js.map} +1 -1
  135. package/dist/{LabelprogressbarWidget-DwzTP73u.cjs → LabelprogressbarWidget-BNHaAUXq.cjs} +2 -2
  136. package/dist/{LabelprogressbarWidget-DwzTP73u.cjs.map → LabelprogressbarWidget-BNHaAUXq.cjs.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-C2lzmqBH.js → LabelprogressbarWidget-CkjDJBao.js} +4 -4
  138. package/dist/{LabelprogressbarWidget-C2lzmqBH.js.map → LabelprogressbarWidget-CkjDJBao.js.map} +1 -1
  139. package/dist/{LabelsparklineWidget-DMjBshq8.cjs → LabelsparklineWidget-BpHMkt-L.cjs} +2 -2
  140. package/dist/{LabelsparklineWidget-DMjBshq8.cjs.map → LabelsparklineWidget-BpHMkt-L.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-Ci6GGm29.js → LabelsparklineWidget-DBYPFz3Y.js} +4 -4
  142. package/dist/{LabelsparklineWidget-Ci6GGm29.js.map → LabelsparklineWidget-DBYPFz3Y.js.map} +1 -1
  143. package/dist/{LabelvalueWidget-mAb0eLA8.cjs → LabelvalueWidget-BFHYb64m.cjs} +2 -2
  144. package/dist/{LabelvalueWidget-mAb0eLA8.cjs.map → LabelvalueWidget-BFHYb64m.cjs.map} +1 -1
  145. package/dist/{LabelvalueWidget-oiW-JDw6.js → LabelvalueWidget-DlTkJC4i.js} +4 -4
  146. package/dist/{LabelvalueWidget-oiW-JDw6.js.map → LabelvalueWidget-DlTkJC4i.js.map} +1 -1
  147. package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs → LabelvaluedescWidget-CUld9MqE.cjs} +2 -2
  148. package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs.map → LabelvaluedescWidget-CUld9MqE.cjs.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js → LabelvaluedescWidget-dRqnGZub.js} +5 -5
  150. package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js.map → LabelvaluedescWidget-dRqnGZub.js.map} +1 -1
  151. package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs → LabelvaluelimitsbarWidget-Br_PXH0r.cjs} +2 -2
  152. package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map → LabelvaluelimitsbarWidget-Br_PXH0r.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js → LabelvaluelimitsbarWidget-CS4NAPJ1.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js.map → LabelvaluelimitsbarWidget-CS4NAPJ1.js.map} +1 -1
  155. package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js → LabelvaluelimitscolumnWidget-D9x4Ppv8.js} +5 -5
  156. package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js.map → LabelvaluelimitscolumnWidget-D9x4Ppv8.js.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs → LabelvaluelimitscolumnWidget-DjLG10C5.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs.map → LabelvaluelimitscolumnWidget-DjLG10C5.cjs.map} +1 -1
  159. package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs → LabelvaluerangebarWidget-CsUfrGAM.cjs} +2 -2
  160. package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs.map → LabelvaluerangebarWidget-CsUfrGAM.cjs.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-Bs9locqu.js → LabelvaluerangebarWidget-Dhyng4-n.js} +4 -4
  162. package/dist/{LabelvaluerangebarWidget-Bs9locqu.js.map → LabelvaluerangebarWidget-Dhyng4-n.js.map} +1 -1
  163. package/dist/Layout-DDktMnzb.cjs +2 -0
  164. package/dist/{Layout-kOQnicRa.cjs.map → Layout-DDktMnzb.cjs.map} +1 -1
  165. package/dist/{Layout-1z8iJV5-.js → Layout-mWR35VAD.js} +2 -2
  166. package/dist/{Layout-1z8iJV5-.js.map → Layout-mWR35VAD.js.map} +1 -1
  167. package/dist/LedWidget-CCQWCw80.cjs +2 -0
  168. package/dist/LedWidget-CCQWCw80.cjs.map +1 -0
  169. package/dist/{LedWidget-BN8IgAxJ.js → LedWidget-D8cq4pUv.js} +6 -6
  170. package/dist/LedWidget-D8cq4pUv.js.map +1 -0
  171. package/dist/{LimitsbarWidget-Co5GAHro.cjs → LimitsbarWidget-D4O0LWuC.cjs} +2 -2
  172. package/dist/{LimitsbarWidget-Co5GAHro.cjs.map → LimitsbarWidget-D4O0LWuC.cjs.map} +1 -1
  173. package/dist/{LimitsbarWidget-BxxoKTjp.js → LimitsbarWidget-VGJnDuVM.js} +2 -2
  174. package/dist/{LimitsbarWidget-BxxoKTjp.js.map → LimitsbarWidget-VGJnDuVM.js.map} +1 -1
  175. package/dist/{LimitscolorWidget-BpTcgqRC.cjs → LimitscolorWidget-BvxsopUs.cjs} +2 -2
  176. package/dist/{LimitscolorWidget-BpTcgqRC.cjs.map → LimitscolorWidget-BvxsopUs.cjs.map} +1 -1
  177. package/dist/{LimitscolorWidget-DFDwf4In.js → LimitscolorWidget-CG6Pqi12.js} +2 -2
  178. package/dist/{LimitscolorWidget-DFDwf4In.js.map → LimitscolorWidget-CG6Pqi12.js.map} +1 -1
  179. package/dist/{LimitscolumnWidget-CdBh2mJu.js → LimitscolumnWidget-DjovQdiT.js} +2 -2
  180. package/dist/{LimitscolumnWidget-CdBh2mJu.js.map → LimitscolumnWidget-DjovQdiT.js.map} +1 -1
  181. package/dist/{LimitscolumnWidget-CqJJKDzz.cjs → LimitscolumnWidget-Z9JnMlDS.cjs} +2 -2
  182. package/dist/{LimitscolumnWidget-CqJJKDzz.cjs.map → LimitscolumnWidget-Z9JnMlDS.cjs.map} +1 -1
  183. package/dist/LinegraphWidget-B_ECNLzU.cjs +2 -0
  184. package/dist/LinegraphWidget-B_ECNLzU.cjs.map +1 -0
  185. package/dist/{LinegraphWidget-jXksfbPb.js → LinegraphWidget-DSWAhXgZ.js} +13 -13
  186. package/dist/LinegraphWidget-DSWAhXgZ.js.map +1 -0
  187. package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js → MatrixbycolumnsWidget-C3cuhRxz.js} +4 -4
  188. package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js.map → MatrixbycolumnsWidget-C3cuhRxz.js.map} +1 -1
  189. package/dist/MatrixbycolumnsWidget-CPFzRQN5.cjs +2 -0
  190. package/dist/{MatrixbycolumnsWidget-DxRhvPGv.cjs.map → MatrixbycolumnsWidget-CPFzRQN5.cjs.map} +1 -1
  191. package/dist/{MicroservicesTab-DGaTcj-y.cjs → MicroservicesTab-BGgwT56M.cjs} +2 -2
  192. package/dist/{MicroservicesTab-DGaTcj-y.cjs.map → MicroservicesTab-BGgwT56M.cjs.map} +1 -1
  193. package/dist/{MicroservicesTab-B-SdMwek.js → MicroservicesTab-Dbp02UlV.js} +4 -4
  194. package/dist/{MicroservicesTab-B-SdMwek.js.map → MicroservicesTab-Dbp02UlV.js.map} +1 -1
  195. package/dist/Openc3Screen-BP2oW88G.cjs +6 -0
  196. package/dist/Openc3Screen-BP2oW88G.cjs.map +1 -0
  197. package/dist/{Openc3Screen-BZN0Wtrm.js → Openc3Screen-CkdegNDJ.js} +438 -310
  198. package/dist/Openc3Screen-CkdegNDJ.js.map +1 -0
  199. package/dist/{OutputDialog-CxKDhrg6.cjs → OutputDialog-2CmOBAEE.cjs} +2 -2
  200. package/dist/{OutputDialog-CxKDhrg6.cjs.map → OutputDialog-2CmOBAEE.cjs.map} +1 -1
  201. package/dist/{OutputDialog-CcSp-Uqo.js → OutputDialog-M5Xc_DqH.js} +12 -11
  202. package/dist/{OutputDialog-CcSp-Uqo.js.map → OutputDialog-M5Xc_DqH.js.map} +1 -1
  203. package/dist/PackagesTab-Dwp6g8W0.cjs +2 -0
  204. package/dist/{PackagesTab-B4V2n4io.cjs.map → PackagesTab-Dwp6g8W0.cjs.map} +1 -1
  205. package/dist/{PackagesTab-Dx25CfF0.js → PackagesTab-HQCOIGZK.js} +30 -24
  206. package/dist/{PackagesTab-Dx25CfF0.js.map → PackagesTab-HQCOIGZK.js.map} +1 -1
  207. package/dist/PluginsTab-COKDXShE.cjs +6 -0
  208. package/dist/PluginsTab-COKDXShE.cjs.map +1 -0
  209. package/dist/PluginsTab-CZApRILr.js +1288 -0
  210. package/dist/PluginsTab-CZApRILr.js.map +1 -0
  211. package/dist/{ProgressbarWidget-C0AkbX_o.cjs → ProgressbarWidget-BADSYuUN.cjs} +2 -2
  212. package/dist/{ProgressbarWidget-C0AkbX_o.cjs.map → ProgressbarWidget-BADSYuUN.cjs.map} +1 -1
  213. package/dist/{ProgressbarWidget-Cdu5nJC3.js → ProgressbarWidget-oCgAEFBO.js} +2 -2
  214. package/dist/{ProgressbarWidget-Cdu5nJC3.js.map → ProgressbarWidget-oCgAEFBO.js.map} +1 -1
  215. package/dist/{RadiobuttonWidget-DslmJO31.cjs → RadiobuttonWidget-Bklx2_Au.cjs} +2 -2
  216. package/dist/{RadiobuttonWidget-DslmJO31.cjs.map → RadiobuttonWidget-Bklx2_Au.cjs.map} +1 -1
  217. package/dist/{RadiobuttonWidget-CZZGbvdG.js → RadiobuttonWidget-D4Dak3lc.js} +2 -2
  218. package/dist/{RadiobuttonWidget-CZZGbvdG.js.map → RadiobuttonWidget-D4Dak3lc.js.map} +1 -1
  219. package/dist/{RadiogroupWidget-CQN3v8Ip.js → RadiogroupWidget-Dbe9T4fp.js} +2 -2
  220. package/dist/{RadiogroupWidget-CQN3v8Ip.js.map → RadiogroupWidget-Dbe9T4fp.js.map} +1 -1
  221. package/dist/{RadiogroupWidget-DKgBAR9E.cjs → RadiogroupWidget-Z2S2tgjG.cjs} +2 -2
  222. package/dist/{RadiogroupWidget-DKgBAR9E.cjs.map → RadiogroupWidget-Z2S2tgjG.cjs.map} +1 -1
  223. package/dist/{RangebarWidget-Tq80I5zA.cjs → RangebarWidget-C0TpxFDi.cjs} +2 -2
  224. package/dist/{RangebarWidget-Tq80I5zA.cjs.map → RangebarWidget-C0TpxFDi.cjs.map} +1 -1
  225. package/dist/{RangebarWidget-dZN9WjoZ.js → RangebarWidget-CIVrgqrW.js} +2 -2
  226. package/dist/{RangebarWidget-dZN9WjoZ.js.map → RangebarWidget-CIVrgqrW.js.map} +1 -1
  227. package/dist/{RedisTab-CkSwEwTZ.js → RedisTab-B8U-vEQZ.js} +19 -16
  228. package/dist/{RedisTab-CkSwEwTZ.js.map → RedisTab-B8U-vEQZ.js.map} +1 -1
  229. package/dist/RedisTab-cgicWb81.cjs +2 -0
  230. package/dist/{RedisTab-CdiSo-CO.cjs.map → RedisTab-cgicWb81.cjs.map} +1 -1
  231. package/dist/{RollupWidget-CHdZAUCb.cjs → RollupWidget-BEDf-mfg.cjs} +2 -2
  232. package/dist/{RollupWidget-CHdZAUCb.cjs.map → RollupWidget-BEDf-mfg.cjs.map} +1 -1
  233. package/dist/{RollupWidget-i9DnNJl6.js → RollupWidget-CH1-XNLV.js} +2 -2
  234. package/dist/{RollupWidget-i9DnNJl6.js.map → RollupWidget-CH1-XNLV.js.map} +1 -1
  235. package/dist/{RoutersTab-Cp8wM-mS.cjs → RoutersTab-BA-KlYIm.cjs} +2 -2
  236. package/dist/{RoutersTab-Cp8wM-mS.cjs.map → RoutersTab-BA-KlYIm.cjs.map} +1 -1
  237. package/dist/{RoutersTab-DiYEI1Nq.js → RoutersTab-WKa6K7B8.js} +3 -3
  238. package/dist/{RoutersTab-DiYEI1Nq.js.map → RoutersTab-WKa6K7B8.js.map} +1 -1
  239. package/dist/{ScriptChooser-Cua8ObYv.js → ScriptChooser-B5TkGuZ4.js} +2 -2
  240. package/dist/{ScriptChooser-Cua8ObYv.js.map → ScriptChooser-B5TkGuZ4.js.map} +1 -1
  241. package/dist/{ScriptChooser-BnTP6ucF.cjs → ScriptChooser-LsboGSgh.cjs} +2 -2
  242. package/dist/{ScriptChooser-BnTP6ucF.cjs.map → ScriptChooser-LsboGSgh.cjs.map} +1 -1
  243. package/dist/{ScrollwindowWidget-54GU96Ve.js → ScrollwindowWidget-BwFG6Wn8.js} +15 -15
  244. package/dist/{ScrollwindowWidget-54GU96Ve.js.map → ScrollwindowWidget-BwFG6Wn8.js.map} +1 -1
  245. package/dist/ScrollwindowWidget-DWxDmpFB.cjs +2 -0
  246. package/dist/ScrollwindowWidget-DWxDmpFB.cjs.map +1 -0
  247. package/dist/{SecretsTab-DY16usGc.cjs → SecretsTab-DKX5gLH_.cjs} +2 -2
  248. package/dist/{SecretsTab-DY16usGc.cjs.map → SecretsTab-DKX5gLH_.cjs.map} +1 -1
  249. package/dist/{SecretsTab-uWRVI1EE.js → SecretsTab-Vtvbb_1U.js} +7 -5
  250. package/dist/{SecretsTab-uWRVI1EE.js.map → SecretsTab-Vtvbb_1U.js.map} +1 -1
  251. package/dist/SettingsTab-Ch52foLm.cjs +3 -0
  252. package/dist/SettingsTab-Ch52foLm.cjs.map +1 -0
  253. package/dist/SettingsTab-DilFIQ3K.js +1817 -0
  254. package/dist/SettingsTab-DilFIQ3K.js.map +1 -0
  255. package/dist/{SignalWidget-COL8kXSJ.cjs → SignalWidget-1WqQFVq9.cjs} +2 -2
  256. package/dist/{SignalWidget-COL8kXSJ.cjs.map → SignalWidget-1WqQFVq9.cjs.map} +1 -1
  257. package/dist/{SignalWidget-B_kA9eCJ.js → SignalWidget-Gz2gHrUm.js} +2 -2
  258. package/dist/{SignalWidget-B_kA9eCJ.js.map → SignalWidget-Gz2gHrUm.js.map} +1 -1
  259. package/dist/{SimpleTextDialog-BWUqPlTv.cjs → SimpleTextDialog-BwOVWhRY.cjs} +2 -2
  260. package/dist/{SimpleTextDialog-BWUqPlTv.cjs.map → SimpleTextDialog-BwOVWhRY.cjs.map} +1 -1
  261. package/dist/{SimpleTextDialog-BulqUrdH.js → SimpleTextDialog-Cmtrmt79.js} +10 -9
  262. package/dist/{SimpleTextDialog-BulqUrdH.js.map → SimpleTextDialog-Cmtrmt79.js.map} +1 -1
  263. package/dist/{SpacerWidget-XoMPHak8.js → SpacerWidget-Bg7VDB0k.js} +2 -2
  264. package/dist/{SpacerWidget-XoMPHak8.js.map → SpacerWidget-Bg7VDB0k.js.map} +1 -1
  265. package/dist/{SpacerWidget-D_Ya_b1j.cjs → SpacerWidget-Bzp3aI40.cjs} +2 -2
  266. package/dist/{SpacerWidget-D_Ya_b1j.cjs.map → SpacerWidget-Bzp3aI40.cjs.map} +1 -1
  267. package/dist/{SparklineWidget-DQNsvEj9.js → SparklineWidget-D_b5rfJv.js} +4 -4
  268. package/dist/{SparklineWidget-DQNsvEj9.js.map → SparklineWidget-D_b5rfJv.js.map} +1 -1
  269. package/dist/{SparklineWidget-CRzXTS5z.cjs → SparklineWidget-kMWjVDrm.cjs} +2 -2
  270. package/dist/{SparklineWidget-CRzXTS5z.cjs.map → SparklineWidget-kMWjVDrm.cjs.map} +1 -1
  271. package/dist/{TabbookWidget-_HVA72t5.js → TabbookWidget-C30f9B6z.js} +2 -2
  272. package/dist/{TabbookWidget-_HVA72t5.js.map → TabbookWidget-C30f9B6z.js.map} +1 -1
  273. package/dist/{TabbookWidget-Bh-GDBXg.cjs → TabbookWidget-DlVrU3wK.cjs} +2 -2
  274. package/dist/{TabbookWidget-Bh-GDBXg.cjs.map → TabbookWidget-DlVrU3wK.cjs.map} +1 -1
  275. package/dist/{TargetsTab-BfoRYnTP.js → TargetsTab-CEPId9dL.js} +5 -4
  276. package/dist/{TargetsTab-BfoRYnTP.js.map → TargetsTab-CEPId9dL.js.map} +1 -1
  277. package/dist/{TargetsTab-CGE-jQAz.cjs → TargetsTab-uqjueXlq.cjs} +2 -2
  278. package/dist/{TargetsTab-CGE-jQAz.cjs.map → TargetsTab-uqjueXlq.cjs.map} +1 -1
  279. package/dist/{TextBoxDialog-DWt30tB8.cjs → TextBoxDialog--uIDsNPU.cjs} +2 -2
  280. package/dist/{TextBoxDialog-DWt30tB8.cjs.map → TextBoxDialog--uIDsNPU.cjs.map} +1 -1
  281. package/dist/{TextBoxDialog-C60jmnyN.js → TextBoxDialog-BlZ6MBoW.js} +4 -3
  282. package/dist/{TextBoxDialog-C60jmnyN.js.map → TextBoxDialog-BlZ6MBoW.js.map} +1 -1
  283. package/dist/{TextboxWidget-uDptDK_z.cjs → TextboxWidget-BJka_3dT.cjs} +2 -2
  284. package/dist/{TextboxWidget-uDptDK_z.cjs.map → TextboxWidget-BJka_3dT.cjs.map} +1 -1
  285. package/dist/{TextboxWidget-0JXn4bMH.js → TextboxWidget-CDqxsgys.js} +4 -4
  286. package/dist/{TextboxWidget-0JXn4bMH.js.map → TextboxWidget-CDqxsgys.js.map} +1 -1
  287. package/dist/{TextfieldWidget-B0FCskrL.cjs → TextfieldWidget-C7_48W7n.cjs} +2 -2
  288. package/dist/{TextfieldWidget-B0FCskrL.cjs.map → TextfieldWidget-C7_48W7n.cjs.map} +1 -1
  289. package/dist/{TextfieldWidget-BXr9MkVW.js → TextfieldWidget-CAyjKJs6.js} +2 -2
  290. package/dist/{TextfieldWidget-BXr9MkVW.js.map → TextfieldWidget-CAyjKJs6.js.map} +1 -1
  291. package/dist/{TimeWidget-C67uwMGH.js → TimeWidget-BQsP0G2X.js} +2 -2
  292. package/dist/{TimeWidget-C67uwMGH.js.map → TimeWidget-BQsP0G2X.js.map} +1 -1
  293. package/dist/{TimeWidget-q5tUvHC6.cjs → TimeWidget-WPWiADCI.cjs} +2 -2
  294. package/dist/{TimeWidget-q5tUvHC6.cjs.map → TimeWidget-WPWiADCI.cjs.map} +1 -1
  295. package/dist/{TitleWidget-t_YLgUMB.js → TitleWidget-DXVba53S.js} +2 -2
  296. package/dist/{TitleWidget-t_YLgUMB.js.map → TitleWidget-DXVba53S.js.map} +1 -1
  297. package/dist/{TitleWidget-REsd7MqR.cjs → TitleWidget-DavRJ5B5.cjs} +2 -2
  298. package/dist/{TitleWidget-REsd7MqR.cjs.map → TitleWidget-DavRJ5B5.cjs.map} +1 -1
  299. package/dist/{ToolsTab-DKYeIlXu.js → ToolsTab-CSmjz1H7.js} +6 -5
  300. package/dist/{ToolsTab-DKYeIlXu.js.map → ToolsTab-CSmjz1H7.js.map} +1 -1
  301. package/dist/{ToolsTab-CGztf9_j.cjs → ToolsTab-DUwXt5hn.cjs} +3 -3
  302. package/dist/{ToolsTab-CGztf9_j.cjs.map → ToolsTab-DUwXt5hn.cjs.map} +1 -1
  303. package/dist/TopBar-C5lQcY1W.cjs +2 -0
  304. package/dist/{TopBar-B0UcAtIW.cjs.map → TopBar-C5lQcY1W.cjs.map} +1 -1
  305. package/dist/{TopBar-BrCfgCxc.js → TopBar-D_2lT9RB.js} +14 -12
  306. package/dist/{TopBar-BrCfgCxc.js.map → TopBar-D_2lT9RB.js.map} +1 -1
  307. package/dist/UpgradeToEnterpriseDialog-BHDDrj0t.cjs +2 -0
  308. package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map → UpgradeToEnterpriseDialog-BHDDrj0t.cjs.map} +1 -1
  309. package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js → UpgradeToEnterpriseDialog-Cvt5MMTj.js} +19 -16
  310. package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js.map → UpgradeToEnterpriseDialog-Cvt5MMTj.js.map} +1 -1
  311. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js} +12491 -12383
  312. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js.map +1 -0
  313. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs +1498 -0
  314. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs.map +1 -0
  315. package/dist/VWidget-C7V6pKTg.cjs +2 -0
  316. package/dist/VWidget-C7V6pKTg.cjs.map +1 -0
  317. package/dist/{VWidget-j2GIGGSX.js → VWidget-CFTCukCL.js} +16 -10
  318. package/dist/VWidget-CFTCukCL.js.map +1 -0
  319. package/dist/{ValueWidget-CjZeSiPQ.cjs → ValueWidget-5ulSOrPw.cjs} +2 -2
  320. package/dist/{ValueWidget-CjZeSiPQ.cjs.map → ValueWidget-5ulSOrPw.cjs.map} +1 -1
  321. package/dist/{ValueWidget-3jNtnh5i.js → ValueWidget-B-TWLPdM.js} +4 -4
  322. package/dist/{ValueWidget-3jNtnh5i.js.map → ValueWidget-B-TWLPdM.js.map} +1 -1
  323. package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs → ValuelimitsbarWidget-CTFVDwcL.cjs} +2 -2
  324. package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs.map → ValuelimitsbarWidget-CTFVDwcL.cjs.map} +1 -1
  325. package/dist/{ValuelimitsbarWidget-JSceOzGS.js → ValuelimitsbarWidget-jsDXdPdC.js} +4 -4
  326. package/dist/{ValuelimitsbarWidget-JSceOzGS.js.map → ValuelimitsbarWidget-jsDXdPdC.js.map} +1 -1
  327. package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs → ValuelimitscolumnWidget-Du3Baz6G.cjs} +2 -2
  328. package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs.map → ValuelimitscolumnWidget-Du3Baz6G.cjs.map} +1 -1
  329. package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js → ValuelimitscolumnWidget-I-uwnXM2.js} +4 -4
  330. package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js.map → ValuelimitscolumnWidget-I-uwnXM2.js.map} +1 -1
  331. package/dist/{ValuerangebarWidget-CpZYmUl_.cjs → ValuerangebarWidget-BjXDCLm3.cjs} +2 -2
  332. package/dist/{ValuerangebarWidget-CpZYmUl_.cjs.map → ValuerangebarWidget-BjXDCLm3.cjs.map} +1 -1
  333. package/dist/{ValuerangebarWidget-DnZrho8S.js → ValuerangebarWidget-OyhSTScu.js} +4 -4
  334. package/dist/{ValuerangebarWidget-DnZrho8S.js.map → ValuerangebarWidget-OyhSTScu.js.map} +1 -1
  335. package/dist/VerticalWidget-CKDTGmhp.cjs +2 -0
  336. package/dist/{VerticalWidget-CcJMMaK_.cjs.map → VerticalWidget-CKDTGmhp.cjs.map} +1 -1
  337. package/dist/{VerticalWidget-DJvoxqLE.js → VerticalWidget-CkFbX1Gq.js} +13 -13
  338. package/dist/{VerticalWidget-DJvoxqLE.js.map → VerticalWidget-CkFbX1Gq.js.map} +1 -1
  339. package/dist/VerticalboxWidget-D09UbA0I.cjs +2 -0
  340. package/dist/{VerticalboxWidget-CJR_mOLa.cjs.map → VerticalboxWidget-D09UbA0I.cjs.map} +1 -1
  341. package/dist/{VerticalboxWidget-CYYyLBoO.js → VerticalboxWidget-FEQgPM9r.js} +13 -13
  342. package/dist/{VerticalboxWidget-CYYyLBoO.js.map → VerticalboxWidget-FEQgPM9r.js.map} +1 -1
  343. package/dist/{Widget-Bn_S-zBo.js → Widget-C3-TBgP7.js} +4 -4
  344. package/dist/Widget-C3-TBgP7.js.map +1 -0
  345. package/dist/{Widget-O7wkmc39.cjs → Widget-CSBtgNwA.cjs} +2 -2
  346. package/dist/{Widget-O7wkmc39.cjs.map → Widget-CSBtgNwA.cjs.map} +1 -1
  347. package/dist/components.cjs +3 -3
  348. package/dist/components.cjs.map +1 -1
  349. package/dist/components.js +257 -804
  350. package/dist/components.js.map +1 -1
  351. package/dist/fileIcon-BduOQcTc.cjs.map +1 -1
  352. package/dist/fileIcon-DqRHb1_Z.js.map +1 -1
  353. package/dist/format-B22VpiOS.cjs.map +1 -1
  354. package/dist/format-CVeawcIv.js.map +1 -1
  355. package/dist/icons.cjs.map +1 -1
  356. package/dist/icons.js.map +1 -1
  357. package/dist/{index-qCq0L4jN.js → index-DDjz5VQq.js} +345 -327
  358. package/dist/index-DDjz5VQq.js.map +1 -0
  359. package/dist/index-DZh4NjG5.cjs +7 -0
  360. package/dist/index-DZh4NjG5.cjs.map +1 -0
  361. package/dist/parse-DnkEsW-3.js.map +1 -1
  362. package/dist/parse-DwfgQboe.cjs.map +1 -1
  363. package/dist/plugins.cjs +2 -2
  364. package/dist/plugins.cjs.map +1 -1
  365. package/dist/plugins.js +184 -175
  366. package/dist/plugins.js.map +1 -1
  367. package/dist/settings-BboN1VLt.cjs +2 -0
  368. package/dist/settings-BboN1VLt.cjs.map +1 -0
  369. package/dist/settings-spKii1fI.js +34 -0
  370. package/dist/settings-spKii1fI.js.map +1 -0
  371. package/dist/timeFilters-BKnCM4rv.js.map +1 -1
  372. package/dist/timeFilters-CJFxfjqN.cjs.map +1 -1
  373. package/dist/tools/admin.cjs +3 -3
  374. package/dist/tools/admin.cjs.map +1 -1
  375. package/dist/tools/admin.js +90 -59
  376. package/dist/tools/admin.js.map +1 -1
  377. package/dist/tools/base.cjs +1 -1
  378. package/dist/tools/base.cjs.map +1 -1
  379. package/dist/tools/base.js +530 -474
  380. package/dist/tools/base.js.map +1 -1
  381. package/dist/tools/calendar.cjs +1 -1
  382. package/dist/tools/calendar.js +1 -1
  383. package/dist/tools/scriptrunner.cjs +7 -7
  384. package/dist/tools/scriptrunner.cjs.map +1 -1
  385. package/dist/tools/scriptrunner.js +344 -293
  386. package/dist/tools/scriptrunner.js.map +1 -1
  387. package/dist/vue-common.css +1 -1
  388. package/dist/widgets.cjs +1 -1
  389. package/dist/widgets.js +63 -63
  390. package/package.json +14 -14
  391. package/dist/ArrayplotWidget-DC41cpv1.cjs +0 -2
  392. package/dist/ArrayplotWidget-DC41cpv1.cjs.map +0 -1
  393. package/dist/ArrayplotWidget-ntRLh6-B.js.map +0 -1
  394. package/dist/CriticalCmdDialog-7tOK2XQk.cjs +0 -2
  395. package/dist/DetailsDialog-BQE0TraI.js.map +0 -1
  396. package/dist/DetailsDialog-DmKpPDNn.cjs +0 -2
  397. package/dist/DetailsDialog-DmKpPDNn.cjs.map +0 -1
  398. package/dist/EventListDialog-CDcJcxy5.cjs +0 -2
  399. package/dist/Graph-DCihpnT0.js +0 -1853
  400. package/dist/Graph-DCihpnT0.js.map +0 -1
  401. package/dist/Graph-mSqImgca.cjs +0 -2
  402. package/dist/Graph-mSqImgca.cjs.map +0 -1
  403. package/dist/GraphWidget-CQjKAMPR.cjs +0 -2
  404. package/dist/HorizontalWidget--AkRJPlL.cjs +0 -2
  405. package/dist/HorizontalboxWidget-synL-Bar.cjs +0 -2
  406. package/dist/Layout-kOQnicRa.cjs +0 -2
  407. package/dist/LedWidget-BN8IgAxJ.js.map +0 -1
  408. package/dist/LedWidget-BUTbyEBi.cjs +0 -2
  409. package/dist/LedWidget-BUTbyEBi.cjs.map +0 -1
  410. package/dist/LinegraphWidget-Bay0EtbI.cjs +0 -2
  411. package/dist/LinegraphWidget-Bay0EtbI.cjs.map +0 -1
  412. package/dist/LinegraphWidget-jXksfbPb.js.map +0 -1
  413. package/dist/MatrixbycolumnsWidget-DxRhvPGv.cjs +0 -2
  414. package/dist/Openc3Screen-BZN0Wtrm.js.map +0 -1
  415. package/dist/Openc3Screen-dtpBWZdA.cjs +0 -5
  416. package/dist/Openc3Screen-dtpBWZdA.cjs.map +0 -1
  417. package/dist/PackagesTab-B4V2n4io.cjs +0 -2
  418. package/dist/PluginsTab-DHO1tK2S.cjs +0 -6
  419. package/dist/PluginsTab-DHO1tK2S.cjs.map +0 -1
  420. package/dist/PluginsTab-lHDR5v6S.js +0 -562
  421. package/dist/PluginsTab-lHDR5v6S.js.map +0 -1
  422. package/dist/RedisTab-CdiSo-CO.cjs +0 -2
  423. package/dist/ScrollwindowWidget-C5_X-KwQ.cjs +0 -2
  424. package/dist/ScrollwindowWidget-C5_X-KwQ.cjs.map +0 -1
  425. package/dist/SettingsTab-BVnr4OtU.js +0 -1445
  426. package/dist/SettingsTab-BVnr4OtU.js.map +0 -1
  427. package/dist/SettingsTab-BkwaDhYo.cjs +0 -3
  428. package/dist/SettingsTab-BkwaDhYo.cjs.map +0 -1
  429. package/dist/TopBar-B0UcAtIW.cjs +0 -2
  430. package/dist/UpgradeToEnterpriseDialog-DJ3oth3I.cjs +0 -2
  431. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs +0 -1497
  432. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map +0 -1
  433. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map +0 -1
  434. package/dist/VWidget-BMxLXtSO.cjs +0 -2
  435. package/dist/VWidget-BMxLXtSO.cjs.map +0 -1
  436. package/dist/VWidget-j2GIGGSX.js.map +0 -1
  437. package/dist/VerticalWidget-CcJMMaK_.cjs +0 -2
  438. package/dist/VerticalboxWidget-CJR_mOLa.cjs +0 -2
  439. package/dist/Widget-Bn_S-zBo.js.map +0 -1
  440. package/dist/index-DcL65Mqb.cjs +0 -7
  441. package/dist/index-DcL65Mqb.cjs.map +0 -1
  442. package/dist/index-qCq0L4jN.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PackagesTab-B4V2n4io.cjs","sources":["../src/tools/admin/tabs/PackagesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn @click=\"selectFile\">Install Package</v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\"></rux-progress>\n </v-col>\n </v-row>\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h6\">Process List</v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template v-if=\"process.state !== 'Running'\" #append>\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span>Show Output</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-list class=\"list\" data-test=\"packageList\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Ruby Gems</v-col></v-row>\n <div v-for=\"(gem, index) in gems\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ gem }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Ruby Gem\"\n @click=\"deletePackage(gem)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Python Packages</v-col></v-row>\n <div v-for=\"(pkg, index) in python\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ pkg }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Python Package\"\n @click=\"deletePackage(pkg)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <download-dialog v-model=\"showDownloadDialog\" />\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { DownloadDialog } from '@/tools/admin'\n\nexport default {\n components: {\n DownloadDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n files: [],\n loadingPackage: false,\n progress: 0,\n gems: [],\n python: [],\n processes: {},\n }\n },\n mounted() {\n this.update()\n this.updateProcesses()\n },\n methods: {\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update() {\n Api.get('/openc3-api/packages').then((response) => {\n this.gems = response.data.ruby\n this.python = response.data.python\n })\n },\n updateProcesses: function () {\n Api.get('/openc3-api/process_status/package_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n // process_manager.rb script operates on a 5 second cycle\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 2500)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n selectFile() {\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.loadingPackage = true\n let self = this\n const promises = [...files].map((file) => {\n const formData = new FormData()\n formData.append('package', file, file.name)\n return Api.post('/openc3-api/packages', {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n })\n Promise.all(promises)\n .then((responses) => {\n this.$notify.normal({\n body: `Uploaded ${responses.length} package${\n responses.length > 1 ? 's' : ''\n }`,\n })\n this.loadingPackage = false\n this.files = []\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n .catch((error) => {\n this.loadingPackage = false\n })\n }\n },\n deletePackage(pkg) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${pkg}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/packages/${pkg}`)\n })\n .then((response) => {\n this.$notify.normal({\n body: `Removed package ${pkg}`,\n })\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n // Error will probably never happen because we spawn the package removal\n // and then wait for the response which happens in the background\n .catch((error) => {\n this.$notify.serious({\n body: `Failed to remove package ${pkg}`,\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-subheader {\n font-size: 1rem;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","DownloadDialog","SimpleTextDialog","process","Api","response","nanoSecs","format","toDate","event","files","self","promises","file","formData","progressEvent","percentCompleted","responses","error","pkg","dialog","_hoisted_1","_hoisted_2","_createElementBlock","_createVNode","_component_v_row","_withCtx","_component_v_col","_component_v_btn","$options","_cache","_createTextVNode","_createElementVNode","args","_component_rux_progress","$data","_createBlock","_component_v_list","_openBlock","_Fragment","_renderList","_component_v_list_item","_createSlots","_component_v_list_item_title","_normalizeClass","_toDisplayString","_component_v_list_item_subtitle","_component_v_tooltip","props","_mergeProps","$event","_component_v_divider","_createCommentVNode","gem","index","_component_download_dialog","_component_simple_text_dialog"],"mappings":"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"}
1
+ {"version":3,"file":"PackagesTab-Dwp6g8W0.cjs","sources":["../src/tools/admin/tabs/PackagesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn @click=\"selectFile\">Install Package</v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\"></rux-progress>\n </v-col>\n </v-row>\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h6\">Process List</v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template v-if=\"process.state !== 'Running'\" #append>\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span>Show Output</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-list class=\"list\" data-test=\"packageList\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Ruby Gems</v-col></v-row>\n <div v-for=\"(gem, index) in gems\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ gem }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Ruby Gem\"\n @click=\"deletePackage(gem)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Python Packages</v-col></v-row>\n <div v-for=\"(pkg, index) in python\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ pkg }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Python Package\"\n @click=\"deletePackage(pkg)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <download-dialog v-model=\"showDownloadDialog\" />\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { DownloadDialog } from '@/tools/admin'\n\nexport default {\n components: {\n DownloadDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n files: [],\n loadingPackage: false,\n progress: 0,\n gems: [],\n python: [],\n processes: {},\n }\n },\n mounted() {\n this.update()\n this.updateProcesses()\n },\n methods: {\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update() {\n Api.get('/openc3-api/packages').then((response) => {\n this.gems = response.data.ruby\n this.python = response.data.python\n })\n },\n updateProcesses: function () {\n Api.get('/openc3-api/process_status/package_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n // process_manager.rb script operates on a 5 second cycle\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 2500)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n selectFile() {\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.loadingPackage = true\n let self = this\n const promises = [...files].map((file) => {\n const formData = new FormData()\n formData.append('package', file, file.name)\n return Api.post('/openc3-api/packages', {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n })\n Promise.all(promises)\n .then((responses) => {\n this.$notify.normal({\n body: `Uploaded ${responses.length} package${\n responses.length > 1 ? 's' : ''\n }`,\n })\n this.loadingPackage = false\n this.files = []\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n .catch((error) => {\n this.loadingPackage = false\n })\n }\n },\n deletePackage(pkg) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${pkg}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/packages/${pkg}`)\n })\n .then((response) => {\n this.$notify.normal({\n body: `Removed package ${pkg}`,\n })\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n // Error will probably never happen because we spawn the package removal\n // and then wait for the response which happens in the background\n .catch((error) => {\n this.$notify.serious({\n body: `Failed to remove package ${pkg}`,\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-subheader {\n font-size: 1rem;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","DownloadDialog","SimpleTextDialog","process","Api","response","nanoSecs","format","toDate","event","files","self","promises","file","formData","progressEvent","percentCompleted","responses","error","pkg","dialog","_createElementBlock","_createVNode","_component_v_row","_component_v_col","_component_v_btn","$options","_cache","_createElementVNode","args","_component_rux_progress","$data","_createBlock","_component_v_list","_Fragment","_renderList","_component_v_list_item","_createSlots","_component_v_list_item_title","_normalizeClass","_toDisplayString","_component_v_list_item_subtitle","_component_v_tooltip","_withCtx","props","_mergeProps","$event","_component_v_divider","_openBlock","gem","index","_component_download_dialog","_component_simple_text_dialog"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { l as g } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js";
2
- import { resolveComponent as n, createElementBlock as p, openBlock as u, createVNode as e, createBlock as I, createCommentVNode as U, withCtx as t, createElementVNode as f, createTextVNode as c, Fragment as x, renderList as P, createSlots as L, toDisplayString as h, normalizeClass as N, mergeProps as R } from "vue";
1
+ import { c as g } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js";
2
+ import { resolveComponent as n, createElementBlock as p, openBlock as u, createVNode as e, createBlock as I, createCommentVNode as U, withCtx as t, createElementVNode as _, createTextVNode as c, Fragment as x, renderList as P, createSlots as L, toDisplayString as h, normalizeClass as N, mergeProps as R } from "vue";
3
3
  import { _ as $ } from "./CustomIcon-h5X7369N.js";
4
4
  import "single-spa";
5
- import { S as B } from "./SimpleTextDialog-BulqUrdH.js";
5
+ import { S as B } from "./SimpleTextDialog-Cmtrmt79.js";
6
6
  import { DownloadDialog as M } from "./tools/admin.js";
7
7
  import { f as j, t as A } from "./format-CVeawcIv.js";
8
8
  const G = {
@@ -101,9 +101,9 @@ const G = {
101
101
  }
102
102
  }, H = ["textContent"], z = ["textContent"];
103
103
  function E(a, o, w, C, s, i) {
104
- const d = n("v-btn"), r = n("v-col"), O = n("rux-progress"), _ = n("v-row"), v = n("v-list-item-title"), S = n("v-list-item-subtitle"), V = n("v-tooltip"), y = n("v-list-item"), k = n("v-divider"), b = n("v-list"), T = n("download-dialog"), F = n("simple-text-dialog");
104
+ const d = n("v-btn"), r = n("v-col"), O = n("rux-progress"), f = n("v-row"), v = n("v-list-item-title"), S = n("v-list-item-subtitle"), V = n("v-tooltip"), y = n("v-list-item"), k = n("v-divider"), b = n("v-list"), T = n("download-dialog"), F = n("simple-text-dialog");
105
105
  return u(), p("div", null, [
106
- e(_, {
106
+ e(f, {
107
107
  "no-gutters": "",
108
108
  align: "center",
109
109
  class: "px-2"
@@ -113,11 +113,12 @@ function E(a, o, w, C, s, i) {
113
113
  default: t(() => [
114
114
  e(d, { onClick: i.selectFile }, {
115
115
  default: t(() => o[3] || (o[3] = [
116
- c("Install Package")
116
+ c("Install Package", -1)
117
117
  ])),
118
- _: 1
118
+ _: 1,
119
+ __: [3]
119
120
  }, 8, ["onClick"]),
120
- f("input", {
121
+ _("input", {
121
122
  ref: "fileInput",
122
123
  style: { display: "none" },
123
124
  type: "file",
@@ -144,22 +145,24 @@ function E(a, o, w, C, s, i) {
144
145
  "data-test": "process-list"
145
146
  }, {
146
147
  default: t(() => [
147
- e(_, {
148
+ e(f, {
148
149
  "no-gutters": "",
149
150
  class: "px-4"
150
151
  }, {
151
152
  default: t(() => [
152
153
  e(r, { class: "text-h6" }, {
153
154
  default: t(() => o[4] || (o[4] = [
154
- c("Process List")
155
+ c("Process List", -1)
155
156
  ])),
156
- _: 1
157
+ _: 1,
158
+ __: [4]
157
159
  }),
158
160
  e(r, { align: "right" }, {
159
161
  default: t(() => o[5] || (o[5] = [
160
- f("div", null, "Showing last 10 min of activity", -1)
162
+ _("div", null, "Showing last 10 min of activity", -1)
161
163
  ])),
162
- _: 1
164
+ _: 1,
165
+ __: [5]
163
166
  })
164
167
  ]),
165
168
  _: 1
@@ -171,7 +174,7 @@ function E(a, o, w, C, s, i) {
171
174
  default: t(() => [
172
175
  e(v, null, {
173
176
  default: t(() => [
174
- f("span", {
177
+ _("span", {
175
178
  class: N(l.state.toLowerCase()),
176
179
  textContent: h(
177
180
  `Processing ${l.process_type}: ${l.detail} - ${l.state}`
@@ -182,7 +185,7 @@ function E(a, o, w, C, s, i) {
182
185
  }, 1024),
183
186
  e(S, null, {
184
187
  default: t(() => [
185
- f("span", {
188
+ _("span", {
186
189
  textContent: h(" Updated At: " + i.formatDate(l.updated_at))
187
190
  }, null, 8, z)
188
191
  ]),
@@ -207,9 +210,10 @@ function E(a, o, w, C, s, i) {
207
210
  }), null, 16, ["onClick"])
208
211
  ]),
209
212
  default: t(() => [
210
- o[6] || (o[6] = f("span", null, "Show Output", -1))
213
+ o[6] || (o[6] = _("span", null, "Show Output", -1))
211
214
  ]),
212
- _: 2
215
+ _: 2,
216
+ __: [6]
213
217
  }, 1024)
214
218
  ]),
215
219
  key: "0"
@@ -225,13 +229,14 @@ function E(a, o, w, C, s, i) {
225
229
  "data-test": "packageList"
226
230
  }, {
227
231
  default: t(() => [
228
- e(_, { class: "px-4" }, {
232
+ e(f, { class: "px-4" }, {
229
233
  default: t(() => [
230
234
  e(r, { class: "text-h6" }, {
231
235
  default: t(() => o[7] || (o[7] = [
232
- c("Ruby Gems")
236
+ c("Ruby Gems", -1)
233
237
  ])),
234
- _: 1
238
+ _: 1,
239
+ __: [7]
235
240
  })
236
241
  ]),
237
242
  _: 1
@@ -258,13 +263,14 @@ function E(a, o, w, C, s, i) {
258
263
  }, 1024),
259
264
  e(k)
260
265
  ]))), 128)),
261
- e(_, { class: "px-4" }, {
266
+ e(f, { class: "px-4" }, {
262
267
  default: t(() => [
263
268
  e(r, { class: "text-h6" }, {
264
269
  default: t(() => o[8] || (o[8] = [
265
- c("Python Packages")
270
+ c("Python Packages", -1)
266
271
  ])),
267
- _: 1
272
+ _: 1,
273
+ __: [8]
268
274
  })
269
275
  ]),
270
276
  _: 1
@@ -310,4 +316,4 @@ const Z = /* @__PURE__ */ $(G, [["render", E], ["__scopeId", "data-v-e97741ba"]]
310
316
  export {
311
317
  Z as default
312
318
  };
313
- //# sourceMappingURL=PackagesTab-Dx25CfF0.js.map
319
+ //# sourceMappingURL=PackagesTab-HQCOIGZK.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PackagesTab-Dx25CfF0.js","sources":["../src/tools/admin/tabs/PackagesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn @click=\"selectFile\">Install Package</v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\"></rux-progress>\n </v-col>\n </v-row>\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h6\">Process List</v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template v-if=\"process.state !== 'Running'\" #append>\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span>Show Output</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-list class=\"list\" data-test=\"packageList\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Ruby Gems</v-col></v-row>\n <div v-for=\"(gem, index) in gems\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ gem }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Ruby Gem\"\n @click=\"deletePackage(gem)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Python Packages</v-col></v-row>\n <div v-for=\"(pkg, index) in python\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ pkg }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Python Package\"\n @click=\"deletePackage(pkg)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <download-dialog v-model=\"showDownloadDialog\" />\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { DownloadDialog } from '@/tools/admin'\n\nexport default {\n components: {\n DownloadDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n files: [],\n loadingPackage: false,\n progress: 0,\n gems: [],\n python: [],\n processes: {},\n }\n },\n mounted() {\n this.update()\n this.updateProcesses()\n },\n methods: {\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update() {\n Api.get('/openc3-api/packages').then((response) => {\n this.gems = response.data.ruby\n this.python = response.data.python\n })\n },\n updateProcesses: function () {\n Api.get('/openc3-api/process_status/package_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n // process_manager.rb script operates on a 5 second cycle\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 2500)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n selectFile() {\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.loadingPackage = true\n let self = this\n const promises = [...files].map((file) => {\n const formData = new FormData()\n formData.append('package', file, file.name)\n return Api.post('/openc3-api/packages', {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n })\n Promise.all(promises)\n .then((responses) => {\n this.$notify.normal({\n body: `Uploaded ${responses.length} package${\n responses.length > 1 ? 's' : ''\n }`,\n })\n this.loadingPackage = false\n this.files = []\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n .catch((error) => {\n this.loadingPackage = false\n })\n }\n },\n deletePackage(pkg) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${pkg}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/packages/${pkg}`)\n })\n .then((response) => {\n this.$notify.normal({\n body: `Removed package ${pkg}`,\n })\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n // Error will probably never happen because we spawn the package removal\n // and then wait for the response which happens in the background\n .catch((error) => {\n this.$notify.serious({\n body: `Failed to remove package ${pkg}`,\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-subheader {\n font-size: 1rem;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","DownloadDialog","SimpleTextDialog","process","Api","response","nanoSecs","format","toDate","event","files","self","promises","file","formData","progressEvent","percentCompleted","responses","error","pkg","dialog","_hoisted_1","_hoisted_2","_createElementBlock","_createVNode","_component_v_row","_withCtx","_component_v_col","_component_v_btn","$options","_cache","_createTextVNode","_createElementVNode","args","_component_rux_progress","$data","_createBlock","_component_v_list","_openBlock","_Fragment","_renderList","_component_v_list_item","_createSlots","_component_v_list_item_title","_normalizeClass","_toDisplayString","_component_v_list_item_subtitle","_component_v_tooltip","props","_mergeProps","$event","_component_v_divider","_createCommentVNode","gem","index","_component_download_dialog","_component_simple_text_dialog"],"mappings":"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"}
1
+ {"version":3,"file":"PackagesTab-HQCOIGZK.js","sources":["../src/tools/admin/tabs/PackagesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn @click=\"selectFile\">Install Package</v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\"></rux-progress>\n </v-col>\n </v-row>\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h6\">Process List</v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template v-if=\"process.state !== 'Running'\" #append>\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span>Show Output</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-list class=\"list\" data-test=\"packageList\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Ruby Gems</v-col></v-row>\n <div v-for=\"(gem, index) in gems\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ gem }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Ruby Gem\"\n @click=\"deletePackage(gem)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Python Packages</v-col></v-row>\n <div v-for=\"(pkg, index) in python\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ pkg }}</v-list-item-title>\n\n <template #append>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Python Package\"\n @click=\"deletePackage(pkg)\"\n />\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <download-dialog v-model=\"showDownloadDialog\" />\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { DownloadDialog } from '@/tools/admin'\n\nexport default {\n components: {\n DownloadDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n files: [],\n loadingPackage: false,\n progress: 0,\n gems: [],\n python: [],\n processes: {},\n }\n },\n mounted() {\n this.update()\n this.updateProcesses()\n },\n methods: {\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update() {\n Api.get('/openc3-api/packages').then((response) => {\n this.gems = response.data.ruby\n this.python = response.data.python\n })\n },\n updateProcesses: function () {\n Api.get('/openc3-api/process_status/package_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n // process_manager.rb script operates on a 5 second cycle\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 2500)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n selectFile() {\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.loadingPackage = true\n let self = this\n const promises = [...files].map((file) => {\n const formData = new FormData()\n formData.append('package', file, file.name)\n return Api.post('/openc3-api/packages', {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n })\n Promise.all(promises)\n .then((responses) => {\n this.$notify.normal({\n body: `Uploaded ${responses.length} package${\n responses.length > 1 ? 's' : ''\n }`,\n })\n this.loadingPackage = false\n this.files = []\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n .catch((error) => {\n this.loadingPackage = false\n })\n }\n },\n deletePackage(pkg) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${pkg}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/packages/${pkg}`)\n })\n .then((response) => {\n this.$notify.normal({\n body: `Removed package ${pkg}`,\n })\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n // Error will probably never happen because we spawn the package removal\n // and then wait for the response which happens in the background\n .catch((error) => {\n this.$notify.serious({\n body: `Failed to remove package ${pkg}`,\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-subheader {\n font-size: 1rem;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","DownloadDialog","SimpleTextDialog","process","Api","response","nanoSecs","format","toDate","event","files","self","promises","file","formData","progressEvent","percentCompleted","responses","error","pkg","dialog","_createElementBlock","_createVNode","_component_v_row","_component_v_col","_component_v_btn","$options","_cache","_createElementVNode","args","_component_rux_progress","$data","_createBlock","_component_v_list","_Fragment","_renderList","_component_v_list_item","_createSlots","_component_v_list_item_title","_normalizeClass","_toDisplayString","_component_v_list_item_subtitle","_component_v_tooltip","_withCtx","props","_mergeProps","$event","_component_v_divider","_openBlock","gem","index","_component_download_dialog","_component_simple_text_dialog"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs"),e=require("vue"),x=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const j=require("./SimpleTextDialog-BwOVWhRY.cjs"),k=require("./tools/admin.cjs"),z=require("./settings-BboN1VLt.cjs"),P=require("./format-B22VpiOS.cjs"),F="store_url",N={props:{id:Number,name:String,title:String,author:String,description:String,keywords:Array,image_url:String,license:String,verified:Boolean,homepage:String,repository:String,gem_url:String,checksum:String},data:function(){return{_api:new h.di,_storeUrl:""}},computed:{plugin:function(){return{id:this.id,name:this.name,title:this.title,author:this.author,description:this.description,keywords:this.keywords,image_url:this.image_url,license:this.license,verified:this.verified,homepage:this.homepage,repository:this.repository,gem_url:this.gem_url,checksum:this.checksum}},storeLink:function(){return this.hasStoreListing?new URL(`/cosmos_plugins/${this.id}`,this._storeUrl):null},hasStoreListing:function(){return!!this.id},isPluginInstalled:function(){return!!this.name}},created:function(){this._api.get_setting(F).then(o=>this._storeUrl=o)}},R={mixins:[N],props:{modelValue:Boolean},emits:["triggerInstall","triggerUninstall","update:modelValue"],data(){return{showDialog:!1,showCopiedTooltip:!1}},computed:{isDialogOpen:{get:function(){return this.modelValue||this.showDialog},set:function(o){this.showDialog=o,this.$emit("update:modelValue",o)}}},methods:{openDialog:function(){this.isDialogOpen=!0},install:function(){this.$emit("triggerInstall",this.gemUrl)},uninstall:function(){this.$emit("triggerUninstall",this.gemUrl)},copyChecksum:function(){navigator.clipboard.writeText(this.checksum),this.showCopiedTooltip=!0,setTimeout(()=>{this.showCopiedTooltip=!1},1e3)}}},q=["textContent"],H={key:0},G=["textContent"],J={class:"mt-3 text-caption font-italic"};function K(o,t,i,d,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),c=e.resolveComponent("v-tooltip"),_=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-badge"),f=e.resolveComponent("v-card-subtitle"),v=e.resolveComponent("v-img"),u=e.resolveComponent("v-text-field"),C=e.resolveComponent("v-card-text"),p=e.resolveComponent("v-card-actions"),V=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(o.$slots,"activator",{props:{onClick:l.openDialog}}),e.createVNode(g,{modelValue:l.isDialogOpen,"onUpdate:modelValue":t[2]||(t[2]=w=>l.isDialogOpen=w),"max-width":"500"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(_,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",{textContent:e.toDisplayString(o.title)},null,8,q),e.createVNode(a),e.createVNode(c,{location:"top"},{activator:e.withCtx(({props:w})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(w)),[e.createVNode(r,{href:o.storeLink,target:"_blank",icon:"mdi-open-in-new",size:"small",variant:"plain"},null,8,["href"])],16)]),default:e.withCtx(()=>[t[3]||(t[3]=e.createElementVNode("span",null," View at store.openc3.com ",-1))]),_:1,__:[3]})]),_:1}),e.createVNode(f,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(o.author),1),e.createVNode(a),o.verified?(e.openBlock(),e.createElementBlock("div",H,[t[4]||(t[4]=e.createTextVNode(" Verified ",-1)),e.createVNode(m,{inline:"",icon:"mdi-shield-check",color:"success"})])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(C,null,{default:e.withCtx(()=>[o.image_url?(e.openBlock(),e.createBlock(v,{key:0,src:o.image_url},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{textContent:e.toDisplayString(o.description)},null,8,G),e.createElementVNode("div",J,"License: "+e.toDisplayString(o.license),1),e.createVNode(u,{modelValue:o.checksum,"onUpdate:modelValue":t[1]||(t[1]=w=>o.checksum=w),label:"SHA256",variant:"solo",density:"compact","hide-details":"",readonly:""},{append:e.withCtx(()=>[e.createVNode(c,{modelValue:n.showCopiedTooltip,"onUpdate:modelValue":t[0]||(t[0]=w=>n.showCopiedTooltip=w),location:"top","open-on-hover":!1},{activator:e.withCtx(({props:w})=>[e.createVNode(r,e.mergeProps(w,{icon:"mdi-content-copy",variant:"text",density:"compact",onClick:l.copyChecksum}),null,16,["onClick"])]),default:e.withCtx(()=>[t[5]||(t[5]=e.createElementVNode("span",null,"Copied!",-1))]),_:1,__:[5]},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(p,{class:"justify-start px-6"},{default:e.withCtx(()=>[o.isPluginInstalled?(e.openBlock(),e.createBlock(r,{key:0,text:"Uninstall","append-icon":"mdi-puzzle-remove",variant:"outlined",color:"red",onClick:l.uninstall},null,8,["onClick"])):(e.openBlock(),e.createBlock(r,{key:1,text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:l.install},null,8,["onClick"])),e.createVNode(r,{text:"Repository","append-icon":"mdi-open-in-new",variant:"outlined",href:o.repository,target:"_blank"},null,8,["href"]),e.createVNode(r,{text:"Homepage","append-icon":"mdi-open-in-new",variant:"outlined",href:o.homepage,target:"_blank"},null,8,["href"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}const S=x._export_sfc(R,[["render",K]]),Q={components:{PluginDetailsDialog:S},mixins:[N],emits:["triggerInstall"],methods:{install:function(){this.$emit("triggerInstall",this.plugin)}}},W=["textContent"];function X(o,t,i,d,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-badge"),c=e.resolveComponent("v-card-title"),_=e.resolveComponent("v-card-subtitle"),m=e.resolveComponent("v-img"),f=e.resolveComponent("v-card-text"),v=e.resolveComponent("v-btn"),u=e.resolveComponent("v-card-actions"),C=e.resolveComponent("v-card"),p=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createBlock(p,e.mergeProps(o.plugin,{onTriggerInstall:l.install}),{activator:e.withCtx(({props:V})=>[e.createVNode(C,e.mergeProps(V,{height:"350",class:"d-flex flex-column"}),{default:e.withCtx(()=>[e.createVNode(c,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.title)+" ",1),e.createVNode(a),o.verified?(e.openBlock(),e.createBlock(r,{key:0,inline:"",icon:"mdi-shield-check",color:"success"})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(_,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(o.author),1)]),_:1}),e.createVNode(f,null,{default:e.withCtx(()=>[o.image_url?(e.openBlock(),e.createBlock(m,{key:0,src:o.image_url,"max-height":"160"},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"truncate-description":!0,"truncate-2":!!o.image_url,"truncate-10":!o.image_url}),textContent:e.toDisplayString(o.description)},null,10,W)]),_:1}),e.createVNode(a),e.createVNode(u,{class:"flex-wrap"},{default:e.withCtx(()=>[e.createVNode(v,{text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:e.withModifiers(l.install,["stop"])},null,8,["onClick"])]),_:1})]),_:2},1040)]),_:1},16,["onTriggerInstall"])}const Y=x._export_sfc(Q,[["render",X],["__scopeId","data-v-83d9d7a7"]]),y="store_url",b="DEFAULT",Z={mixins:[z.Settings],props:{modelValue:Boolean},emits:["update:modelValue","update:storeUrl"],data(){return{showDialog:!1,storeUrl:"",rules:{required:o=>!!o||"Required",url:o=>{try{new URL(o)}catch{return"Not a valid URL"}return!0}}}},watch:{modelValue:function(o){o&&(this.showDialog=o)},showDialog:function(o){o||this.$emit("update:modelValue",o)}},created:function(){this.loadSetting(y,{scope:b})},methods:{save(){this.saveSetting(y,this.storeUrl,{scope:b}),this.$emit("update:storeUrl",this.storeUrl),this.showDialog=!1},parseSetting:function(o){o?this.storeUrl=o:this.storeUrl="https://store.openc3.com"}}};function $(o,t,i,d,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-toolbar"),c=e.resolveComponent("v-alert"),_=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-card-text"),f=e.resolveComponent("v-btn"),v=e.resolveComponent("v-card-actions"),u=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(C,{modelValue:n.showDialog,"onUpdate:modelValue":t[4]||(t[4]=p=>n.showDialog=p),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),t[5]||(t[5]=e.createElementVNode("span",null,"Plugin Store Settings",-1)),e.createVNode(a)]),_:1,__:[5]}),e.createVNode(u,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(c,{modelValue:o.errorLoading,"onUpdate:modelValue":t[0]||(t[0]=p=>o.errorLoading=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error loading previous configuration due to "+e.toDisplayString(o.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(c,{modelValue:o.errorSaving,"onUpdate:modelValue":t[1]||(t[1]=p=>o.errorSaving=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error saving due to "+e.toDisplayString(o.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(c,{modelValue:o.successSaving,"onUpdate:modelValue":t[2]||(t[2]=p=>o.successSaving=p),type:"success",closable:"",density:"compact"},{default:e.withCtx(()=>t[6]||(t[6]=[e.createTextVNode(" Saved! ",-1)])),_:1,__:[6]},8,["modelValue"]),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(_,{modelValue:n.storeUrl,"onUpdate:modelValue":t[3]||(t[3]=p=>n.storeUrl=p),label:"Store URL",rules:[n.rules.required,n.rules.url]},null,8,["modelValue","rules"])]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(f,{color:"success",variant:"text",text:"Save","data-test":"save-store-settings-btn",onClick:l.save},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const ee=x._export_sfc(Z,[["render",$]]),te={components:{PluginCard:Y,PluginStoreSettingsDialog:ee},emits:["close","triggerInstall"],data(){return{api:new h.di,search:"",verifiedOnly:!1,showSettingsDialog:!1,plugins:[]}},computed:{filteredPlugins:function(){let o=this.plugins;return this.verifiedOnly&&(o=o.filter(t=>t.verified)),this.search.length&&(o=o.filter(t=>t.title.toLowerCase().includes(this.search.toLowerCase()))),o}},mounted:function(){this.fetchPluginStoreData()},methods:{fetchPluginStoreData:function(){h.ci.get("/openc3-api/pluginstore").then(o=>{this.plugins=o.data})},close:function(){this.$emit("close")},install:function(o){this.$emit("triggerInstall",o),this.close()},openSettings:function(){this.showSettingsDialog=!0},updatePluginStore:function(){this.api.update_plugin_store().then(o=>{this.fetchPluginStoreData()})}}},oe={class:"d-flex justify-content-space-between"},ne={class:"d-inline-flex align-center w-100"};function le(o,t,i,d,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),c=e.resolveComponent("v-tooltip"),_=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-switch"),f=e.resolveComponent("plugin-card"),v=e.resolveComponent("v-col"),u=e.resolveComponent("v-row"),C=e.resolveComponent("v-container"),p=e.resolveComponent("v-sheet"),V=e.resolveComponent("plugin-store-settings-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(p,{class:"pb-11 pt-8 px-8",height:"100%"},{default:e.withCtx(()=>[e.createElementVNode("div",oe,[t[4]||(t[4]=e.createElementVNode("div",null,[e.createElementVNode("div",{class:"text-h3 mb-3"},"OpenC3 Plugin Store"),e.createElementVNode("div",{class:"text-subtitle-1"}," Browse plugins made by OpenC3 and the COSMOS community ")],-1)),e.createVNode(a),e.createVNode(r,{icon:"mdi-cog",variant:"text",onClick:l.openSettings},null,8,["onClick"]),e.createVNode(c,{location:"top"},{activator:e.withCtx(({props:g})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(g)),[e.createVNode(r,{href:"https://store.openc3.com",target:"_blank",icon:"mdi-open-in-new",variant:"text",class:"mx-2"})],16)]),default:e.withCtx(()=>[t[3]||(t[3]=e.createElementVNode("span",null," Open store.openc3.com ",-1))]),_:1,__:[3]}),e.createVNode(r,{icon:"mdi-close",variant:"text",onClick:l.close},null,8,["onClick"])]),e.createElementVNode("div",ne,[e.createVNode(_,{modelValue:n.search,"onUpdate:modelValue":t[0]||(t[0]=g=>n.search=g),label:"Search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","single-line":"","hide-details":"","data-test":"search-plugin-store"},null,8,["modelValue"]),e.createVNode(m,{modelValue:n.verifiedOnly,"onUpdate:modelValue":t[1]||(t[1]=g=>n.verifiedOnly=g),label:"Verified only",density:"compact","hide-details":"",class:"ml-4"},null,8,["modelValue"])]),e.createVNode(a),t[5]||(t[5]=e.createElementVNode("span",{class:""}," Click on a plugin to see more information about it ",-1)),e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.filteredPlugins,g=>(e.openBlock(),e.createBlock(v,{key:g.id,cols:"4"},{default:e.withCtx(()=>[e.createVNode(f,e.mergeProps({ref_for:!0},g,{onTriggerInstall:l.install}),null,16,["onTriggerInstall"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1,__:[5]}),e.createVNode(V,{modelValue:n.showSettingsDialog,"onUpdate:modelValue":t[2]||(t[2]=g=>n.showSettingsDialog=g),"onUpdate:storeUrl":l.updatePluginStore},null,8,["modelValue","onUpdate:storeUrl"])],64)}const ie=x._export_sfc(te,[["render",le]]),se={components:{PluginDetailsDialog:S},mixins:[N],props:{targets:{type:Array,default:()=>[]},isModified:Boolean},emits:["edit","delete","upgrade","showDetails"],data(){return{showCard:!1}},computed:{displayTitle:function(){return this.title?this.title:this.name.replace(/^openc3-cosmos-/,"").replace(/-?\d+\.\d+\.\d+(?:\.pre\.beta\d+\.\d+)?\.gem(?:__\d+)?$/,"")}},methods:{openDetails:function(){this.hasStoreListing&&(this.showCard=!0)},downloadPlugin:function(){h.ci.post(`/openc3-api/packages/${this.name}/download`).then(o=>{const t=window.atob(o.data.contents),i=new Uint8Array(t.length);for(let l=0;l<t.length;++l)i[l]=t.charCodeAt(l);const d=new Blob([i],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(d),n.setAttribute("download",o.data.filename),n.click()})},downloadTarget:function(o){h.ci.post(`/openc3-api/targets/${o}/download`).then(t=>{const i=window.atob(t.data.contents),d=new Uint8Array(i.length);for(let a=0;a<i.length;++a)d[a]=i.charCodeAt(a);const n=new Blob([d],{type:"application/zip"}),l=document.createElement("a");l.href=URL.createObjectURL(n),l.setAttribute("download",t.data.filename),l.click()})},edit:function(){this.$emit("edit")},upgrade:function(){this.$emit("upgrade")},deletePrompt:function(){this.showCard=!1,this.$emit("delete")}}},re=["textContent"],ae={class:"text-subtitle-2 v-list-item-subtitle pl-0"},ce={key:0},de=["onClick","textContent"],ue=["textContent"];function pe(o,t,i,d,n,l){var v;const a=e.resolveComponent("v-img"),r=e.resolveComponent("v-icon"),c=e.resolveComponent("v-list-item"),_=e.resolveComponent("v-list"),m=e.resolveComponent("v-menu"),f=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("tr",{class:e.normalizeClass({"cursor-pointer":o.hasStoreListing}),"data-test":"plugin-list-item",onClick:t[0]||(t[0]=(...u)=>l.openDetails&&l.openDetails(...u))},[e.createElementVNode("td",null,[o.image_url?(e.openBlock(),e.createBlock(a,{key:0,src:o.image_url,"max-height":"56","min-width":"56"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createElementVNode("div",{class:"text-h6",textContent:e.toDisplayString(l.displayTitle)},null,8,re),e.createElementVNode("div",ae,[i.isModified?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" * ")],64)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(o.name),1)]),(v=i.targets)!=null&&v.length?(e.openBlock(),e.createElementBlock("div",ce,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.targets,(u,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"mr-2"},[u.modified?(e.openBlock(),e.createElementBlock("a",{key:0,style:{cursor:"pointer"},onClick:e.withModifiers(p=>l.downloadTarget(u.name),["prevent"]),textContent:e.toDisplayString(u.name)},null,8,de)):(e.openBlock(),e.createElementBlock("span",{key:1,textContent:e.toDisplayString(u.name)},null,8,ue))]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createVNode(m,null,{activator:e.withCtx(({props:u})=>[e.createVNode(r,e.mergeProps(u,{icon:"mdi-dots-horizontal","data-test":"plugin-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createVNode(c,{title:"Download","prepend-icon":"mdi-download","data-test":"download-plugin",onClick:l.downloadPlugin},null,8,["onClick"]),e.createVNode(c,{title:"Edit Details","prepend-icon":"mdi-pencil","data-test":"edit-plugin",onClick:l.edit},null,8,["onClick"]),e.createVNode(c,{title:"Upgrade","prepend-icon":"mdi-update","data-test":"upgrade-plugin",onClick:l.upgrade},null,8,["onClick"]),e.createVNode(c,{title:"Delete","prepend-icon":"mdi-delete","data-test":"delete-plugin",onClick:l.deletePrompt},null,8,["onClick"])]),_:1})]),_:1})])],2),e.createVNode(f,e.mergeProps({modelValue:n.showCard,"onUpdate:modelValue":t[1]||(t[1]=u=>n.showCard=u)},o.plugin,{onTriggerUninstall:l.deletePrompt}),null,16,["modelValue","onTriggerUninstall"])],64)}const me=x._export_sfc(se,[["render",pe]]),ge={components:{PluginDialog:k.PluginDialog,PluginListItem:me,PluginStore:ie,ModifiedPluginDialog:k.ModifiedPluginDialog,SimpleTextDialog:j.SimpleTextDialog},data(){return{api:new h.di,file:null,currentPlugin:null,showPluginDetails:!1,detailPlugin:null,plugins:[],targets:{},processes:{},alert:"",alertType:"success",showAlert:!1,pluginName:null,variables:{},storeId:null,pluginTxt:"",pluginHashTmp:null,existingPluginTxt:null,showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",showPluginStore:!1,showPluginDialog:!1,showModifiedPluginDialog:!1,showDefaultTools:!1,progress:0,pluginDelete:!1,defaultPlugins:["openc3-cosmos-tool-admin","openc3-cosmos-tool-bucketexplorer","openc3-cosmos-tool-cmdsender","openc3-cosmos-tool-cmdhistory","openc3-cosmos-tool-cmdtlmserver","openc3-cosmos-tool-dataextractor","openc3-cosmos-tool-dataviewer","openc3-cosmos-tool-docs","openc3-cosmos-tool-handbooks","openc3-cosmos-tool-iframe","openc3-cosmos-tool-limitsmonitor","openc3-cosmos-tool-packetviewer","openc3-cosmos-tool-scriptrunner","openc3-cosmos-tool-tablemanager","openc3-cosmos-tool-tlmgrapher","openc3-cosmos-tool-tlmviewer","openc3-cosmos-enterprise-tool-admin","openc3-cosmos-tool-autonomic","openc3-cosmos-tool-calendar","openc3-cosmos-tool-grafana","openc3-cosmos-tool-systemhealth","openc3-enterprise-tool-base","openc3-tool-base"]}},computed:{shownPlugins(){const o=[],t=[];return this.plugins.forEach(i=>{const l=i.name.split("__")[0].split("-").slice(0,-1).join("-");this.defaultPlugins.includes(l)?t.push(i):o.push(i)}),o.sort((i,d)=>i.name<d.name?-1:i.name>d.name?1:0),this.showDefaultTools?(t.sort((i,d)=>i.name<d.name?-1:i.name>d.name?1:0),o.concat(t)):o}},watch:{showPluginDialog:function(o,t){o===!1&&(this.file=null,this.$refs.fileInput.value=null)}},created(){this.api.update_plugin_store()},mounted(){this.update(),this.updateProcesses();const o=this;window.onpopstate=function(){o.showPluginStore&&(o.showPluginStore=!1,history.go(1))}},methods:{showDetails:function(o){this.detailPlugin=o,this.showPluginDetails=!0},pluginTargets:function(o){let t=[];for(const i in this.targets)this.targets[i].plugin===o&&t.push(this.targets[i]);return t},isModified:function(o){return Object.entries(this.targets).some(([t,i])=>i.plugin===o&&i.modified===!0)},showOutput:function(o){this.processOutput=o.output,this.showProcessOutput=!0},update:function(){h.ci.get("/openc3-api/plugins/all").then(o=>{this.plugins=Object.entries(o.data).map(([t,i])=>i)}),h.ci.get("/openc3-api/targets_modified").then(o=>{this.targets=o.data})},updateProcesses:function(){h.ci.get("openc3-api/process_status/plugin_?substr=true").then(o=>{this.processes=o.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},formatDate(o){return P.format(P.toDate(parseInt(o)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},upload:function(o=null,t=null){const i=o?"put":"post",d=o?`/openc3-api/plugins/${o}`:"/openc3-api/plugins",n=new FormData;t===null?n.append("plugin",this.file,this.file.name):n.append("store_id",t.id);let l=this;h.ci[i](d,{data:n,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let c=Math.round(r.loaded*100/r.total);l.progress=c}}).then(r=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let c=null;r.data.existing_plugin_txt_lines!==void 0&&(c=r.data.existing_plugin_txt_lines.join(`
2
+ `));let _=r.data.plugin_txt_lines.join(`
3
+ `);this.pluginName=r.data.name,this.variables=r.data.variables,this.storeId=r.data.store_id,this.pluginTxt=_,this.existingPluginTxt=c,this.showPluginDialog=!0,this.file=void 0}).catch(r=>{this.currentPlugin=null,this.file=void 0})},pluginCallback:function(o){this.showPluginDialog=!1,this.currentPlugin!==null&&(o.name=this.currentPlugin),this.pluginHashTmp=o,this.isModified(this.currentPlugin)?(this.pluginDelete=!1,this.showModifiedPluginDialog=!0):this.pluginInstall()},modifiedSubmit:async function(o){if(o===!0)for(let t of this.pluginTargets(this.currentPlugin))t.modified==!0&&await h.ci.post(`/openc3-api/targets/${t.name}/delete_modified`);this.pluginDelete?this.deletePlugin(this.currentPlugin):this.pluginInstall()},pluginInstall:function(){h.ci.post(`/openc3-api/plugins/install/${this.pluginName}`,{data:{plugin_hash:JSON.stringify(this.pluginHashTmp)}}).then(o=>{this.alert=`Started installing plugin ${this.pluginName} ...`,this.alertType="success",this.showAlert=!0,this.currentPlugin=null,this.file=void 0,this.variables={},this.pluginTxt="",this.existingPluginTxt=null,this.storeId=null,setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3),this.update()})},editPlugin:function(o){h.ci.get(`/openc3-api/plugins/${o}`).then(t=>{let i=null;t.data.existing_plugin_txt_lines!==void 0&&(i=t.data.existing_plugin_txt_lines.join(`
4
+ `)),this.pluginName=t.data.name,this.variables=t.data.variables,this.pluginTxt=t.data.plugin_txt_lines.join(`
5
+ `),this.existingPluginTxt=i,this.showPluginDialog=!0})},deletePrompt:function(o){this.$dialog.confirm(`Are you sure you want to remove: ${o}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>{this.isModified(o)?(this.currentPlugin=o,this.pluginDelete=!0,this.showModifiedPluginDialog=!0):this.deletePlugin(o)})},deletePlugin:function(o){this.alert=`Removing plugin ${o} ...`,this.alertType="success",this.showAlert=!0,h.ci.delete(`/openc3-api/plugins/${o}`).then(t=>{setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3)}),this.update()},upgradePlugin(o){this.file=null,this.currentPlugin=o,this.progress=0,this.$refs.fileInput.click()},selectFile(){this.file=null,this.currentPlugin=null,this.progress=0,this.$refs.fileInput.click()},fileChange(o){const t=o.target.files;if(t.length>0)if(this.file=t[0],this.currentPlugin!==null)if(this.file.name.split(".gem")[0]==this.currentPlugin.split(".gem")[0])this.$dialog.confirm(`The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}).catch(i=>{});else{let i=this.file.name.split("-"),d=i.findIndex(a=>a.includes(".")),n=i.slice(0,d).join("-");i=this.currentPlugin.split("-"),d=i.findIndex(a=>a.includes("."));let l=i.slice(0,d).join("-");n!==l?this.$dialog.confirm(`The new gem base name ${n} doesn't match the existing ${l}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}):this.upload(this.currentPlugin)}else this.upload();else this.$refs.fileInput.value=null},openStore(){this.showPluginStore=!0}}},he={class:"mt-2"},_e=["textContent"],fe=["textContent"];function ve(o,t,i,d,n,l){const a=e.resolveComponent("v-btn"),r=e.resolveComponent("v-icon"),c=e.resolveComponent("v-col"),_=e.resolveComponent("rux-progress"),m=e.resolveComponent("v-row"),f=e.resolveComponent("v-divider"),v=e.resolveComponent("v-alert"),u=e.resolveComponent("v-list-item-title"),C=e.resolveComponent("v-list-item-subtitle"),p=e.resolveComponent("v-progress-circular"),V=e.resolveComponent("v-tooltip"),g=e.resolveComponent("v-list-item"),w=e.resolveComponent("v-list"),D=e.resolveComponent("v-switch"),T=e.resolveComponent("plugin-list-item"),B=e.resolveComponent("v-data-table"),E=e.resolveComponent("plugin-card"),U=e.resolveComponent("plugin-dialog"),I=e.resolveComponent("modified-plugin-dialog"),O=e.resolveComponent("simple-text-dialog"),L=e.resolveComponent("plugin-store"),A=e.resolveComponent("v-bottom-sheet");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(m,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(a,{"append-icon":"mdi-store",onClick:l.openStore},{default:e.withCtx(()=>t[9]||(t[9]=[e.createTextVNode(" Browse Plugins ",-1)])),_:1,__:[9]},8,["onClick"]),e.createVNode(a,{"append-icon":"mdi-paperclip",class:"mx-2",onClick:l.selectFile},{default:e.withCtx(()=>t[10]||(t[10]=[e.createTextVNode(" Install From File ",-1)])),_:1,__:[10]},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...s)=>l.fileChange&&l.fileChange(...s))},null,544),t[14]||(t[14]=e.createElementVNode("br",null,null,-1)),e.createElementVNode("p",he,[t[12]||(t[12]=e.createTextVNode(" Note: Use ",-1)),e.createVNode(r,null,{default:e.withCtx(()=>t[11]||(t[11]=[e.createTextVNode(" mdi-dots-horizontal ",-1)])),_:1,__:[11]}),t[13]||(t[13]=e.createTextVNode(" in the Installed Plugins list to upgrade existing plugins ",-1))])]),_:1,__:[14]}),e.createVNode(c,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(_,{value:n.progress},null,8,["value"])]),_:1})]),_:1}),e.createVNode(m,{"no-gutters":"",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(c,{align:"right",class:"mr-2"},{default:e.withCtx(()=>t[15]||(t[15]=[e.createElementVNode("div",null,"* indicates a modified plugin",-1),e.createElementVNode("div",null,"Click target link to download modifications",-1)])),_:1,__:[15]})]),_:1}),e.createVNode(f),e.createVNode(v,{modelValue:n.showAlert,"onUpdate:modelValue":t[1]||(t[1]=s=>n.showAlert=s),closable:"",type:n.alertType,text:n.alert,"data-test":"plugin-alert"},null,8,["modelValue","type","text"]),Object.keys(n.processes).length>0?(e.openBlock(),e.createBlock(w,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(c,{class:"text-h5"},{default:e.withCtx(()=>t[16]||(t[16]=[e.createTextVNode(" Process List ",-1)])),_:1,__:[16]}),e.createVNode(c,{align:"right"},{default:e.withCtx(()=>t[17]||(t[17]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])),_:1,__:[17]})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.processes,s=>(e.openBlock(),e.createElementBlock("div",{key:s.name},[e.createVNode(g,null,{append:e.withCtx(()=>[s.state==="Running"?(e.openBlock(),e.createBlock(p,{key:0,indeterminate:"",color:"primary"})):(e.openBlock(),e.createBlock(V,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:M})=>[e.createVNode(a,e.mergeProps({ref_for:!0},M,{icon:"mdi-eye",variant:"text","aria-label":"Show Output","data-test":"show-output",onClick:we=>l.showOutput(s)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[18]||(t[18]=e.createElementVNode("span",null," Show Output ",-1))]),_:2,__:[18]},1024))]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(s.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${s.process_type}: ${s.detail} - ${s.state}`)},null,10,_e)]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+l.formatDate(s.updated_at))},null,8,fe)]),_:2},1024)]),_:2},1024),e.createVNode(f)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(c,{class:"text-h5"},{default:e.withCtx(()=>t[19]||(t[19]=[e.createTextVNode(" Installed Plugins ",-1)])),_:1,__:[19]}),e.createVNode(c,{class:"v-col-auto"},{default:e.withCtx(()=>[e.createVNode(D,{modelValue:n.showDefaultTools,"onUpdate:modelValue":t[2]||(t[2]=s=>n.showDefaultTools=s),label:"Show Default Tools",density:"compact","hide-details":"","data-test":"show-default-tools"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(B,{headers:[],items:l.shownPlugins,density:"compact",class:"list","data-test":"plugin-list"},{item:e.withCtx(({item:s})=>[e.createVNode(T,e.mergeProps(s,{targets:l.pluginTargets(s.name),"is-modified":l.isModified(s.name),onEdit:()=>l.editPlugin(s.name),onUpgrade:()=>l.upgradePlugin(s.name),onDelete:()=>l.deletePrompt(s.name),onShowDetails:l.showDetails}),null,16,["targets","is-modified","onEdit","onUpgrade","onDelete","onShowDetails"])]),_:1},8,["items"]),e.createVNode(E,e.mergeProps(n.detailPlugin,{"hide-activator":"","show-dailog":n.showPluginDetails}),null,16,["show-dailog"]),n.showPluginDialog?(e.openBlock(),e.createBlock(U,{key:1,modelValue:n.showPluginDialog,"onUpdate:modelValue":t[3]||(t[3]=s=>n.showPluginDialog=s),"plugin-name":n.pluginName,variables:n.variables,"plugin-txt":n.pluginTxt,"existing-plugin-txt":n.existingPluginTxt,"store-id":n.storeId,onCallback:l.pluginCallback},null,8,["modelValue","plugin-name","variables","plugin-txt","existing-plugin-txt","store-id","onCallback"])):e.createCommentVNode("",!0),n.showModifiedPluginDialog?(e.openBlock(),e.createBlock(I,{key:2,modelValue:n.showModifiedPluginDialog,"onUpdate:modelValue":t[4]||(t[4]=s=>n.showModifiedPluginDialog=s),"plugin-name":n.currentPlugin,targets:l.pluginTargets(n.currentPlugin),"plugin-delete":n.pluginDelete,onSubmit:l.modifiedSubmit},null,8,["modelValue","plugin-name","targets","plugin-delete","onSubmit"])):e.createCommentVNode("",!0),e.createVNode(O,{modelValue:n.showProcessOutput,"onUpdate:modelValue":t[5]||(t[5]=s=>n.showProcessOutput=s),title:"Process Output",text:n.processOutput},null,8,["modelValue","text"]),e.createVNode(A,{modelValue:n.showPluginStore,"onUpdate:modelValue":t[8]||(t[8]=s=>n.showPluginStore=s),fullscreen:""},{default:e.withCtx(()=>[e.createVNode(L,{onClose:t[6]||(t[6]=()=>n.showPluginStore=!1),onTriggerInstall:t[7]||(t[7]=s=>l.upload(null,s))})]),_:1},8,["modelValue"])])}const Ce=x._export_sfc(ge,[["render",ve],["__scopeId","data-v-c0cc521f"]]);exports.default=Ce;
6
+ //# sourceMappingURL=PluginsTab-COKDXShE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginsTab-COKDXShE.cjs","sources":["../src/plugins/plugin-store/PluginProps.js","../src/plugins/plugin-store/PluginDetailsDialog.vue","../src/plugins/plugin-store/PluginCard.vue","../src/plugins/plugin-store/PluginStoreSettingsDialog.vue","../src/plugins/plugin-store/PluginStore.vue","../src/tools/admin/tabs/plugins/PluginListItem.vue","../src/tools/admin/tabs/PluginsTab.vue"],"sourcesContent":["/*\n# Copyright 2025, OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nconst settingName = 'store_url'\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n description: String,\n keywords: Array,\n image_url: String,\n license: String,\n // rating: Number,\n // downloads: Number,\n verified: Boolean,\n homepage: String,\n repository: String,\n gem_url: String,\n checksum: String,\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n }\n },\n computed: {\n plugin: function () {\n return {\n id: this.id,\n name: this.name,\n title: this.title,\n // titleSlug: this.titleSlug,\n author: this.author,\n // authorSlug: this.authorSlug,\n description: this.description,\n keywords: this.keywords,\n image_url: this.image_url,\n license: this.license,\n // rating: this.rating,\n // downloads: this.downloads,\n verified: this.verified,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n checksum: this.checksum,\n }\n },\n storeLink: function () {\n if (this.hasStoreListing) {\n return new URL(`/cosmos_plugins/${this.id}`, this._storeUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n },\n created: function () {\n this._api\n .get_setting(settingName)\n .then((storeUrl) => (this._storeUrl = storeUrl))\n },\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <slot name=\"activator\" :props=\"{ onClick: openDialog }\"></slot>\n <v-dialog v-model=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeLink\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n size=\"small\"\n variant=\"plain\"\n />\n </div>\n </template>\n <span> View at store.openc3.com </span>\n </v-tooltip>\n </v-toolbar>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <v-spacer />\n <div v-if=\"verified\">\n Verified\n <v-badge inline icon=\"mdi-shield-check\" color=\"success\" />\n </div>\n </v-card-subtitle>\n <!--\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>\n <v-icon icon=\"mdi-cloud-download\" size=\"x-small\" />\n {{ downloads }} downloads\n </div>\n <v-spacer />\n <div class=\"d-flex align-center\">\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n </div>\n </v-card-subtitle>\n -->\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" />\n <div v-text=\"description\" />\n <div class=\"mt-3 text-caption font-italic\">License: {{ license }}</div>\n <v-text-field\n v-model=\"checksum\"\n label=\"SHA256\"\n variant=\"solo\"\n density=\"compact\"\n hide-details\n readonly\n >\n <template #append>\n <v-tooltip\n v-model=\"showCopiedTooltip\"\n location=\"top\"\n :open-on-hover=\"false\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-content-copy\"\n variant=\"text\"\n density=\"compact\"\n @click=\"copyChecksum\"\n />\n </template>\n <span>Copied!</span>\n </v-tooltip>\n </template>\n </v-text-field>\n </v-card-text>\n\n <v-card-actions class=\"justify-start px-6\">\n <v-btn\n v-if=\"isPluginInstalled\"\n text=\"Uninstall\"\n append-icon=\"mdi-puzzle-remove\"\n variant=\"outlined\"\n color=\"red\"\n @click=\"uninstall\"\n />\n <v-btn\n v-else\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click=\"install\"\n />\n <v-btn\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"repository\"\n target=\"_blank\"\n />\n <v-btn\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"homepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\n\nexport default {\n mixins: [PluginProps],\n props: {\n modelValue: Boolean,\n },\n emits: ['triggerInstall', 'triggerUninstall', 'update:modelValue'],\n data() {\n return {\n showDialog: false,\n showCopiedTooltip: false,\n }\n },\n computed: {\n isDialogOpen: {\n get: function () {\n return this.modelValue || this.showDialog\n },\n set: function (val) {\n this.showDialog = val\n this.$emit('update:modelValue', val)\n },\n },\n },\n methods: {\n openDialog: function () {\n this.isDialogOpen = true\n },\n install: function () {\n this.$emit('triggerInstall', this.gemUrl)\n },\n uninstall: function () {\n this.$emit('triggerUninstall', this.gemUrl)\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.checksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <plugin-details-dialog v-bind=\"plugin\" @trigger-install=\"install\">\n <template #activator=\"{ props }\">\n <v-card v-bind=\"props\" height=\"350\" class=\"d-flex flex-column\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n <v-spacer />\n <v-badge\n v-if=\"verified\"\n inline\n icon=\"mdi-shield-check\"\n color=\"success\"\n />\n </v-card-title>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <!--\n <v-spacer />\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n -->\n </v-card-subtitle>\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n <div\n :class=\"{\n 'truncate-description': true,\n 'truncate-2': !!image_url,\n 'truncate-10': !image_url,\n }\"\n v-text=\"description\"\n />\n </v-card-text>\n <v-spacer />\n <v-card-actions class=\"flex-wrap\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click.stop=\"install\"\n />\n </v-card-actions>\n </v-card>\n </template>\n </plugin-details-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\nimport PluginDetailsDialog from './PluginDetailsDialog.vue'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n emits: ['triggerInstall'],\n methods: {\n install: function () {\n this.$emit('triggerInstall', this.plugin)\n },\n },\n}\n</script>\n\n<style scoped>\n.truncate-description {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate-2 {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n}\n\n.truncate-10 {\n line-clamp: 10;\n -webkit-line-clamp: 10;\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"showDialog\" width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Plugin Store Settings</span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-alert v-model=\"errorLoading\" type=\"error\" closable density=\"compact\">\n Error loading previous configuration due to {{ errorText }}\n </v-alert>\n <v-alert v-model=\"errorSaving\" type=\"error\" closable density=\"compact\">\n Error saving due to {{ errorText }}\n </v-alert>\n <v-alert\n v-model=\"successSaving\"\n type=\"success\"\n closable\n density=\"compact\"\n >\n Saved!\n </v-alert>\n <v-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n </v-card-text>\n <v-card-actions>\n <v-btn\n color=\"success\"\n variant=\"text\"\n text=\"Save\"\n data-test=\"save-store-settings-btn\"\n @click=\"save\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst SETTING_NAME = 'store_url'\nconst SETTING_SCOPE = 'DEFAULT'\nexport default {\n mixins: [Settings],\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue', 'update:storeUrl'],\n data() {\n return {\n showDialog: false,\n storeUrl: '',\n rules: {\n required: (value) => !!value || 'Required',\n url: (value) => {\n try {\n new URL(value)\n } catch (_) {\n return 'Not a valid URL'\n }\n return true\n },\n },\n }\n },\n watch: {\n modelValue: function (val) {\n if (val) {\n this.showDialog = val\n }\n },\n showDialog: function (val) {\n if (!val) {\n this.$emit('update:modelValue', val)\n }\n },\n },\n created: function () {\n this.loadSetting(SETTING_NAME, { scope: SETTING_SCOPE })\n },\n methods: {\n save() {\n this.saveSetting(SETTING_NAME, this.storeUrl, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response) {\n if (response) {\n this.storeUrl = response\n } else {\n // Default URL if setting is not found\n this.storeUrl = 'https://store.openc3.com'\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-sheet class=\"pb-11 pt-8 px-8\" height=\"100%\">\n <div class=\"d-flex justify-content-space-between\">\n <div>\n <div class=\"text-h3 mb-3\">OpenC3 Plugin Store</div>\n <div class=\"text-subtitle-1\">\n Browse plugins made by OpenC3 and the COSMOS community\n </div>\n </div>\n <v-spacer />\n <v-btn icon=\"mdi-cog\" variant=\"text\" @click=\"openSettings\" />\n\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n href=\"https://store.openc3.com\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open store.openc3.com </span>\n </v-tooltip>\n\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"close\" />\n </div>\n <div class=\"d-inline-flex align-center w-100\">\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n data-test=\"search-plugin-store\"\n />\n <v-switch\n v-model=\"verifiedOnly\"\n label=\"Verified only\"\n density=\"compact\"\n hide-details\n class=\"ml-4\"\n />\n </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-container>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card v-bind=\"plugin\" @trigger-install=\"install\" />\n </v-col>\n </v-row>\n </v-container>\n </v-sheet>\n <plugin-store-settings-dialog\n v-model=\"showSettingsDialog\"\n @update:store-url=\"updatePluginStore\"\n />\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { PluginCard } from '@/plugins/plugin-store'\nimport PluginStoreSettingsDialog from './PluginStoreSettingsDialog.vue' // idk why importing from @/plugins/plugin-store isn't working\n\nexport default {\n components: {\n PluginCard,\n PluginStoreSettingsDialog,\n },\n emits: ['close', 'triggerInstall'],\n data() {\n return {\n api: new OpenC3Api(),\n search: '',\n verifiedOnly: false,\n showSettingsDialog: false,\n plugins: [],\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\n if (this.verifiedOnly) {\n filtered = filtered.filter((plugin) => plugin.verified)\n }\n if (this.search.length) {\n filtered = filtered.filter((plugin) =>\n plugin.title.toLowerCase().includes(this.search.toLowerCase()),\n )\n }\n return filtered\n },\n },\n mounted: function () {\n // Don't call updatePluginStore() here. It should be called in the background before the user opens this store\n // view (see PluginsTab.vue `created()`) to keep this feeling fast\n this.fetchPluginStoreData()\n // TODO: do something with plugins that are already installed (no uninstall button: https://github.com/OpenC3/cosmos/pull/2162#discussion_r2249339853 )\n },\n methods: {\n fetchPluginStoreData: function () {\n Api.get('/openc3-api/pluginstore').then((response) => {\n this.plugins = response.data\n })\n },\n close: function () {\n this.$emit('close')\n },\n install: function (plugin) {\n this.$emit('triggerInstall', plugin)\n this.close()\n },\n openSettings: function () {\n this.showSettingsDialog = true\n },\n updatePluginStore: function () {\n this.api.update_plugin_store().then((response) => {\n this.fetchPluginStoreData()\n })\n },\n },\n}\n</script>\n\n<style>\n.v-sheet {\n background-color: var(--color-background-base-default);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <tr\n :class=\"{ 'cursor-pointer': hasStoreListing }\"\n data-test=\"plugin-list-item\"\n @click=\"openDetails\"\n >\n <td>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"56\" min-width=\"56\" />\n </td>\n <td>\n <div class=\"text-h6\" v-text=\"displayTitle\" />\n <div class=\"text-subtitle-2 v-list-item-subtitle pl-0\">\n <!-- subtitle -->\n <template v-if=\"isModified\"> * </template>\n {{ name }}\n </div>\n <div v-if=\"targets?.length\">\n <!-- sub-subtitle -->\n <span v-for=\"(target, index) in targets\" :key=\"index\" class=\"mr-2\">\n <a\n v-if=\"target.modified\"\n style=\"cursor: pointer\"\n @click.prevent=\"downloadTarget(target.name)\"\n v-text=\"target.name\"\n />\n <span v-else v-text=\"target.name\" />\n </span>\n </div>\n </td>\n\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"plugin-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Download\"\n prepend-icon=\"mdi-download\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin\"\n />\n <v-list-item\n title=\"Edit Details\"\n prepend-icon=\"mdi-pencil\"\n data-test=\"edit-plugin\"\n @click=\"edit\"\n />\n <v-list-item\n title=\"Upgrade\"\n prepend-icon=\"mdi-update\"\n data-test=\"upgrade-plugin\"\n @click=\"upgrade\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n <plugin-details-dialog\n v-model=\"showCard\"\n v-bind=\"plugin\"\n @trigger-uninstall=\"deletePrompt\"\n />\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport {\n // PluginCard,\n PluginDetailsDialog,\n PluginProps,\n} from '@/plugins/plugin-store'\n\nexport default {\n components: {\n // PluginCard,\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n props: {\n targets: {\n type: Array,\n default: () => {\n return []\n },\n },\n isModified: Boolean,\n },\n emits: ['edit', 'delete', 'upgrade', 'showDetails'],\n data() {\n return {\n showCard: false,\n }\n },\n computed: {\n displayTitle: function () {\n if (this.title) {\n return this.title\n }\n return this.name\n .replace(/^openc3-cosmos-/, '')\n .replace(/-?\\d+\\.\\d+\\.\\d+(?:\\.pre\\.beta\\d+\\.\\d+)?\\.gem(?:__\\d+)?$/, '') // '-6.6.1.pre.beta0.20250801182255.gem__20250801182444' or '6.6.1.gem'\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasStoreListing) {\n this.showCard = true\n }\n },\n downloadPlugin: function () {\n Api.post(`/openc3-api/packages/${this.name}/download`).then(\n (response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n },\n )\n },\n downloadTarget: function (name) {\n Api.post(`/openc3-api/targets/${name}/download`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n })\n },\n edit: function () {\n this.$emit('edit')\n },\n upgrade: function () {\n this.$emit('upgrade')\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn append-icon=\"mdi-store\" @click=\"openStore\">\n Browse Plugins\n </v-btn>\n <v-btn append-icon=\"mdi-paperclip\" class=\"mx-2\" @click=\"selectFile\">\n Install From File\n </v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n <br />\n <p class=\"mt-2\">\n Note: Use <v-icon> mdi-dots-horizontal </v-icon> in the Installed\n Plugins list to upgrade existing plugins\n </p>\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\" />\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col align=\"right\" class=\"mr-2\">\n <div>* indicates a modified plugin</div>\n <div>Click target link to download modifications</div>\n </v-col>\n </v-row>\n <v-divider />\n <!-- TODO This alert shows both success and failure. Make consistent with rest of OpenC3. -->\n <v-alert\n v-model=\"showAlert\"\n closable\n :type=\"alertType\"\n :text=\"alert\"\n data-test=\"plugin-alert\"\n />\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Process List </v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span> Show Output </span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Installed Plugins </v-col>\n <v-col class=\"v-col-auto\">\n <v-switch\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n density=\"compact\"\n hide-details\n data-test=\"show-default-tools\"\n />\n </v-col>\n </v-row>\n <v-data-table\n :headers=\"[]\"\n :items=\"shownPlugins\"\n density=\"compact\"\n class=\"list\"\n data-test=\"plugin-list\"\n >\n <template #item=\"{ item: plugin }\">\n <plugin-list-item\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n @edit=\"() => editPlugin(plugin.name)\"\n @upgrade=\"() => upgradePlugin(plugin.name)\"\n @delete=\"() => deletePrompt(plugin.name)\"\n @show-details=\"showDetails\"\n />\n </template>\n </v-data-table>\n <plugin-card\n v-bind=\"detailPlugin\"\n hide-activator\n :show-dailog=\"showPluginDetails\"\n />\n <plugin-dialog\n v-if=\"showPluginDialog\"\n v-model=\"showPluginDialog\"\n :plugin-name=\"pluginName\"\n :variables=\"variables\"\n :plugin-txt=\"pluginTxt\"\n :existing-plugin-txt=\"existingPluginTxt\"\n :store-id=\"storeId\"\n @callback=\"pluginCallback\"\n />\n <modified-plugin-dialog\n v-if=\"showModifiedPluginDialog\"\n v-model=\"showModifiedPluginDialog\"\n :plugin-name=\"currentPlugin\"\n :targets=\"pluginTargets(currentPlugin)\"\n :plugin-delete=\"pluginDelete\"\n @submit=\"modifiedSubmit\"\n />\n <!-- <download-dialog v-model=\"showDownloadDialog\" /> -->\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n <v-bottom-sheet v-model=\"showPluginStore\" fullscreen>\n <plugin-store\n @close=\"() => (showPluginStore = false)\"\n @trigger-install=\"(storeData) => upload(null, storeData)\"\n />\n </v-bottom-sheet>\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\nimport { PluginListItem } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDialog,\n PluginListItem,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n api: new OpenC3Api(),\n file: null,\n currentPlugin: null,\n showPluginDetails: false,\n detailPlugin: null,\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n pluginName: null,\n variables: {},\n storeId: null,\n pluginTxt: '',\n pluginHashTmp: null,\n existingPluginTxt: null,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n progress: 0,\n pluginDelete: false,\n // When updating update local_mode.rb, local_mode.py, plugins.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n computed: {\n shownPlugins() {\n const pluginsToShow = []\n const defaultPluginsToShow = []\n this.plugins.forEach((plugin) => {\n const pluginNameFirst = plugin.name.split('__')[0]\n const pluginNameSplit = pluginNameFirst.split('-').slice(0, -1)\n const pluginNameShort = pluginNameSplit.join('-')\n if (this.defaultPlugins.includes(pluginNameShort)) {\n defaultPluginsToShow.push(plugin)\n } else {\n pluginsToShow.push(plugin)\n }\n })\n pluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n if (this.showDefaultTools) {\n defaultPluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n return pluginsToShow.concat(defaultPluginsToShow)\n }\n return pluginsToShow\n },\n },\n watch: {\n // watcher to reset the file input when the dialog is closed\n showPluginDialog: function (newValue, oldValue) {\n if (newValue === false) {\n this.file = null\n this.$refs.fileInput.value = null\n }\n },\n },\n created() {\n this.api.update_plugin_store()\n },\n mounted() {\n this.update()\n this.updateProcesses()\n\n // Handle going \"back\" from the plugin store\n // (idk why v-bottom-sheet's close-on-back prop isn't working)\n const that = this\n window.onpopstate = function () {\n if (that.showPluginStore) {\n that.showPluginStore = false\n history.go(1)\n }\n }\n },\n methods: {\n showDetails: function (plugin) {\n this.detailPlugin = plugin\n this.showPluginDetails = true\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n upload: function (existing = null, storeData = null) {\n const method = existing ? 'put' : 'post'\n const path = existing\n ? `/openc3-api/plugins/${existing}`\n : '/openc3-api/plugins'\n const formData = new FormData()\n if (storeData === null) {\n formData.append('plugin', this.file, this.file.name)\n } else {\n formData.append('store_id', storeData.id)\n }\n let self = this\n const promise = Api[method](path, {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n promise\n .then((response) => {\n this.progress = 100\n this.alert = 'Uploaded file'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt =\n response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.storeId = response.data.store_id\n this.pluginTxt = pluginTxt\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n this.file = undefined\n })\n .catch((error) => {\n this.currentPlugin = null\n this.file = undefined\n })\n },\n pluginCallback: function (pluginHash) {\n this.showPluginDialog = false\n if (this.currentPlugin !== null) {\n pluginHash['name'] = this.currentPlugin\n }\n this.pluginHashTmp = pluginHash\n if (this.isModified(this.currentPlugin)) {\n this.pluginDelete = false\n this.showModifiedPluginDialog = true\n } else {\n this.pluginInstall()\n }\n },\n modifiedSubmit: async function (deleteModified) {\n if (deleteModified === true) {\n for (let target of this.pluginTargets(this.currentPlugin)) {\n if (target.modified == true) {\n await Api.post(`/openc3-api/targets/${target.name}/delete_modified`)\n }\n }\n }\n if (this.pluginDelete) {\n this.deletePlugin(this.currentPlugin)\n } else {\n this.pluginInstall()\n }\n },\n pluginInstall: function () {\n Api.post(`/openc3-api/plugins/install/${this.pluginName}`, {\n data: {\n plugin_hash: JSON.stringify(this.pluginHashTmp),\n },\n }).then((response) => {\n this.alert = `Started installing plugin ${this.pluginName} ...`\n this.alertType = 'success'\n this.showAlert = true\n this.currentPlugin = null\n this.file = undefined\n this.variables = {}\n this.pluginTxt = ''\n this.existingPluginTxt = null\n this.storeId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.file = null\n this.currentPlugin = plugin\n this.progress = 0\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.file = null\n this.currentPlugin = null\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n openStore() {\n this.showPluginStore = true\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["settingName","PluginProps","OpenC3Api","storeUrl","_sfc_main","val","_hoisted_4","_renderSlot","_ctx","$options","_createVNode","_component_v_dialog","$event","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_cache","_component_v_card_subtitle","_createElementBlock","_hoisted_2","_component_v_badge","_component_v_card_text","_createBlock","_component_v_img","_component_v_text_field","$data","_mergeProps","_component_v_card_actions","PluginDetailsDialog","_openBlock","_component_plugin_details_dialog","_component_v_card_title","_createTextVNode","_normalizeClass","SETTING_NAME","SETTING_SCOPE","Settings","value","response","_component_v_alert","PluginCard","PluginStoreSettingsDialog","filtered","plugin","Api","_hoisted_1","_component_v_sheet","_component_v_switch","_component_v_container","_component_v_row","_Fragment","_renderList","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","decodedData","uInt8Array","i","blob","link","name","args","$props","_a","_hoisted_3","target","index","_withModifiers","_component_v_menu","_component_v_icon","_component_v_list","_component_v_list_item","PluginDialog","PluginListItem","PluginStore","ModifiedPluginDialog","SimpleTextDialog","pluginsToShow","defaultPluginsToShow","pluginNameShort","a","b","newValue","oldValue","that","result","targetName","process","_","nanoSecs","format","toDate","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","event","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_progress_circular","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_data_table","_component_plugin_list_item","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}