@openc3/vue-common 6.9.1 → 6.9.2

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 (429) hide show
  1. package/dist/{ArrayWidget-DJkuPBFS.cjs → ArrayWidget-Barb7cCJ.cjs} +2 -2
  2. package/dist/{ArrayWidget-DJkuPBFS.cjs.map → ArrayWidget-Barb7cCJ.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-DLfNWDzN.js → ArrayWidget-DUTccTH3.js} +5 -5
  4. package/dist/{ArrayWidget-DLfNWDzN.js.map → ArrayWidget-DUTccTH3.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-CoRsUxHG.js → ArrayplotWidget-BeNF76NM.js} +4 -4
  6. package/dist/{ArrayplotWidget-CoRsUxHG.js.map → ArrayplotWidget-BeNF76NM.js.map} +1 -1
  7. package/dist/{ArrayplotWidget-COGxmBEP.cjs → ArrayplotWidget-CQRRIpFr.cjs} +2 -2
  8. package/dist/{ArrayplotWidget-COGxmBEP.cjs.map → ArrayplotWidget-CQRRIpFr.cjs.map} +1 -1
  9. package/dist/{BarColumn-DHP-zQ4R.js → BarColumn-Dn6MDJoo.js} +3 -3
  10. package/dist/{BarColumn-DHP-zQ4R.js.map → BarColumn-Dn6MDJoo.js.map} +1 -1
  11. package/dist/{BarColumn-BaPaYtki.cjs → BarColumn-ooUZaRUq.cjs} +2 -2
  12. package/dist/{BarColumn-BaPaYtki.cjs.map → BarColumn-ooUZaRUq.cjs.map} +1 -1
  13. package/dist/{BlockWidget-DLncsLLX.cjs → BlockWidget-BDkZljH8.cjs} +2 -2
  14. package/dist/{BlockWidget-DLncsLLX.cjs.map → BlockWidget-BDkZljH8.cjs.map} +1 -1
  15. package/dist/{BlockWidget-BmHSFvOq.js → BlockWidget-BXQlPVQI.js} +5 -5
  16. package/dist/{BlockWidget-BmHSFvOq.js.map → BlockWidget-BXQlPVQI.js.map} +1 -1
  17. package/dist/{ButtonWidget-BLePbTf_.cjs → ButtonWidget-5ybX-zVD.cjs} +3 -3
  18. package/dist/{ButtonWidget-BLePbTf_.cjs.map → ButtonWidget-5ybX-zVD.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-C3ZWRjZZ.js → ButtonWidget-D8ncnhlr.js} +11 -11
  20. package/dist/{ButtonWidget-C3ZWRjZZ.js.map → ButtonWidget-D8ncnhlr.js.map} +1 -1
  21. package/dist/{CanvasWidget-C8Sy9t9G.cjs → CanvasWidget-D4ZHOTxU.cjs} +2 -2
  22. package/dist/{CanvasWidget-C8Sy9t9G.cjs.map → CanvasWidget-D4ZHOTxU.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-CL-XzPF4.js → CanvasWidget-IkZPgKME.js} +3 -3
  24. package/dist/{CanvasWidget-CL-XzPF4.js.map → CanvasWidget-IkZPgKME.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-6MPKD5iZ.cjs → CanvasdotWidget-C_M5yCv9.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-6MPKD5iZ.cjs.map → CanvasdotWidget-C_M5yCv9.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-D8Y9DgVE.js → CanvasdotWidget-Ceu6X0ma.js} +3 -3
  28. package/dist/{CanvasdotWidget-D8Y9DgVE.js.map → CanvasdotWidget-Ceu6X0ma.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-DYUaf3zy.cjs → CanvasimageWidget-BiWHp93X.cjs} +2 -2
  30. package/dist/{CanvasimageWidget-DYUaf3zy.cjs.map → CanvasimageWidget-BiWHp93X.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-DHSGK_tD.js → CanvasimageWidget-Bnx5rUVW.js} +4 -4
  32. package/dist/{CanvasimageWidget-DHSGK_tD.js.map → CanvasimageWidget-Bnx5rUVW.js.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-Btt_fQfC.js → CanvasimagevalueWidget-CFO-XDML.js} +4 -4
  34. package/dist/{CanvasimagevalueWidget-Btt_fQfC.js.map → CanvasimagevalueWidget-CFO-XDML.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs → CanvasimagevalueWidget-CVdY8iLq.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-Bu1ECOWl.cjs.map → CanvasimagevalueWidget-CVdY8iLq.cjs.map} +1 -1
  37. package/dist/{CanvaslabelWidget-BF_8RTjv.js → CanvaslabelWidget-C5wyN8dS.js} +3 -3
  38. package/dist/{CanvaslabelWidget-BF_8RTjv.js.map → CanvaslabelWidget-C5wyN8dS.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-Dik-ld55.cjs → CanvaslabelWidget-U4P4GDpI.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-Dik-ld55.cjs.map → CanvaslabelWidget-U4P4GDpI.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs → CanvaslabelvalueWidget-C60wTi40.cjs} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-BBlKBoZO.cjs.map → CanvaslabelvalueWidget-C60wTi40.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-scbwaujI.js → CanvaslabelvalueWidget-CXr6zhdn.js} +3 -3
  44. package/dist/{CanvaslabelvalueWidget-scbwaujI.js.map → CanvaslabelvalueWidget-CXr6zhdn.js.map} +1 -1
  45. package/dist/{CanvaslineWidget-DN0ojc37.cjs → CanvaslineWidget-CzOtvkcR.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-DN0ojc37.cjs.map → CanvaslineWidget-CzOtvkcR.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-gRvm_-TT.js → CanvaslineWidget-DW2l3EAG.js} +3 -3
  48. package/dist/{CanvaslineWidget-gRvm_-TT.js.map → CanvaslineWidget-DW2l3EAG.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs → CanvaslinevalueWidget-D20bbhm_.cjs} +2 -2
  50. package/dist/{CanvaslinevalueWidget-Cz1XYp0r.cjs.map → CanvaslinevalueWidget-D20bbhm_.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-CljziRek.js → CanvaslinevalueWidget-UJ0xa8-8.js} +3 -3
  52. package/dist/{CanvaslinevalueWidget-CljziRek.js.map → CanvaslinevalueWidget-UJ0xa8-8.js.map} +1 -1
  53. package/dist/{CheckbuttonWidget-BOabI_jE.js → CheckbuttonWidget-BF5cvQHd.js} +3 -3
  54. package/dist/{CheckbuttonWidget-BOabI_jE.js.map → CheckbuttonWidget-BF5cvQHd.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs → CheckbuttonWidget-dStQF0Yp.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-B5jOzhZ4.cjs.map → CheckbuttonWidget-dStQF0Yp.cjs.map} +1 -1
  57. package/dist/{ClassificationBanners-BGDnMx4r.js → ClassificationBanners-CDc_06x9.js} +2 -2
  58. package/dist/{ClassificationBanners-BGDnMx4r.js.map → ClassificationBanners-CDc_06x9.js.map} +1 -1
  59. package/dist/{ClassificationBanners-CbcQDr3v.cjs → ClassificationBanners-CTChOmRf.cjs} +2 -2
  60. package/dist/{ClassificationBanners-CbcQDr3v.cjs.map → ClassificationBanners-CTChOmRf.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-_lxTm8Wb.cjs → ComboboxWidget-D4h-0V0x.cjs} +2 -2
  62. package/dist/{ComboboxWidget-_lxTm8Wb.cjs.map → ComboboxWidget-D4h-0V0x.cjs.map} +1 -1
  63. package/dist/{ComboboxWidget-BLXNYFiY.js → ComboboxWidget-Di1O9VBF.js} +3 -3
  64. package/dist/{ComboboxWidget-BLXNYFiY.js.map → ComboboxWidget-Di1O9VBF.js.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CnNlsHRX.js → CriticalCmdDialog-CZHVDFjK.js} +4 -4
  66. package/dist/{CriticalCmdDialog-CnNlsHRX.js.map → CriticalCmdDialog-CZHVDFjK.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-niBmkudw.cjs → CriticalCmdDialog-EvK998xs.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-niBmkudw.cjs.map → CriticalCmdDialog-EvK998xs.cjs.map} +1 -1
  69. package/dist/{CustomIcon-h5X7369N.js → CustomIcon-DTfsnDJn.js} +6 -6
  70. package/dist/{CustomIcon-h5X7369N.js.map → CustomIcon-DTfsnDJn.js.map} +1 -1
  71. package/dist/CustomIcon-eie3rPKh.cjs +2 -0
  72. package/dist/{CustomIcon-Bop2mEnu.cjs.map → CustomIcon-eie3rPKh.cjs.map} +1 -1
  73. package/dist/{DateWidget-BvabEAhO.cjs → DateWidget-BAFINBB6.cjs} +2 -2
  74. package/dist/{DateWidget-BvabEAhO.cjs.map → DateWidget-BAFINBB6.cjs.map} +1 -1
  75. package/dist/{DateWidget-BTqLCtLS.js → DateWidget-GiUOvEZO.js} +3 -3
  76. package/dist/{DateWidget-BTqLCtLS.js.map → DateWidget-GiUOvEZO.js.map} +1 -1
  77. package/dist/{DetailsDialog-DgN9Jcio.cjs → DetailsDialog-DbRPJzDG.cjs} +2 -2
  78. package/dist/{DetailsDialog-DgN9Jcio.cjs.map → DetailsDialog-DbRPJzDG.cjs.map} +1 -1
  79. package/dist/{DetailsDialog-BNCS3QAe.js → DetailsDialog-Ji0jA6sd.js} +3 -3
  80. package/dist/{DetailsDialog-BNCS3QAe.js.map → DetailsDialog-Ji0jA6sd.js.map} +1 -1
  81. package/dist/{DynamicWidget-BWEVCUfd.cjs → DynamicWidget-BNfJRfR5.cjs} +2 -2
  82. package/dist/{DynamicWidget-BWEVCUfd.cjs.map → DynamicWidget-BNfJRfR5.cjs.map} +1 -1
  83. package/dist/{DynamicWidget-CfMtj7H8.js → DynamicWidget-DHL7pbgW.js} +2 -2
  84. package/dist/{DynamicWidget-CfMtj7H8.js.map → DynamicWidget-DHL7pbgW.js.map} +1 -1
  85. package/dist/{EventListDialog-C2pwmD0d.js → EventListDialog-BLLIQyah.js} +129 -123
  86. package/dist/EventListDialog-BLLIQyah.js.map +1 -0
  87. package/dist/EventListDialog-CEDNXaKw.cjs +2 -0
  88. package/dist/EventListDialog-CEDNXaKw.cjs.map +1 -0
  89. package/dist/{FormatvalueWidget-ulLzg1E-.cjs → FormatvalueWidget-DJkp_gM_.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-ulLzg1E-.cjs.map → FormatvalueWidget-DJkp_gM_.cjs.map} +1 -1
  91. package/dist/{FormatvalueWidget-CLYx8qbg.js → FormatvalueWidget-JVEG-72b.js} +4 -4
  92. package/dist/{FormatvalueWidget-CLYx8qbg.js.map → FormatvalueWidget-JVEG-72b.js.map} +1 -1
  93. package/dist/{Graph-BliBYJxD.js → Graph-B3v4RJRC.js} +102 -95
  94. package/dist/Graph-B3v4RJRC.js.map +1 -0
  95. package/dist/Graph-BOZlkDbl.cjs +2 -0
  96. package/dist/Graph-BOZlkDbl.cjs.map +1 -0
  97. package/dist/{GraphWidget-g-0vO4_S.cjs → GraphWidget-DD7SIV2k.cjs} +2 -2
  98. package/dist/{GraphWidget-g-0vO4_S.cjs.map → GraphWidget-DD7SIV2k.cjs.map} +1 -1
  99. package/dist/{GraphWidget-Cb6Ozf54.js → GraphWidget-DGe0TweO.js} +2 -2
  100. package/dist/{GraphWidget-Cb6Ozf54.js.map → GraphWidget-DGe0TweO.js.map} +1 -1
  101. package/dist/{HorizontalWidget-AY2M01qP.js → HorizontalWidget-B_JnT2Q0.js} +3 -3
  102. package/dist/{HorizontalWidget-AY2M01qP.js.map → HorizontalWidget-B_JnT2Q0.js.map} +1 -1
  103. package/dist/{HorizontalWidget-BiEZZpZQ.cjs → HorizontalWidget-CIDUx-Qp.cjs} +2 -2
  104. package/dist/{HorizontalWidget-BiEZZpZQ.cjs.map → HorizontalWidget-CIDUx-Qp.cjs.map} +1 -1
  105. package/dist/{HorizontalboxWidget-CWq4ej6k.cjs → HorizontalboxWidget-BQYyunr-.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-CWq4ej6k.cjs.map → HorizontalboxWidget-BQYyunr-.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-2MEKvq_C.js → HorizontalboxWidget-D_1bF3p-.js} +6 -6
  108. package/dist/{HorizontalboxWidget-2MEKvq_C.js.map → HorizontalboxWidget-D_1bF3p-.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-DgpOPA7q.js → HorizontallineWidget-Bqb82J2C.js} +3 -3
  110. package/dist/{HorizontallineWidget-DgpOPA7q.js.map → HorizontallineWidget-Bqb82J2C.js.map} +1 -1
  111. package/dist/{HorizontallineWidget-Dm5G1l4A.cjs → HorizontallineWidget-dYDzYNW1.cjs} +2 -2
  112. package/dist/{HorizontallineWidget-Dm5G1l4A.cjs.map → HorizontallineWidget-dYDzYNW1.cjs.map} +1 -1
  113. package/dist/{IframeWidget-DDw5t7eV.cjs → IframeWidget-92T3yaK4.cjs} +2 -2
  114. package/dist/{IframeWidget-DDw5t7eV.cjs.map → IframeWidget-92T3yaK4.cjs.map} +1 -1
  115. package/dist/{IframeWidget-UKKUl7k5.js → IframeWidget-BUOO2Zav.js} +3 -3
  116. package/dist/{IframeWidget-UKKUl7k5.js.map → IframeWidget-BUOO2Zav.js.map} +1 -1
  117. package/dist/{ImageLoader-C-CIL4YD.js → ImageLoader-C6RNmpHN.js} +2 -2
  118. package/dist/{ImageLoader-C-CIL4YD.js.map → ImageLoader-C6RNmpHN.js.map} +1 -1
  119. package/dist/{ImageLoader-9TCd0KxL.cjs → ImageLoader-Dq0Qs61n.cjs} +2 -2
  120. package/dist/{ImageLoader-9TCd0KxL.cjs.map → ImageLoader-Dq0Qs61n.cjs.map} +1 -1
  121. package/dist/{ImageviewerWidget-DhuQH5Io.js → ImageviewerWidget-Fd7r9VTx.js} +3 -3
  122. package/dist/{ImageviewerWidget-DhuQH5Io.js.map → ImageviewerWidget-Fd7r9VTx.js.map} +1 -1
  123. package/dist/{ImageviewerWidget-DpXzLOpF.cjs → ImageviewerWidget-Y6xx7zZX.cjs} +2 -2
  124. package/dist/{ImageviewerWidget-DpXzLOpF.cjs.map → ImageviewerWidget-Y6xx7zZX.cjs.map} +1 -1
  125. package/dist/{InterfacesTab-CiVfsUia.cjs → InterfacesTab-DgLHHNke.cjs} +2 -2
  126. package/dist/{InterfacesTab-CiVfsUia.cjs.map → InterfacesTab-DgLHHNke.cjs.map} +1 -1
  127. package/dist/{InterfacesTab-Dq3oAKqz.js → InterfacesTab-dig9pzGg.js} +10 -10
  128. package/dist/{InterfacesTab-Dq3oAKqz.js.map → InterfacesTab-dig9pzGg.js.map} +1 -1
  129. package/dist/{LabelWidget-SO9zqcNN.js → LabelWidget-BVxcrEXf.js} +3 -3
  130. package/dist/{LabelWidget-SO9zqcNN.js.map → LabelWidget-BVxcrEXf.js.map} +1 -1
  131. package/dist/{LabelWidget-D-m2gFIZ.cjs → LabelWidget-BqN6Noag.cjs} +2 -2
  132. package/dist/{LabelWidget-D-m2gFIZ.cjs.map → LabelWidget-BqN6Noag.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-DWoM5AJ5.js → LabelledWidget-ZZJPwPpI.js} +5 -5
  134. package/dist/{LabelledWidget-DWoM5AJ5.js.map → LabelledWidget-ZZJPwPpI.js.map} +1 -1
  135. package/dist/{LabelledWidget-BFfsD2wz.cjs → LabelledWidget-eR2Dar84.cjs} +2 -2
  136. package/dist/{LabelledWidget-BFfsD2wz.cjs.map → LabelledWidget-eR2Dar84.cjs.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-D3vnkvQZ.js → LabelprogressbarWidget-C2vkWITx.js} +5 -5
  138. package/dist/{LabelprogressbarWidget-D3vnkvQZ.js.map → LabelprogressbarWidget-C2vkWITx.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-B8x5YimU.cjs → LabelprogressbarWidget-D-Oxgeeg.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-B8x5YimU.cjs.map → LabelprogressbarWidget-D-Oxgeeg.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-DyPaUfc9.cjs → LabelsparklineWidget-B0q6o8ro.cjs} +2 -2
  142. package/dist/{LabelsparklineWidget-DyPaUfc9.cjs.map → LabelsparklineWidget-B0q6o8ro.cjs.map} +1 -1
  143. package/dist/{LabelsparklineWidget-DO0T-Jot.js → LabelsparklineWidget-CSlvTtVj.js} +5 -5
  144. package/dist/{LabelsparklineWidget-DO0T-Jot.js.map → LabelsparklineWidget-CSlvTtVj.js.map} +1 -1
  145. package/dist/{LabelvalueWidget-B6BbNFnk.js → LabelvalueWidget-6MxCpBTc.js} +5 -5
  146. package/dist/{LabelvalueWidget-B6BbNFnk.js.map → LabelvalueWidget-6MxCpBTc.js.map} +1 -1
  147. package/dist/{LabelvalueWidget-cTPG6Xqi.cjs → LabelvalueWidget-DbCpaJBW.cjs} +2 -2
  148. package/dist/{LabelvalueWidget-cTPG6Xqi.cjs.map → LabelvalueWidget-DbCpaJBW.cjs.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-CxfL-H9C.js → LabelvaluedescWidget-8mNs15uI.js} +10 -10
  150. package/dist/{LabelvaluedescWidget-CxfL-H9C.js.map → LabelvaluedescWidget-8mNs15uI.js.map} +1 -1
  151. package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs → LabelvaluedescWidget-BzcfT8oZ.cjs} +2 -2
  152. package/dist/{LabelvaluedescWidget-C4sIZ0md.cjs.map → LabelvaluedescWidget-BzcfT8oZ.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs → LabelvaluelimitsbarWidget-Cc7NNKOt.cjs} +2 -2
  154. package/dist/{LabelvaluelimitsbarWidget-CBnU6Afl.cjs.map → LabelvaluelimitsbarWidget-Cc7NNKOt.cjs.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js → LabelvaluelimitsbarWidget-jeDT8JjR.js} +5 -5
  156. package/dist/{LabelvaluelimitsbarWidget-BT5k9mHv.js.map → LabelvaluelimitsbarWidget-jeDT8JjR.js.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs → LabelvaluelimitscolumnWidget-CNqHPGpL.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-CwoMfO0P.cjs.map → LabelvaluelimitscolumnWidget-CNqHPGpL.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js → LabelvaluelimitscolumnWidget-DfO5Yb79.js} +6 -6
  160. package/dist/{LabelvaluelimitscolumnWidget-DUbmxh4p.js.map → LabelvaluelimitscolumnWidget-DfO5Yb79.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs → LabelvaluerangebarWidget-CnDgjH-G.cjs} +2 -2
  162. package/dist/{LabelvaluerangebarWidget-DB4gw6Rd.cjs.map → LabelvaluerangebarWidget-CnDgjH-G.cjs.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-DexAc2UB.js → LabelvaluerangebarWidget-D23BEk-N.js} +5 -5
  164. package/dist/{LabelvaluerangebarWidget-DexAc2UB.js.map → LabelvaluerangebarWidget-D23BEk-N.js.map} +1 -1
  165. package/dist/Layout-Dd5e3p-K.cjs +2 -0
  166. package/dist/{Layout-DvBekli8.cjs.map → Layout-Dd5e3p-K.cjs.map} +1 -1
  167. package/dist/{Layout-Dd6dRf3R.js → Layout-DuiUWxWc.js} +2 -2
  168. package/dist/{Layout-Dd6dRf3R.js.map → Layout-DuiUWxWc.js.map} +1 -1
  169. package/dist/{LedWidget-D1RwHb_V.js → LedWidget-9IAav1IH.js} +5 -5
  170. package/dist/{LedWidget-D1RwHb_V.js.map → LedWidget-9IAav1IH.js.map} +1 -1
  171. package/dist/{LedWidget-a99ygZOA.cjs → LedWidget-CQkF1v5x.cjs} +2 -2
  172. package/dist/{LedWidget-a99ygZOA.cjs.map → LedWidget-CQkF1v5x.cjs.map} +1 -1
  173. package/dist/{LimitsbarWidget-DaHpj-rM.cjs → LimitsbarWidget-C4jNTGa9.cjs} +2 -2
  174. package/dist/{LimitsbarWidget-DaHpj-rM.cjs.map → LimitsbarWidget-C4jNTGa9.cjs.map} +1 -1
  175. package/dist/{LimitsbarWidget-ClOmoV50.js → LimitsbarWidget-DqaTaWO1.js} +3 -3
  176. package/dist/{LimitsbarWidget-ClOmoV50.js.map → LimitsbarWidget-DqaTaWO1.js.map} +1 -1
  177. package/dist/{LimitscolorWidget-CBUoEYKp.js → LimitscolorWidget-4g3UVzsW.js} +3 -3
  178. package/dist/{LimitscolorWidget-CBUoEYKp.js.map → LimitscolorWidget-4g3UVzsW.js.map} +1 -1
  179. package/dist/{LimitscolorWidget-D4nPHQlI.cjs → LimitscolorWidget-BjlXWw_j.cjs} +2 -2
  180. package/dist/{LimitscolorWidget-D4nPHQlI.cjs.map → LimitscolorWidget-BjlXWw_j.cjs.map} +1 -1
  181. package/dist/{LimitscolumnWidget-wIx0L9hb.cjs → LimitscolumnWidget-BLZE1Zfh.cjs} +2 -2
  182. package/dist/{LimitscolumnWidget-wIx0L9hb.cjs.map → LimitscolumnWidget-BLZE1Zfh.cjs.map} +1 -1
  183. package/dist/{LimitscolumnWidget-hsHkmY-_.js → LimitscolumnWidget-pR-tLgFG.js} +3 -3
  184. package/dist/{LimitscolumnWidget-hsHkmY-_.js.map → LimitscolumnWidget-pR-tLgFG.js.map} +1 -1
  185. package/dist/{LinegraphWidget-CXrKtxOo.js → LinegraphWidget-DMcegwyu.js} +5 -5
  186. package/dist/{LinegraphWidget-CXrKtxOo.js.map → LinegraphWidget-DMcegwyu.js.map} +1 -1
  187. package/dist/{LinegraphWidget-BRnwhfEQ.cjs → LinegraphWidget-adpA8cjD.cjs} +2 -2
  188. package/dist/{LinegraphWidget-BRnwhfEQ.cjs.map → LinegraphWidget-adpA8cjD.cjs.map} +1 -1
  189. package/dist/{MatrixbycolumnsWidget-CsogVU9c.js → MatrixbycolumnsWidget--31rW1Mx.js} +4 -4
  190. package/dist/{MatrixbycolumnsWidget-CsogVU9c.js.map → MatrixbycolumnsWidget--31rW1Mx.js.map} +1 -1
  191. package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs → MatrixbycolumnsWidget-2lqTNOqb.cjs} +2 -2
  192. package/dist/{MatrixbycolumnsWidget-3jldaS14.cjs.map → MatrixbycolumnsWidget-2lqTNOqb.cjs.map} +1 -1
  193. package/dist/{MicroservicesTab-3pNZZ5I0.cjs → MicroservicesTab-BDkTm3LD.cjs} +2 -2
  194. package/dist/{MicroservicesTab-3pNZZ5I0.cjs.map → MicroservicesTab-BDkTm3LD.cjs.map} +1 -1
  195. package/dist/{MicroservicesTab-DzEvbxlM.js → MicroservicesTab-DhisErku.js} +5 -5
  196. package/dist/{MicroservicesTab-DzEvbxlM.js.map → MicroservicesTab-DhisErku.js.map} +1 -1
  197. package/dist/{Openc3Screen-CD3C_EUo.cjs → Openc3Screen-B_8bygux.cjs} +5 -5
  198. package/dist/Openc3Screen-B_8bygux.cjs.map +1 -0
  199. package/dist/{Openc3Screen-Cqm5Xtd-.js → Openc3Screen-zVSKWUkb.js} +237 -232
  200. package/dist/Openc3Screen-zVSKWUkb.js.map +1 -0
  201. package/dist/{OutputDialog-7M4L50tA.js → OutputDialog-D3zlQlpE.js} +3 -3
  202. package/dist/{OutputDialog-7M4L50tA.js.map → OutputDialog-D3zlQlpE.js.map} +1 -1
  203. package/dist/{OutputDialog-CnDQxHTZ.cjs → OutputDialog-DxEYVYA3.cjs} +2 -2
  204. package/dist/{OutputDialog-CnDQxHTZ.cjs.map → OutputDialog-DxEYVYA3.cjs.map} +1 -1
  205. package/dist/{PackagesTab-N4SD1Pxj.js → PackagesTab-Bjy3y4fK.js} +4 -4
  206. package/dist/{PackagesTab-N4SD1Pxj.js.map → PackagesTab-Bjy3y4fK.js.map} +1 -1
  207. package/dist/{PackagesTab-DPPXZvoV.cjs → PackagesTab-CVytftqm.cjs} +2 -2
  208. package/dist/{PackagesTab-DPPXZvoV.cjs.map → PackagesTab-CVytftqm.cjs.map} +1 -1
  209. package/dist/PluginsTab-BvwrAskE.cjs +6 -0
  210. package/dist/PluginsTab-BvwrAskE.cjs.map +1 -0
  211. package/dist/{PluginsTab-C7PH2Wym.js → PluginsTab-Di5nXctJ.js} +375 -294
  212. package/dist/PluginsTab-Di5nXctJ.js.map +1 -0
  213. package/dist/{ProgressbarWidget-CPeGR-Az.cjs → ProgressbarWidget-COa_sGKn.cjs} +2 -2
  214. package/dist/{ProgressbarWidget-CPeGR-Az.cjs.map → ProgressbarWidget-COa_sGKn.cjs.map} +1 -1
  215. package/dist/{ProgressbarWidget-CO6CEkxP.js → ProgressbarWidget-DGAYHWEj.js} +3 -3
  216. package/dist/{ProgressbarWidget-CO6CEkxP.js.map → ProgressbarWidget-DGAYHWEj.js.map} +1 -1
  217. package/dist/{RadiobuttonWidget-DucgkAYD.cjs → RadiobuttonWidget-CQPXrm0x.cjs} +2 -2
  218. package/dist/{RadiobuttonWidget-DucgkAYD.cjs.map → RadiobuttonWidget-CQPXrm0x.cjs.map} +1 -1
  219. package/dist/{RadiobuttonWidget-DrxUclws.js → RadiobuttonWidget-Cbx15iyl.js} +3 -3
  220. package/dist/{RadiobuttonWidget-DrxUclws.js.map → RadiobuttonWidget-Cbx15iyl.js.map} +1 -1
  221. package/dist/{RadiogroupWidget-C7oVFRf3.cjs → RadiogroupWidget-C15ugChT.cjs} +2 -2
  222. package/dist/{RadiogroupWidget-C7oVFRf3.cjs.map → RadiogroupWidget-C15ugChT.cjs.map} +1 -1
  223. package/dist/{RadiogroupWidget-DN9C38cg.js → RadiogroupWidget-DW3nTccf.js} +3 -3
  224. package/dist/{RadiogroupWidget-DN9C38cg.js.map → RadiogroupWidget-DW3nTccf.js.map} +1 -1
  225. package/dist/{RangebarWidget-Da9S3KMB.cjs → RangebarWidget-5ekc5Lyp.cjs} +2 -2
  226. package/dist/{RangebarWidget-Da9S3KMB.cjs.map → RangebarWidget-5ekc5Lyp.cjs.map} +1 -1
  227. package/dist/{RangebarWidget-5uQTfLMP.js → RangebarWidget-BZba6dPt.js} +3 -3
  228. package/dist/{RangebarWidget-5uQTfLMP.js.map → RangebarWidget-BZba6dPt.js.map} +1 -1
  229. package/dist/{RedisTab-BFTaPNRc.cjs → RedisTab-C89xySPI.cjs} +2 -2
  230. package/dist/{RedisTab-BFTaPNRc.cjs.map → RedisTab-C89xySPI.cjs.map} +1 -1
  231. package/dist/{RedisTab-Cyrr_g9k.js → RedisTab-Dnqd_dRk.js} +14 -14
  232. package/dist/{RedisTab-Cyrr_g9k.js.map → RedisTab-Dnqd_dRk.js.map} +1 -1
  233. package/dist/{RollupWidget-DK0eFASs.cjs → RollupWidget-ILwSCjGa.cjs} +2 -2
  234. package/dist/{RollupWidget-DK0eFASs.cjs.map → RollupWidget-ILwSCjGa.cjs.map} +1 -1
  235. package/dist/{RollupWidget-B0DCULnu.js → RollupWidget-Mley0KZv.js} +3 -3
  236. package/dist/{RollupWidget-B0DCULnu.js.map → RollupWidget-Mley0KZv.js.map} +1 -1
  237. package/dist/{RoutersTab-B8JIxjdI.cjs → RoutersTab-CokDnWfK.cjs} +2 -2
  238. package/dist/{RoutersTab-B8JIxjdI.cjs.map → RoutersTab-CokDnWfK.cjs.map} +1 -1
  239. package/dist/{RoutersTab-BAfpG8k3.js → RoutersTab-Dg3i3h0M.js} +7 -7
  240. package/dist/{RoutersTab-BAfpG8k3.js.map → RoutersTab-Dg3i3h0M.js.map} +1 -1
  241. package/dist/ScriptChooser-BzQcgW8g.cjs +2 -0
  242. package/dist/ScriptChooser-BzQcgW8g.cjs.map +1 -0
  243. package/dist/{ScriptChooser-ahp4Tu3O.js → ScriptChooser-DL8ct71n.js} +32 -27
  244. package/dist/ScriptChooser-DL8ct71n.js.map +1 -0
  245. package/dist/{ScrollwindowWidget-xM_R_Arq.cjs → ScrollwindowWidget-B4dv7icF.cjs} +2 -2
  246. package/dist/{ScrollwindowWidget-xM_R_Arq.cjs.map → ScrollwindowWidget-B4dv7icF.cjs.map} +1 -1
  247. package/dist/{ScrollwindowWidget-BOkZQgtf.js → ScrollwindowWidget-DvsnpEcJ.js} +4 -4
  248. package/dist/{ScrollwindowWidget-BOkZQgtf.js.map → ScrollwindowWidget-DvsnpEcJ.js.map} +1 -1
  249. package/dist/{SecretsTab-D5RxHYVp.js → SecretsTab-CIrHz_ni.js} +8 -8
  250. package/dist/{SecretsTab-D5RxHYVp.js.map → SecretsTab-CIrHz_ni.js.map} +1 -1
  251. package/dist/{SecretsTab-DoHYppoO.cjs → SecretsTab-Dudp9OiZ.cjs} +2 -2
  252. package/dist/{SecretsTab-DoHYppoO.cjs.map → SecretsTab-Dudp9OiZ.cjs.map} +1 -1
  253. package/dist/{SettingsTab-CKGQEwd_.js → SettingsTab-DztpIQm7.js} +5 -5
  254. package/dist/{SettingsTab-CKGQEwd_.js.map → SettingsTab-DztpIQm7.js.map} +1 -1
  255. package/dist/{SettingsTab-Dvnzqzdp.cjs → SettingsTab-MipB-sIq.cjs} +2 -2
  256. package/dist/{SettingsTab-Dvnzqzdp.cjs.map → SettingsTab-MipB-sIq.cjs.map} +1 -1
  257. package/dist/{SignalWidget-Cis0Xkea.js → SignalWidget-BE-MGigb.js} +3 -3
  258. package/dist/{SignalWidget-Cis0Xkea.js.map → SignalWidget-BE-MGigb.js.map} +1 -1
  259. package/dist/{SignalWidget-BWKgNMdV.cjs → SignalWidget-CQqD33Lg.cjs} +2 -2
  260. package/dist/{SignalWidget-BWKgNMdV.cjs.map → SignalWidget-CQqD33Lg.cjs.map} +1 -1
  261. package/dist/{SimpleTextDialog-D2mEDvGY.js → SimpleTextDialog-BkUovtW9.js} +7 -7
  262. package/dist/SimpleTextDialog-BkUovtW9.js.map +1 -0
  263. package/dist/{SimpleTextDialog-BCNn5FZh.cjs → SimpleTextDialog-NSW_V3iT.cjs} +2 -2
  264. package/dist/SimpleTextDialog-NSW_V3iT.cjs.map +1 -0
  265. package/dist/{SpacerWidget-CLcqC2Qk.js → SpacerWidget-DXayYLSi.js} +3 -3
  266. package/dist/{SpacerWidget-CLcqC2Qk.js.map → SpacerWidget-DXayYLSi.js.map} +1 -1
  267. package/dist/{SpacerWidget-_daU5QnM.cjs → SpacerWidget-QlVjOsLl.cjs} +2 -2
  268. package/dist/{SpacerWidget-_daU5QnM.cjs.map → SpacerWidget-QlVjOsLl.cjs.map} +1 -1
  269. package/dist/{SparklineWidget-CTp83eZ-.js → SparklineWidget-BNYHhnFk.js} +5 -5
  270. package/dist/{SparklineWidget-CTp83eZ-.js.map → SparklineWidget-BNYHhnFk.js.map} +1 -1
  271. package/dist/{SparklineWidget-qRnlPzJ_.cjs → SparklineWidget-mi0idVbP.cjs} +2 -2
  272. package/dist/{SparklineWidget-qRnlPzJ_.cjs.map → SparklineWidget-mi0idVbP.cjs.map} +1 -1
  273. package/dist/{TabbookWidget-C0Fvv-o5.cjs → TabbookWidget-BMaDTham.cjs} +2 -2
  274. package/dist/{TabbookWidget-C0Fvv-o5.cjs.map → TabbookWidget-BMaDTham.cjs.map} +1 -1
  275. package/dist/{TabbookWidget-uucd-zsX.js → TabbookWidget-BbnCFFoI.js} +3 -3
  276. package/dist/{TabbookWidget-uucd-zsX.js.map → TabbookWidget-BbnCFFoI.js.map} +1 -1
  277. package/dist/TargetPacketItemChooser-DezS0jS3.cjs +2 -0
  278. package/dist/TargetPacketItemChooser-DezS0jS3.cjs.map +1 -0
  279. package/dist/{TargetPacketItemChooser-CXpSx-eA.js → TargetPacketItemChooser-Z0Tn5eXv.js} +110 -55
  280. package/dist/TargetPacketItemChooser-Z0Tn5eXv.js.map +1 -0
  281. package/dist/{TargetsTab-CM4ABe5y.js → TargetsTab-CDd9F7X3.js} +15 -15
  282. package/dist/{TargetsTab-CM4ABe5y.js.map → TargetsTab-CDd9F7X3.js.map} +1 -1
  283. package/dist/{TargetsTab-Ixql3xzm.cjs → TargetsTab-D32K2JiE.cjs} +2 -2
  284. package/dist/{TargetsTab-Ixql3xzm.cjs.map → TargetsTab-D32K2JiE.cjs.map} +1 -1
  285. package/dist/{TextBoxDialog-DbD8P4Xc.cjs → TextBoxDialog-DXG7H7kQ.cjs} +2 -2
  286. package/dist/{TextBoxDialog-DbD8P4Xc.cjs.map → TextBoxDialog-DXG7H7kQ.cjs.map} +1 -1
  287. package/dist/{TextBoxDialog-CdFHdj5W.js → TextBoxDialog-Xs-gitZd.js} +2 -2
  288. package/dist/{TextBoxDialog-CdFHdj5W.js.map → TextBoxDialog-Xs-gitZd.js.map} +1 -1
  289. package/dist/{TextboxWidget-C2n38ti5.js → TextboxWidget-BmANrs4B.js} +5 -5
  290. package/dist/{TextboxWidget-C2n38ti5.js.map → TextboxWidget-BmANrs4B.js.map} +1 -1
  291. package/dist/{TextboxWidget-DrdMC0EB.cjs → TextboxWidget-D1pZXnLn.cjs} +2 -2
  292. package/dist/{TextboxWidget-DrdMC0EB.cjs.map → TextboxWidget-D1pZXnLn.cjs.map} +1 -1
  293. package/dist/{TextfieldWidget-VeOem1w3.cjs → TextfieldWidget-CTIX-cUX.cjs} +2 -2
  294. package/dist/{TextfieldWidget-VeOem1w3.cjs.map → TextfieldWidget-CTIX-cUX.cjs.map} +1 -1
  295. package/dist/{TextfieldWidget--HTv9ddk.js → TextfieldWidget-SJaLN05z.js} +3 -3
  296. package/dist/{TextfieldWidget--HTv9ddk.js.map → TextfieldWidget-SJaLN05z.js.map} +1 -1
  297. package/dist/{TimeWidget-C9ltUWFh.cjs → TimeWidget-Dytou9_B.cjs} +2 -2
  298. package/dist/{TimeWidget-C9ltUWFh.cjs.map → TimeWidget-Dytou9_B.cjs.map} +1 -1
  299. package/dist/{TimeWidget-CPNVZaUM.js → TimeWidget-jB9OkZz4.js} +3 -3
  300. package/dist/{TimeWidget-CPNVZaUM.js.map → TimeWidget-jB9OkZz4.js.map} +1 -1
  301. package/dist/{TitleWidget-IuUVZkLh.cjs → TitleWidget-CjgUoNOz.cjs} +2 -2
  302. package/dist/{TitleWidget-IuUVZkLh.cjs.map → TitleWidget-CjgUoNOz.cjs.map} +1 -1
  303. package/dist/{TitleWidget-Cp0cb6V8.js → TitleWidget-mcKJD8dB.js} +3 -3
  304. package/dist/{TitleWidget-Cp0cb6V8.js.map → TitleWidget-mcKJD8dB.js.map} +1 -1
  305. package/dist/{ToolsTab-DGjyBWkp.js → ToolsTab-BbUbC7aQ.js} +4 -4
  306. package/dist/{ToolsTab-DGjyBWkp.js.map → ToolsTab-BbUbC7aQ.js.map} +1 -1
  307. package/dist/{ToolsTab-Bgrj0eGr.cjs → ToolsTab-DIjQdiL-.cjs} +3 -3
  308. package/dist/{ToolsTab-Bgrj0eGr.cjs.map → ToolsTab-DIjQdiL-.cjs.map} +1 -1
  309. package/dist/{TopBar-DLz-U85G.cjs → TopBar-Bn4u3OQj.cjs} +2 -2
  310. package/dist/{TopBar-DLz-U85G.cjs.map → TopBar-Bn4u3OQj.cjs.map} +1 -1
  311. package/dist/{TopBar-B48yYbtR.js → TopBar-LuMoAqrA.js} +3 -3
  312. package/dist/{TopBar-B48yYbtR.js.map → TopBar-LuMoAqrA.js.map} +1 -1
  313. package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs → UpgradeToEnterpriseDialog-BDYrclMq.cjs} +2 -2
  314. package/dist/{UpgradeToEnterpriseDialog-DtckZO3_.cjs.map → UpgradeToEnterpriseDialog-BDYrclMq.cjs.map} +1 -1
  315. package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js → UpgradeToEnterpriseDialog-XVvb43ME.js} +3 -3
  316. package/dist/{UpgradeToEnterpriseDialog-C2Ggr_Xd.js.map → UpgradeToEnterpriseDialog-XVvb43ME.js.map} +1 -1
  317. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B-k6legU.cjs +1498 -0
  318. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B-k6legU.cjs.map +1 -0
  319. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-ByJi6BSv.js +30699 -0
  320. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-ByJi6BSv.js.map +1 -0
  321. package/dist/{VWidget-Cf9MXbCl.cjs → VWidget-B22Re761.cjs} +2 -2
  322. package/dist/{VWidget-Cf9MXbCl.cjs.map → VWidget-B22Re761.cjs.map} +1 -1
  323. package/dist/{VWidget-DQGJRgAk.js → VWidget-D8c5Lci7.js} +3 -3
  324. package/dist/{VWidget-DQGJRgAk.js.map → VWidget-D8c5Lci7.js.map} +1 -1
  325. package/dist/{ValueWidget-BmXm9dYt.cjs → ValueWidget-CyN11MWT.cjs} +2 -2
  326. package/dist/{ValueWidget-BmXm9dYt.cjs.map → ValueWidget-CyN11MWT.cjs.map} +1 -1
  327. package/dist/{ValueWidget-Bk1RFjks.js → ValueWidget-SNDW9Het.js} +5 -5
  328. package/dist/{ValueWidget-Bk1RFjks.js.map → ValueWidget-SNDW9Het.js.map} +1 -1
  329. package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs → ValuelimitsbarWidget-B86GYsdL.cjs} +2 -2
  330. package/dist/{ValuelimitsbarWidget-PjCpjhsr.cjs.map → ValuelimitsbarWidget-B86GYsdL.cjs.map} +1 -1
  331. package/dist/{ValuelimitsbarWidget-C0HIBYh2.js → ValuelimitsbarWidget-Zw91SPeP.js} +5 -5
  332. package/dist/{ValuelimitsbarWidget-C0HIBYh2.js.map → ValuelimitsbarWidget-Zw91SPeP.js.map} +1 -1
  333. package/dist/{ValuelimitscolumnWidget-BTT90uyX.js → ValuelimitscolumnWidget-B9unbzmn.js} +5 -5
  334. package/dist/{ValuelimitscolumnWidget-BTT90uyX.js.map → ValuelimitscolumnWidget-B9unbzmn.js.map} +1 -1
  335. package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs → ValuelimitscolumnWidget-DPh3TEH4.cjs} +2 -2
  336. package/dist/{ValuelimitscolumnWidget-BGiDDUI_.cjs.map → ValuelimitscolumnWidget-DPh3TEH4.cjs.map} +1 -1
  337. package/dist/{ValuerangebarWidget-ClmX-qH_.cjs → ValuerangebarWidget-Dm0754rv.cjs} +2 -2
  338. package/dist/{ValuerangebarWidget-ClmX-qH_.cjs.map → ValuerangebarWidget-Dm0754rv.cjs.map} +1 -1
  339. package/dist/{ValuerangebarWidget-CcQw_XK9.js → ValuerangebarWidget-DwNzPUzz.js} +5 -5
  340. package/dist/{ValuerangebarWidget-CcQw_XK9.js.map → ValuerangebarWidget-DwNzPUzz.js.map} +1 -1
  341. package/dist/{VerticalWidget-BeDWsvP6.cjs → VerticalWidget-BAH0R-Tj.cjs} +2 -2
  342. package/dist/{VerticalWidget-BeDWsvP6.cjs.map → VerticalWidget-BAH0R-Tj.cjs.map} +1 -1
  343. package/dist/{VerticalWidget-CNtFQv3R.js → VerticalWidget-gv7hWDKU.js} +3 -3
  344. package/dist/{VerticalWidget-CNtFQv3R.js.map → VerticalWidget-gv7hWDKU.js.map} +1 -1
  345. package/dist/{VerticalboxWidget-Yxmz1SnU.js → VerticalboxWidget-CZb5ebV7.js} +6 -6
  346. package/dist/{VerticalboxWidget-Yxmz1SnU.js.map → VerticalboxWidget-CZb5ebV7.js.map} +1 -1
  347. package/dist/{VerticalboxWidget-DlokKDBD.cjs → VerticalboxWidget-F9StIQ_8.cjs} +2 -2
  348. package/dist/{VerticalboxWidget-DlokKDBD.cjs.map → VerticalboxWidget-F9StIQ_8.cjs.map} +1 -1
  349. package/dist/{Widget-LsyjS7ZS.js → Widget-DNBZcUQg.js} +2 -2
  350. package/dist/{Widget-LsyjS7ZS.js.map → Widget-DNBZcUQg.js.map} +1 -1
  351. package/dist/{Widget-HC1_yuQg.cjs → Widget-DghDRiv6.cjs} +2 -2
  352. package/dist/{Widget-HC1_yuQg.cjs.map → Widget-DghDRiv6.cjs.map} +1 -1
  353. package/dist/cmdUtilities-C5lf-N2L.js +44 -0
  354. package/dist/{cmdUtilities-BMsSNjt_.js.map → cmdUtilities-C5lf-N2L.js.map} +1 -1
  355. package/dist/cmdUtilities-DDCksp2R.cjs +2 -0
  356. package/dist/{cmdUtilities-ChD8v8-7.cjs.map → cmdUtilities-DDCksp2R.cjs.map} +1 -1
  357. package/dist/components.cjs +2 -2
  358. package/dist/components.cjs.map +1 -1
  359. package/dist/components.js +83 -83
  360. package/dist/components.js.map +1 -1
  361. package/dist/icons.cjs +1 -1
  362. package/dist/icons.js +1 -1
  363. package/dist/{index-DS1ACWVr.js → index-BUPRVmV-.js} +144 -144
  364. package/dist/index-BUPRVmV-.js.map +1 -0
  365. package/dist/{index-Nd4O4kac.cjs → index-BWTUBIkL.cjs} +7 -7
  366. package/dist/index-BWTUBIkL.cjs.map +1 -0
  367. package/dist/plugins.cjs +2 -2
  368. package/dist/plugins.cjs.map +1 -1
  369. package/dist/plugins.js +87 -85
  370. package/dist/plugins.js.map +1 -1
  371. package/dist/purify.es-BuxjWxA2.js +554 -0
  372. package/dist/purify.es-BuxjWxA2.js.map +1 -0
  373. package/dist/purify.es-d7tb6jjJ.cjs +3 -0
  374. package/dist/purify.es-d7tb6jjJ.cjs.map +1 -0
  375. package/dist/{settings-DCxXjkio.js → settings-BC-CN37t.js} +2 -2
  376. package/dist/{settings-DCxXjkio.js.map → settings-BC-CN37t.js.map} +1 -1
  377. package/dist/{settings-zRw8EylV.cjs → settings-DHUu0bEd.cjs} +2 -2
  378. package/dist/{settings-zRw8EylV.cjs.map → settings-DHUu0bEd.cjs.map} +1 -1
  379. package/dist/tools/admin.cjs +5 -5
  380. package/dist/tools/admin.cjs.map +1 -1
  381. package/dist/tools/admin.js +600 -844
  382. package/dist/tools/admin.js.map +1 -1
  383. package/dist/tools/base.cjs +1 -1
  384. package/dist/tools/base.js +6 -6
  385. package/dist/tools/calendar.cjs +1 -1
  386. package/dist/tools/calendar.js +1 -1
  387. package/dist/tools/scriptrunner.cjs +9 -9
  388. package/dist/tools/scriptrunner.cjs.map +1 -1
  389. package/dist/tools/scriptrunner.js +935 -917
  390. package/dist/tools/scriptrunner.js.map +1 -1
  391. package/dist/util.cjs +1 -1
  392. package/dist/util.js +1 -1
  393. package/dist/vue-common.css +1 -1
  394. package/dist/widgets.cjs +1 -1
  395. package/dist/widgets.js +64 -64
  396. package/package.json +18 -24
  397. package/dist/CustomIcon-Bop2mEnu.cjs +0 -2
  398. package/dist/EventListDialog-B8rnN9Zi.cjs +0 -2
  399. package/dist/EventListDialog-B8rnN9Zi.cjs.map +0 -1
  400. package/dist/EventListDialog-C2pwmD0d.js.map +0 -1
  401. package/dist/Graph-BliBYJxD.js.map +0 -1
  402. package/dist/Graph-DxC2MPYf.cjs +0 -2
  403. package/dist/Graph-DxC2MPYf.cjs.map +0 -1
  404. package/dist/Layout-DvBekli8.cjs +0 -2
  405. package/dist/Openc3Screen-CD3C_EUo.cjs.map +0 -1
  406. package/dist/Openc3Screen-Cqm5Xtd-.js.map +0 -1
  407. package/dist/PluginsTab-C7PH2Wym.js.map +0 -1
  408. package/dist/PluginsTab-xzPlEMYj.cjs +0 -6
  409. package/dist/PluginsTab-xzPlEMYj.cjs.map +0 -1
  410. package/dist/ScriptChooser-ahp4Tu3O.js.map +0 -1
  411. package/dist/ScriptChooser-ma6P0WuM.cjs +0 -2
  412. package/dist/ScriptChooser-ma6P0WuM.cjs.map +0 -1
  413. package/dist/SimpleTextDialog-BCNn5FZh.cjs.map +0 -1
  414. package/dist/SimpleTextDialog-D2mEDvGY.js.map +0 -1
  415. package/dist/TargetPacketItemChooser-CAl-fNql.cjs +0 -2
  416. package/dist/TargetPacketItemChooser-CAl-fNql.cjs.map +0 -1
  417. package/dist/TargetPacketItemChooser-CXpSx-eA.js.map +0 -1
  418. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs +0 -1498
  419. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs.map +0 -1
  420. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js +0 -30611
  421. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js.map +0 -1
  422. package/dist/cmdUtilities-BMsSNjt_.js +0 -46
  423. package/dist/cmdUtilities-ChD8v8-7.cjs +0 -2
  424. package/dist/index-DS1ACWVr.js.map +0 -1
  425. package/dist/index-Nd4O4kac.cjs.map +0 -1
  426. package/dist/purify.es-GHnZTJ9O.cjs +0 -3
  427. package/dist/purify.es-GHnZTJ9O.cjs.map +0 -1
  428. package/dist/purify.es-eYFoHPwR.js +0 -529
  429. package/dist/purify.es-eYFoHPwR.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginsTab-C7PH2Wym.js","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/plugins/PluginList.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 || 'https://store.openc3.com'))\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-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\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 closeDialog: function () {\n this.isDialogOpen = false\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 { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\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'],\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 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-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 />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\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 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 editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n },\n}\n</script>\n\n<style scoped>\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\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 <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\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 { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n api: new OpenC3Api(),\n file: null,\n currentPlugin: 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-cmdqueue', // Enterprise only\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-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\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 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","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","newValue","oldValue","that","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_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs"),e=require("vue"),x=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const A=require("./SimpleTextDialog-BCNn5FZh.cjs"),k=require("./tools/admin.cjs"),M=require("./settings-zRw8EylV.cjs"),P=require("./format-B22VpiOS.cjs"),j="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.gi,_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(j).then(t=>this._storeUrl=t||"https://store.openc3.com")}},z={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(t){this.showDialog=t,this.$emit("update:modelValue",t)}}},methods:{openDialog:function(){this.isDialogOpen=!0},closeDialog:function(){this.isDialogOpen=!1},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"],F={key:0},R=["textContent"],H={class:"mt-3 text-caption font-italic"};function G(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-badge"),_=e.resolveComponent("v-card-subtitle"),v=e.resolveComponent("v-img"),d=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(t.$slots,"activator",{props:{onClick:l.openDialog}}),e.createVNode(g,{modelValue:l.isDialogOpen,"onUpdate:modelValue":o[2]||(o[2]=w=>l.isDialogOpen=w),"max-width":"500"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(f,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",{textContent:e.toDisplayString(t.title)},null,8,q),e.createVNode(a),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:w})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(w)),[e.createVNode(r,{href:t.storeLink,target:"_blank",icon:"mdi-open-in-new",size:"small",variant:"plain"},null,8,["href"])],16)]),default:e.withCtx(()=>[o[3]||(o[3]=e.createElementVNode("span",null," View at store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close-box",variant:"text",density:"compact",onClick:l.closeDialog},null,8,["onClick"])]),_:1}),e.createVNode(_,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1),e.createVNode(a),t.verified?(e.openBlock(),e.createElementBlock("div",F,[o[4]||(o[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(()=>[t.image_url?(e.openBlock(),e.createBlock(v,{key:0,src:t.image_url},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{textContent:e.toDisplayString(t.description)},null,8,R),e.createElementVNode("div",H,"License: "+e.toDisplayString(t.license),1),e.createVNode(d,{modelValue:t.checksum,"onUpdate:modelValue":o[1]||(o[1]=w=>t.checksum=w),label:"SHA256",variant:"solo",density:"compact","hide-details":"",readonly:""},{append:e.withCtx(()=>[e.createVNode(s,{modelValue:n.showCopiedTooltip,"onUpdate:modelValue":o[0]||(o[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(()=>[o[5]||(o[5]=e.createElementVNode("span",null,"Copied!",-1))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(p,{class:"justify-start px-6"},{default:e.withCtx(()=>[t.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:t.repository,target:"_blank"},null,8,["href"]),e.createVNode(r,{text:"Homepage","append-icon":"mdi-open-in-new",variant:"outlined",href:t.homepage,target:"_blank"},null,8,["href"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}const D=x._export_sfc(z,[["render",G]]),J={components:{PluginDetailsDialog:D},mixins:[N],emits:["triggerInstall"],methods:{install:function(){this.$emit("triggerInstall",this.plugin)}}},K=["textContent"];function Q(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-badge"),s=e.resolveComponent("v-card-title"),f=e.resolveComponent("v-card-subtitle"),m=e.resolveComponent("v-img"),_=e.resolveComponent("v-card-text"),v=e.resolveComponent("v-btn"),d=e.resolveComponent("v-card-actions"),C=e.resolveComponent("v-card"),p=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createBlock(p,e.mergeProps(t.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(s,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title)+" ",1),e.createVNode(a),t.verified?(e.openBlock(),e.createBlock(r,{key:0,inline:"",icon:"mdi-shield-check",color:"success"})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(f,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1)]),_:1}),e.createVNode(_,null,{default:e.withCtx(()=>[t.image_url?(e.openBlock(),e.createBlock(m,{key:0,src:t.image_url,"max-height":"160"},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"truncate-description":!0,"truncate-2":!!t.image_url,"truncate-10":!t.image_url}),textContent:e.toDisplayString(t.description)},null,10,K)]),_:1}),e.createVNode(a),e.createVNode(d,{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})]),_:1},16)]),_:1},16,["onTriggerInstall"])}const W=x._export_sfc(J,[["render",Q],["__scopeId","data-v-83d9d7a7"]]),y="store_url",b="DEFAULT",X={mixins:[M.Settings],props:{modelValue:Boolean},emits:["update:modelValue","update:storeUrl"],data(){return{showDialog:!1,storeUrl:"",rules:{required:t=>!!t||"Required",url:t=>{try{new URL(t)}catch{return"Not a valid URL"}return!0}}}},watch:{modelValue:function(t){t&&(this.showDialog=t)},showDialog:function(t){t||this.$emit("update:modelValue",t)}},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(t){t?this.storeUrl=t:this.storeUrl="https://store.openc3.com"}}};function Y(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-alert"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),v=e.resolveComponent("v-card-actions"),d=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(C,{modelValue:n.showDialog,"onUpdate:modelValue":o[4]||(o[4]=p=>n.showDialog=p),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),o[5]||(o[5]=e.createElementVNode("span",null,"Plugin Store Settings",-1)),e.createVNode(a)]),_:1}),e.createVNode(d,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(s,{modelValue:t.errorLoading,"onUpdate:modelValue":o[0]||(o[0]=p=>t.errorLoading=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error loading previous configuration due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.errorSaving,"onUpdate:modelValue":o[1]||(o[1]=p=>t.errorSaving=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error saving due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.successSaving,"onUpdate:modelValue":o[2]||(o[2]=p=>t.successSaving=p),type:"success",closable:"",density:"compact"},{default:e.withCtx(()=>[...o[6]||(o[6]=[e.createTextVNode(" Saved! ",-1)])]),_:1},8,["modelValue"]),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(f,{modelValue:n.storeUrl,"onUpdate:modelValue":o[3]||(o[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(_,{color:"success",variant:"text",text:"Save","data-test":"save-store-settings-btn",onClick:l.save},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const Z=x._export_sfc(X,[["render",Y]]),$={components:{PluginCard:W,PluginStoreSettingsDialog:Z},emits:["close","triggerInstall"],data(){return{api:new h.gi,search:"",verifiedOnly:!1,showSettingsDialog:!1,plugins:[]}},computed:{filteredPlugins:function(){let t=this.plugins;return this.verifiedOnly&&(t=t.filter(o=>o.verified)),this.search.length&&(t=t.filter(o=>o.title.toLowerCase().includes(this.search.toLowerCase()))),t}},mounted:function(){this.fetchPluginStoreData()},methods:{fetchPluginStoreData:function(){h.hi.get("/openc3-api/pluginstore").then(t=>{this.plugins=t.data})},close:function(){this.$emit("close")},install:function(t){this.$emit("triggerInstall",t),this.close()},openSettings:function(){this.showSettingsDialog=!0},updatePluginStore:function(){this.api.update_plugin_store().then(t=>{this.fetchPluginStoreData()})}}},ee={class:"d-flex justify-content-space-between"},te={class:"d-inline-flex align-center w-100"};function oe(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-switch"),_=e.resolveComponent("plugin-card"),v=e.resolveComponent("v-col"),d=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",ee,[o[4]||(o[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(s,{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(()=>[o[3]||(o[3]=e.createElementVNode("span",null," Open store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close",variant:"text",onClick:l.close},null,8,["onClick"])]),e.createElementVNode("div",te,[e.createVNode(f,{modelValue:n.search,"onUpdate:modelValue":o[0]||(o[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":o[1]||(o[1]=g=>n.verifiedOnly=g),label:"Verified only",density:"compact","hide-details":"",class:"ml-4"},null,8,["modelValue"])]),e.createVNode(a),o[5]||(o[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(d,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(_,e.mergeProps({ref_for:!0},g,{onTriggerInstall:l.install}),null,16,["onTriggerInstall"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),e.createVNode(V,{modelValue:n.showSettingsDialog,"onUpdate:modelValue":o[2]||(o[2]=g=>n.showSettingsDialog=g),"onUpdate:storeUrl":l.updatePluginStore},null,8,["modelValue","onUpdate:storeUrl"])],64)}const ne=x._export_sfc($,[["render",oe]]),le={components:{PluginDetailsDialog:D},mixins:[N],props:{targets:{type:Array,default:()=>[]},isModified:Boolean},emits:["edit","delete","upgrade"],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.hi.post(`/openc3-api/packages/${this.name}/download`).then(t=>{const o=window.atob(t.data.contents),i=new Uint8Array(o.length);for(let l=0;l<o.length;++l)i[l]=o.charCodeAt(l);const c=new Blob([i],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(c),n.setAttribute("download",t.data.filename),n.click()})},downloadTarget:function(t){h.hi.post(`/openc3-api/targets/${t}/download`).then(o=>{const i=window.atob(o.data.contents),c=new Uint8Array(i.length);for(let a=0;a<i.length;++a)c[a]=i.charCodeAt(a);const n=new Blob([c],{type:"application/zip"}),l=document.createElement("a");l.href=URL.createObjectURL(n),l.setAttribute("download",o.data.filename),l.click()})},edit:function(){this.$emit("edit")},upgrade:function(){this.$emit("upgrade")},deletePrompt:function(){this.showCard=!1,this.$emit("delete")}}},ie=["textContent"],se={class:"text-subtitle-2 v-list-item-subtitle pl-0"},re={key:0},ae=["onClick","textContent"],ce=["textContent"];function ue(t,o,i,c,n,l){var v;const a=e.resolveComponent("v-img"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-list-item"),f=e.resolveComponent("v-list"),m=e.resolveComponent("v-menu"),_=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("tr",{class:e.normalizeClass({"cursor-pointer":t.hasStoreListing}),"data-test":"plugin-list-item",onClick:o[0]||(o[0]=(...d)=>l.openDetails&&l.openDetails(...d))},[e.createElementVNode("td",null,[t.image_url?(e.openBlock(),e.createBlock(a,{key:0,src:t.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,ie),e.createElementVNode("div",se,[i.isModified?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" * ")],64)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.name),1)]),(v=i.targets)!=null&&v.length?(e.openBlock(),e.createElementBlock("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.targets,(d,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"mr-2"},[d.modified?(e.openBlock(),e.createElementBlock("a",{key:0,style:{cursor:"pointer"},onClick:e.withModifiers(p=>l.downloadTarget(d.name),["prevent"]),textContent:e.toDisplayString(d.name)},null,8,ae)):(e.openBlock(),e.createElementBlock("span",{key:1,textContent:e.toDisplayString(d.name)},null,8,ce))]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createVNode(m,null,{activator:e.withCtx(({props:d})=>[e.createVNode(r,e.mergeProps(d,{icon:"mdi-dots-horizontal","data-test":"plugin-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(s,{title:"Download","prepend-icon":"mdi-download","data-test":"download-plugin",onClick:l.downloadPlugin},null,8,["onClick"]),e.createVNode(s,{title:"Edit Details","prepend-icon":"mdi-pencil","data-test":"edit-plugin",onClick:l.edit},null,8,["onClick"]),e.createVNode(s,{title:"Upgrade","prepend-icon":"mdi-update","data-test":"upgrade-plugin",onClick:l.upgrade},null,8,["onClick"]),e.createVNode(s,{title:"Delete","prepend-icon":"mdi-delete","data-test":"delete-plugin",onClick:l.deletePrompt},null,8,["onClick"])]),_:1})]),_:1})])],2),e.createVNode(_,e.mergeProps({modelValue:n.showCard,"onUpdate:modelValue":o[1]||(o[1]=d=>n.showCard=d)},t.plugin,{onTriggerUninstall:l.deletePrompt}),null,16,["modelValue","onTriggerUninstall"])],64)}const de=x._export_sfc(le,[["render",ue]]),pe={components:{PluginListItem:de},props:{plugins:{type:Array,required:!0},targets:{type:Object,required:!0},showDefaultTools:{type:Boolean,default:!1},defaultPlugins:{type:Array,required:!0}},emits:["edit","delete","upgrade"],data(){return{showPluginDetails:!1,detailPlugin:null}},computed:{shownPlugins(){const t=[],o=[];return this.plugins.forEach(i=>{const l=i.name.split("__")[0].split("-").slice(0,-1).join("-");this.defaultPlugins.includes(l)?o.push(i):t.push(i)}),t.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),this.showDefaultTools?(o.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),t.concat(o)):t}},methods:{showDetails:function(t){this.detailPlugin=t,this.showPluginDetails=!0},pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},editPlugin:function(t){this.$emit("edit",t)},upgradePlugin(t){this.$emit("upgrade",t)},deletePrompt:function(t){this.$emit("delete",t)}}};function me(t,o,i,c,n,l){const a=e.resolveComponent("plugin-list-item"),r=e.resolveComponent("v-data-table");return e.openBlock(),e.createBlock(r,{headers:[],items:l.shownPlugins,density:"compact",class:"list","data-test":"plugin-list"},{item:e.withCtx(({item:s})=>[e.createVNode(a,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)}),null,16,["targets","is-modified","onEdit","onUpgrade","onDelete"])]),_:1},8,["items"])}const ge=x._export_sfc(pe,[["render",me],["__scopeId","data-v-94f3dd91"]]),he={components:{PluginDialog:k.PluginDialog,PluginList:ge,PluginStore:ne,ModifiedPluginDialog:k.ModifiedPluginDialog,SimpleTextDialog:A.SimpleTextDialog},data(){return{api:new h.gi,file:null,currentPlugin: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-cmdqueue","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-cosmos-tool-logexplorer","openc3-enterprise-tool-base","openc3-tool-base"]}},watch:{showPluginDialog:function(t,o){t===!1&&(this.file=null,this.$refs.fileInput.value=null)}},created(){this.api.update_plugin_store()},mounted(){this.update(),this.updateProcesses();const t=this;window.onpopstate=function(){t.showPluginStore&&(t.showPluginStore=!1,history.go(1))}},methods:{pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},showOutput:function(t){this.processOutput=t.output,this.showProcessOutput=!0},update:function(){h.hi.get("/openc3-api/plugins/all").then(t=>{this.plugins=Object.entries(t.data).map(([o,i])=>i)}),h.hi.get("/openc3-api/targets_modified").then(t=>{this.targets=t.data})},updateProcesses:function(){h.hi.get("openc3-api/process_status/plugin_?substr=true").then(t=>{this.processes=t.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},formatDate(t){return P.format(P.toDate(parseInt(t)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},upload:function(t=null,o=null){const i=t?"put":"post",c=t?`/openc3-api/plugins/${t}`:"/openc3-api/plugins",n=new FormData;o===null?n.append("plugin",this.file,this.file.name):n.append("store_id",o.id);let l=this;h.hi[i](c,{data:n,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);l.progress=s}}).then(r=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let s=null;r.data.existing_plugin_txt_lines!==void 0&&(s=r.data.existing_plugin_txt_lines.join(`
2
- `));let f=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=f,this.existingPluginTxt=s,this.showPluginDialog=!0,this.file=void 0}).catch(r=>{this.currentPlugin=null,this.file=void 0})},pluginCallback:function(t){this.showPluginDialog=!1,this.currentPlugin!==null&&(t.name=this.currentPlugin),this.pluginHashTmp=t,this.isModified(this.currentPlugin)?(this.pluginDelete=!1,this.showModifiedPluginDialog=!0):this.pluginInstall()},modifiedSubmit:async function(t){if(t===!0)for(let o of this.pluginTargets(this.currentPlugin))o.modified==!0&&await h.hi.post(`/openc3-api/targets/${o.name}/delete_modified`);this.pluginDelete?this.deletePlugin(this.currentPlugin):this.pluginInstall()},pluginInstall:function(){h.hi.post(`/openc3-api/plugins/install/${this.pluginName}`,{data:{plugin_hash:JSON.stringify(this.pluginHashTmp)}}).then(t=>{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(t){h.hi.get(`/openc3-api/plugins/${t}`).then(o=>{let i=null;o.data.existing_plugin_txt_lines!==void 0&&(i=o.data.existing_plugin_txt_lines.join(`
4
- `)),this.pluginName=o.data.name,this.variables=o.data.variables,this.pluginTxt=o.data.plugin_txt_lines.join(`
5
- `),this.existingPluginTxt=i,this.showPluginDialog=!0})},deletePrompt:function(t){this.$dialog.confirm(`Are you sure you want to remove: ${t}`,{okText:"Delete",cancelText:"Cancel"}).then(o=>{this.isModified(t)?(this.currentPlugin=t,this.pluginDelete=!0,this.showModifiedPluginDialog=!0):this.deletePlugin(t)})},deletePlugin:function(t){this.alert=`Removing plugin ${t} ...`,this.alertType="success",this.showAlert=!0,h.hi.delete(`/openc3-api/plugins/${t}`).then(o=>{setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3)}),this.update()},upgradePlugin(t){this.file=null,this.currentPlugin=t,this.progress=0,this.$refs.fileInput.click()},selectFile(){this.file=null,this.currentPlugin=null,this.progress=0,this.$refs.fileInput.click()},fileChange(t){const o=t.target.files;if(o.length>0)if(this.file=o[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("-"),c=i.findIndex(a=>a.includes(".")),n=i.slice(0,c).join("-");i=this.currentPlugin.split("-"),c=i.findIndex(a=>a.includes("."));let l=i.slice(0,c).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}}},fe={class:"mt-2"},_e=["textContent"],ve=["textContent"];function Ce(t,o,i,c,n,l){const a=e.resolveComponent("v-btn"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-col"),f=e.resolveComponent("rux-progress"),m=e.resolveComponent("v-row"),_=e.resolveComponent("v-divider"),v=e.resolveComponent("v-alert"),d=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"),S=e.resolveComponent("v-switch"),T=e.resolveComponent("plugin-list"),B=e.resolveComponent("plugin-dialog"),E=e.resolveComponent("modified-plugin-dialog"),U=e.resolveComponent("simple-text-dialog"),I=e.resolveComponent("plugin-store"),O=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(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(a,{"append-icon":"mdi-store",onClick:l.openStore},{default:e.withCtx(()=>[...o[9]||(o[9]=[e.createTextVNode(" Browse Plugins ",-1)])]),_:1},8,["onClick"]),e.createVNode(a,{"append-icon":"mdi-paperclip",class:"mx-2",onClick:l.selectFile},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode(" Install From File ",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:o[0]||(o[0]=(...u)=>l.fileChange&&l.fileChange(...u))},null,544),o[14]||(o[14]=e.createElementVNode("br",null,null,-1)),e.createElementVNode("p",fe,[o[12]||(o[12]=e.createTextVNode(" Note: Use ",-1)),e.createVNode(r,null,{default:e.withCtx(()=>[...o[11]||(o[11]=[e.createTextVNode(" mdi-dots-horizontal ",-1)])]),_:1}),o[13]||(o[13]=e.createTextVNode(" in the Installed Plugins list to upgrade existing plugins ",-1))])]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(f,{value:n.progress},null,8,["value"])]),_:1})]),_:1}),e.createVNode(m,{"no-gutters":"",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{align:"right",class:"mr-2"},{default:e.withCtx(()=>[...o[15]||(o[15]=[e.createElementVNode("div",null,"* indicates a modified plugin",-1),e.createElementVNode("div",null,"Click target link to download modifications",-1)])]),_:1})]),_:1}),e.createVNode(_),e.createVNode(v,{modelValue:n.showAlert,"onUpdate:modelValue":o[1]||(o[1]=u=>n.showAlert=u),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(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode(" Process List ",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...o[17]||(o[17]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.processes,u=>(e.openBlock(),e.createElementBlock("div",{key:u.name},[e.createVNode(g,null,{append:e.withCtx(()=>[u.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:L})=>[e.createVNode(a,e.mergeProps({ref_for:!0},L,{icon:"mdi-eye",variant:"text","aria-label":"Show Output","data-test":"show-output",onClick:Ve=>l.showOutput(u)}),null,16,["onClick"])]),default:e.withCtx(()=>[o[18]||(o[18]=e.createElementVNode("span",null," Show Output ",-1))]),_:2},1024))]),default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(u.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${u.process_type}: ${u.detail} - ${u.state}`)},null,10,_e)]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+l.formatDate(u.updated_at))},null,8,ve)]),_:2},1024)]),_:2},1024),e.createVNode(_)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode(" Installed Plugins ",-1)])]),_:1}),e.createVNode(s,{class:"v-col-auto"},{default:e.withCtx(()=>[e.createVNode(S,{modelValue:n.showDefaultTools,"onUpdate:modelValue":o[2]||(o[2]=u=>n.showDefaultTools=u),label:"Show Default Tools",density:"compact","hide-details":"","data-test":"show-default-tools"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(T,{plugins:n.plugins,targets:n.targets,"show-default-tools":n.showDefaultTools,"default-plugins":n.defaultPlugins,onEdit:l.editPlugin,onUpgrade:l.upgradePlugin,onDelete:l.deletePrompt},null,8,["plugins","targets","show-default-tools","default-plugins","onEdit","onUpgrade","onDelete"]),n.showPluginDialog?(e.openBlock(),e.createBlock(B,{key:1,modelValue:n.showPluginDialog,"onUpdate:modelValue":o[3]||(o[3]=u=>n.showPluginDialog=u),"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(E,{key:2,modelValue:n.showModifiedPluginDialog,"onUpdate:modelValue":o[4]||(o[4]=u=>n.showModifiedPluginDialog=u),"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(U,{modelValue:n.showProcessOutput,"onUpdate:modelValue":o[5]||(o[5]=u=>n.showProcessOutput=u),title:"Process Output",text:n.processOutput},null,8,["modelValue","text"]),e.createVNode(O,{modelValue:n.showPluginStore,"onUpdate:modelValue":o[8]||(o[8]=u=>n.showPluginStore=u),fullscreen:""},{default:e.withCtx(()=>[e.createVNode(I,{onClose:o[6]||(o[6]=()=>n.showPluginStore=!1),onTriggerInstall:o[7]||(o[7]=u=>l.upload(null,u))})]),_:1},8,["modelValue"])])}const we=x._export_sfc(he,[["render",Ce],["__scopeId","data-v-f1927f60"]]);exports.default=we;
6
- //# sourceMappingURL=PluginsTab-xzPlEMYj.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginsTab-xzPlEMYj.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/plugins/PluginList.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 || 'https://store.openc3.com'))\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-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\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 closeDialog: function () {\n this.isDialogOpen = false\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 { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\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'],\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 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-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 />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\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 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 editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n },\n}\n</script>\n\n<style scoped>\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\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 <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\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 { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n api: new OpenC3Api(),\n file: null,\n currentPlugin: 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-cmdqueue', // Enterprise only\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-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\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 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","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","a","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","newValue","oldValue","that","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_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"oaAoBMA,EAAc,YACpBC,EAAe,CACb,MAAO,CACL,GAAI,OACJ,KAAM,OACN,MAAO,OAEP,OAAQ,OAER,YAAa,OACb,SAAU,MACV,UAAW,OACX,QAAS,OAGT,SAAU,QACV,SAAU,OACV,WAAY,OACZ,QAAS,OACT,SAAU,MACd,EACE,KAAM,UAAY,CAChB,MAAO,CACL,KAAM,IAAIC,EAAAA,GACV,UAAW,EACjB,CACE,EACA,SAAU,CACR,OAAQ,UAAY,CAClB,MAAO,CACL,GAAI,KAAK,GACT,KAAM,KAAK,KACX,MAAO,KAAK,MAEZ,OAAQ,KAAK,OAEb,YAAa,KAAK,YAClB,SAAU,KAAK,SACf,UAAW,KAAK,UAChB,QAAS,KAAK,QAGd,SAAU,KAAK,SACf,SAAU,KAAK,SACf,WAAY,KAAK,WACjB,QAAS,KAAK,QACd,SAAU,KAAK,QACvB,CACI,EACA,UAAW,UAAY,CACrB,OAAI,KAAK,gBACA,IAAI,IAAI,mBAAmB,KAAK,EAAE,GAAI,KAAK,SAAS,EAEtD,IACT,EACA,gBAAiB,UAAY,CAC3B,MAAO,CAAC,CAAC,KAAK,EAChB,EACA,kBAAmB,UAAY,CAC7B,MAAO,CAAC,CAAC,KAAK,IAChB,CACJ,EACE,QAAS,UAAY,CACnB,KAAK,KACF,YAAYF,CAAW,EACvB,KAAMG,GAAc,KAAK,UAAYA,GAAY,0BAA2B,CACjF,CACF,EC6DKC,EAAU,CACb,OAAQ,CAACH,CAAW,EACpB,MAAO,CACL,WAAY,SAEd,MAAO,CAAC,iBAAkB,mBAAoB,mBAAmB,EACjE,MAAO,CACL,MAAO,CACL,WAAY,GACZ,kBAAmB,EACrB,CACF,EACA,SAAU,CACR,aAAc,CACZ,IAAK,UAAY,CACf,OAAO,KAAK,YAAc,KAAK,UACjC,EACA,IAAK,SAAUI,EAAK,CAClB,KAAK,WAAaA,EAClB,KAAK,MAAM,oBAAqBA,CAAG,CACrC,IAGJ,QAAS,CACP,WAAY,UAAY,CACtB,KAAK,aAAe,EACtB,EACA,YAAa,UAAY,CACvB,KAAK,aAAe,EACtB,EACA,QAAS,UAAY,CACnB,KAAK,MAAM,iBAAkB,KAAK,MAAM,CAC1C,EACA,UAAW,UAAY,CACrB,KAAK,MAAM,mBAAoB,KAAK,MAAM,CAC5C,EACA,aAAc,UAAY,CACxB,UAAU,UAAU,UAAU,KAAK,QAAQ,EAC3C,KAAK,kBAAoB,GACzB,WAAW,IAAM,CACf,KAAK,kBAAoB,EAC3B,EAAG,GAAI,CACT,EAEJ,gDAhHaC,EAAA,CAAA,MAAM,+BAA+B,ofA7DhDC,aAA+DC,EAAA,OAAA,YAAA,CAAvC,eAAkBC,EAAA,UAAU,IACpDC,EAAAA,YA0HWC,EAAA,YA1HQF,EAAA,kDAAAA,EAAA,aAAYG,GAAE,YAAU,0BACzC,IAwHS,CAxHTF,EAAAA,YAwHSG,EAAA,KAAA,mBAvHP,IAwBY,CAxBZH,EAAAA,YAwBYI,EAAA,CAxBD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZJ,EAAAA,YAAYK,CAAA,EACZC,EAAAA,mBAAuB,OAAA,CAAjB,YAAAC,EAAAA,gBAAcT,EAAN,KAAK,aACnBE,EAAAA,YAAYK,CAAA,EACZL,EAAAA,YAaYQ,EAAA,CAbD,SAAS,KAAK,EAAA,CACZ,UAASC,EAAAA,QAClB,CAQM,CATgB,MAAAC,KAAK,CAC3BJ,EAAAA,mBAQM,4CAROI,CAAK,CAAA,EAAA,CAChBV,EAAAA,YAMEW,EAAA,CALC,KAAMb,EAAA,UACP,OAAO,SACP,KAAK,kBACL,KAAK,QACL,QAAQ,mDAId,IAAuC,CAAvCc,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAN,EAAAA,mBAAuC,YAAjC,6BAA0B,EAAA,WAElCN,EAAAA,YAKEW,EAAA,CAJA,KAAK,gBACL,QAAQ,OACR,QAAQ,UACP,QAAOZ,EAAA,yCAGZC,EAAAA,YASkBa,EAAA,CARhB,MAAM,mDAAmD,EAAA,mBAEzD,IAAuB,CAAvBP,EAAAA,mBAAuB,6BAAfR,EAAA,MAAM,EAAA,CAAA,EACdE,EAAAA,YAAYK,CAAA,EACDP,EAAA,wBAAXgB,EAAAA,mBAGM,MAAAC,EAAA,+BAHe,aAEnB,EAAA,GAAAf,EAAAA,YAA0DgB,EAAA,CAAjD,OAAA,GAAO,KAAK,mBAAmB,MAAM,mDAuBlDhB,EAAAA,YA+BciB,EAAA,KAAA,mBA9BZ,IAA2C,CAA9BnB,EAAA,yBAAboB,EAAAA,YAA2CC,EAAA,OAAlB,IAAKrB,EAAA,wDAC9BQ,EAAAA,mBAA4B,MAAA,CAAvB,YAAAC,EAAAA,gBAAoBT,EAAZ,WAAW,aACxBQ,qBAAuE,MAAvEV,EAA2C,8BAAYE,EAAA,OAAO,EAAA,CAAA,EAC9DE,EAAAA,YA0BeoB,EAAA,YAzBJtB,EAAA,8CAAAA,EAAA,SAAQI,GACjB,MAAM,SACN,QAAQ,OACR,QAAQ,UACR,eAAA,GACA,SAAA,KAEW,iBACT,IAeY,CAfZF,EAAAA,YAeYQ,EAAA,YAdDa,EAAA,uDAAAA,EAAA,kBAAiBnB,GAC1B,SAAS,MACR,gBAAe,KAEL,UAASO,EAAAA,QAClB,CAME,CAPoB,MAAAC,KAAK,CAC3BV,cAMEW,EANFW,EAAAA,WACUZ,EAAK,CACb,KAAK,mBACL,QAAQ,OACR,QAAQ,UACP,QAAOX,EAAA,wDAGZ,IAAoB,CAApBa,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAN,EAAAA,mBAAoB,YAAd,UAAO,EAAA,6DAMrBN,EAAAA,YA8BiBuB,EAAA,CA9BD,MAAM,oBAAoB,EAAA,mBACxC,IAOE,CANMzB,EAAA,iCADRoB,EAAAA,YAOEP,EAAA,OALA,KAAK,YACL,cAAY,oBACZ,QAAQ,WACR,MAAM,MACL,QAAOZ,EAAA,+CAEVmB,EAAAA,YAMEP,EAAA,OAJA,KAAK,UACL,cAAY,kBACZ,QAAQ,WACP,QAAOZ,EAAA,8BAEVC,EAAAA,YAMEW,EAAA,CALA,KAAK,aACL,cAAY,kBACZ,QAAQ,WACP,KAAMb,EAAA,WACP,OAAO,2BAETE,EAAAA,YAMEW,EAAA,CALA,KAAK,WACL,cAAY,kBACZ,QAAQ,WACP,KAAMb,EAAA,SACP,OAAO,iHC9DZJ,EAAU,CACb,WAAY,CACV,oBAAA8B,GAEF,OAAQ,CAACjC,CAAW,EACpB,MAAO,CAAC,gBAAgB,EACxB,QAAS,CACP,QAAS,UAAY,CACnB,KAAK,MAAM,iBAAkB,KAAK,MAAM,CAC1C,EAEJ,oZApEE,OAAAkC,YAAA,EAAAP,cAkDwBQ,EAlDxBJ,EAAAA,WAA+BxB,SAAM,CAAG,iBAAiBC,EAAA,OAAO,CAAA,EAAA,CACnD,UAASU,EAAAA,QAClB,CA8CS,CA/Ca,MAAAC,KAAK,CAC3BV,cA8CSG,EA9CTmB,EAAAA,WAAgBZ,EAAK,CAAE,OAAO,MAAM,MAAM,0CACxC,IASe,CATfV,EAAAA,YASe2B,EAAA,CATD,MAAM,mDAAmD,EAAA,mBACrE,IAAW,CAARC,EAAAA,gBAAArB,EAAAA,gBAAAT,EAAA,KAAK,EAAG,IACX,CAAA,EAAAE,EAAAA,YAAYK,CAAA,EAEJP,EAAA,wBADRoB,EAAAA,YAKEF,EAAA,OAHA,OAAA,GACA,KAAK,mBACL,MAAM,iDAGVhB,EAAAA,YAckBa,EAAA,CAbhB,MAAM,mDAAmD,EAAA,mBAEzD,IAAuB,CAAvBP,EAAAA,mBAAuB,6BAAfR,EAAA,MAAM,EAAA,CAAA,UAYhBE,EAAAA,YAUciB,EAAA,KAAA,mBATZ,IAA4D,CAA/CnB,EAAA,yBAAboB,EAAAA,YAA4DC,EAAA,OAAnC,IAAKrB,EAAA,UAAW,aAAW,oDACpDQ,EAAAA,mBAOE,MAAA,CANC,MAAKuB,EAAAA,eAAA,0CAA8E/B,EAAA,yBAAyCA,EAAA,YAK7H,YAAAS,EAAAA,gBAAoBT,EAAZ,WAAW,sBAGvBE,EAAAA,YAAYK,CAAA,EACZL,EAAAA,YAOiBuB,EAAA,CAPD,MAAM,WAAW,EAAA,mBAC/B,IAKE,CALFvB,EAAAA,YAKEW,EAAA,CAJA,KAAK,UACL,cAAY,kBACZ,QAAQ,WACP,wBAAYZ,EAAA,QAAO,CAAA,MAAA,CAAA,kJCD1B+B,EAAe,YACfC,EAAgB,UACjBrC,EAAU,CACb,OAAQ,CAACsC,EAAAA,QAAQ,EACjB,MAAO,CACL,WAAY,SAEd,MAAO,CAAC,oBAAqB,iBAAiB,EAC9C,MAAO,CACL,MAAO,CACL,WAAY,GACZ,SAAU,GACV,MAAO,CACL,SAAWC,GAAU,CAAC,CAACA,GAAS,WAChC,IAAMA,GAAU,CACd,GAAI,CACF,IAAI,IAAIA,CAAK,CACf,MAAY,CACV,MAAO,iBACT,CACA,MAAO,EACT,EAEJ,CACF,EACA,MAAO,CACL,WAAY,SAAUtC,EAAK,CACrBA,IACF,KAAK,WAAaA,EAEtB,EACA,WAAY,SAAUA,EAAK,CACpBA,GACH,KAAK,MAAM,oBAAqBA,CAAG,CAEvC,GAEF,QAAS,UAAY,CACnB,KAAK,YAAYmC,EAAc,CAAE,MAAOC,CAAY,CAAG,CACzD,EACA,QAAS,CACP,MAAO,CACL,KAAK,YAAYD,EAAc,KAAK,SAAU,CAAE,MAAOC,EAAe,EACtE,KAAK,MAAM,kBAAmB,KAAK,QAAQ,EAC3C,KAAK,WAAa,EACpB,EACA,aAAc,SAAUG,EAAU,CAC5BA,EACF,KAAK,SAAWA,EAGhB,KAAK,SAAW,0BAEpB,EAEJ,sWAnGEhB,EAAAA,YAsCWjB,EAAA,YAtCQoB,EAAA,gDAAAA,EAAA,WAAUnB,GAAE,MAAM,0BACnC,IAIY,CAJZF,EAAAA,YAIYI,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZJ,EAAAA,YAAYK,CAAA,EACZO,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAN,qBAAkC,YAA5B,wBAAqB,EAAA,GAC3BN,EAAAA,YAAYK,CAAA,UAEdL,EAAAA,YA+BSG,EAAA,CA/BD,MAAM,MAAM,EAAA,mBAClB,IAEU,CAFVH,EAAAA,YAEUmC,EAAA,YAFQrC,EAAA,kDAAAA,EAAA,aAAYI,GAAE,KAAK,QAAQ,SAAA,GAAS,QAAQ,8BAAU,IAC1B,CAD0B0B,EAAAA,gBAAA,kEACvB9B,EAAA,SAAS,EAAA,CAAA,2BAE1DE,EAAAA,YAEUmC,EAAA,YAFQrC,EAAA,iDAAAA,EAAA,YAAWI,GAAE,KAAK,QAAQ,SAAA,GAAS,QAAQ,8BAAU,IACjD,CADiD0B,EAAAA,gBAAA,0CAC9C9B,EAAA,SAAS,EAAA,CAAA,2BAElCE,EAAAA,YAOUmC,EAAA,YANCrC,EAAA,mDAAAA,EAAA,cAAaI,GACtB,KAAK,UACL,SAAA,GACA,QAAQ,8BACT,IAED,CAAA,GAAAU,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFC,WAED,EAAA,6BACAZ,EAAAA,YAMciB,EAAA,KAAA,mBALZ,IAIE,CAJFjB,EAAAA,YAIEoB,EAAA,YAHSC,EAAA,8CAAAA,EAAA,SAAQnB,GACjB,MAAM,YACL,OAAQmB,EAAA,MAAM,SAAUA,EAAA,MAAM,GAAG,0CAGtCrB,EAAAA,YAQiBuB,EAAA,KAAA,mBAPf,IAME,CANFvB,EAAAA,YAMEW,EAAA,CALA,MAAM,UACN,QAAQ,OACR,KAAK,OACL,YAAU,0BACT,QAAOZ,EAAA,2GCmCbL,EAAU,CACb,WAAY,CACV,WAAA0C,EACA,0BAAAC,GAEF,MAAO,CAAC,QAAS,gBAAgB,EACjC,MAAO,CACL,MAAO,CACL,IAAK,IAAI7C,EAAAA,GACT,OAAQ,GACR,aAAc,GACd,mBAAoB,GACpB,QAAS,CAAA,CACX,CACF,EACA,SAAU,CACR,gBAAiB,UAAY,CAC3B,IAAI8C,EAAW,KAAK,QACpB,OAAI,KAAK,eACPA,EAAWA,EAAS,OAAQC,GAAWA,EAAO,QAAQ,GAEpD,KAAK,OAAO,SACdD,EAAWA,EAAS,OAAQC,GAC1BA,EAAO,MAAM,YAAW,EAAG,SAAS,KAAK,OAAO,aAAa,CAC/D,GAEKD,CACT,GAEF,QAAS,UAAY,CAGnB,KAAK,qBAAoB,CAE3B,EACA,QAAS,CACP,qBAAsB,UAAY,CAChCE,EAAAA,GAAI,IAAI,yBAAyB,EAAE,KAAMN,GAAa,CACpD,KAAK,QAAUA,EAAS,IAC1B,CAAC,CACH,EACA,MAAO,UAAY,CACjB,KAAK,MAAM,OAAO,CACpB,EACA,QAAS,SAAUK,EAAQ,CACzB,KAAK,MAAM,iBAAkBA,CAAM,EACnC,KAAK,MAAK,CACZ,EACA,aAAc,UAAY,CACxB,KAAK,mBAAqB,EAC5B,EACA,kBAAmB,UAAY,CAC7B,KAAK,IAAI,oBAAmB,EAAG,KAAML,GAAa,CAChD,KAAK,qBAAoB,CAC3B,CAAC,CACH,EAEJ,EA7HSO,GAAA,CAAA,MAAM,sCAAsC,EA2B5C1B,GAAA,CAAA,MAAM,kCAAkC,4dA5B/Cf,EAAAA,YAyDU0C,EAAA,CAzDD,MAAM,kBAAkB,OAAO,2BACtC,IA0BM,CA1BNpC,EAAAA,mBA0BM,MA1BNmC,GA0BM,aAzBJnC,EAAAA,mBAKM,MAAA,KAAA,CAJJA,EAAAA,mBAAmD,MAAA,CAA9C,MAAM,cAAc,EAAC,qBAAmB,EAC7CA,EAAAA,mBAEM,MAAA,CAFD,MAAM,iBAAiB,EAAC,0DAE7B,QAEFN,EAAAA,YAAYK,CAAA,EACZL,EAAAA,YAA6DW,EAAA,CAAtD,KAAK,UAAU,QAAQ,OAAQ,QAAOZ,EAAA,kCAE7CC,EAAAA,YAaYQ,EAAA,CAbD,SAAS,KAAK,EAAA,CACZ,UAASC,EAAAA,QAClB,CAQM,CATgB,MAAAC,KAAK,CAC3BJ,EAAAA,mBAQM,4CAROI,CAAK,CAAA,EAAA,CAChBV,EAAAA,YAMEW,EAAA,CALA,KAAK,2BACL,OAAO,SACP,KAAK,kBACL,QAAQ,OACR,MAAM,kCAIZ,IAAoC,CAApCC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAN,EAAAA,mBAAoC,YAA9B,0BAAuB,EAAA,WAG/BN,EAAAA,YAAwDW,EAAA,CAAjD,KAAK,YAAY,QAAQ,OAAQ,QAAOZ,EAAA,6BAEjDO,EAAAA,mBAmBM,MAnBNS,GAmBM,CAlBJf,EAAAA,YAUEoB,EAAA,YATSC,EAAA,4CAAAA,EAAA,OAAMnB,GACf,MAAM,SACN,qBAAmB,cACnB,UAAA,GACA,QAAQ,WACR,QAAQ,UACR,cAAA,GACA,eAAA,GACA,YAAU,8CAEZF,EAAAA,YAME2C,EAAA,YALStB,EAAA,kDAAAA,EAAA,aAAYnB,GACrB,MAAM,gBACN,QAAQ,UACR,eAAA,GACA,MAAM,iCAGVF,EAAAA,YAAYK,CAAA,EACZO,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAN,EAAAA,mBAA0E,OAAA,CAApE,MAAM,EAAE,EAAC,uDAAoD,EAAA,GACnEN,EAAAA,YAMc4C,EAAA,KAAA,mBALZ,IAIQ,CAJR5C,EAAAA,YAIQ6C,EAAA,KAAA,mBAHC,IAAiC,kBAAxC/B,EAAAA,mBAEQgC,EAAAA,SAAA,KAAAC,EAAAA,WAFgBhD,EAAA,gBAAVwC,kBAAdrB,EAAAA,YAEQ8B,EAAA,CAFkC,IAAKT,EAAO,GAAI,KAAK,wBAC7D,IAA0D,CAA1DvC,EAAAA,YAA0DiD,EAA1D3B,EAAAA,WAA0D,CAAA,QAAA,EAAA,EAArCiB,EAAM,CAAG,iBAAiBxC,EAAA,OAAO,CAAA,EAAA,KAAA,GAAA,CAAA,kBAAA,CAAA,+CAK9DC,EAAAA,YAGEkD,EAAA,YAFS7B,EAAA,wDAAAA,EAAA,mBAAkBnB,GAC1B,oBAAkBH,EAAA,6GCkBlBL,GAAU,CACb,WAAY,CACV,oBAAA8B,GAEF,OAAQ,CAACjC,CAAW,EACpB,MAAO,CACL,QAAS,CACP,KAAM,MACN,QAAS,IACA,CAAA,GAGX,WAAY,SAEd,MAAO,CAAC,OAAQ,SAAU,SAAS,EACnC,MAAO,CACL,MAAO,CACL,SAAU,EACZ,CACF,EACA,SAAU,CACR,aAAc,UAAY,CACxB,OAAI,KAAK,MACA,KAAK,MAEP,KAAK,KACT,QAAQ,kBAAmB,EAAE,EAC7B,QAAQ,0DAA2D,EAAE,CAC1E,GAEF,QAAS,CACP,YAAa,UAAY,CACnB,KAAK,kBACP,KAAK,SAAW,GAEpB,EACA,eAAgB,UAAY,CAC1BiD,EAAAA,GAAI,KAAK,wBAAwB,KAAK,IAAI,WAAW,EAAE,KACpDN,GAAa,CAEZ,MAAMiB,EAAc,OAAO,KAAKjB,EAAS,KAAK,QAAQ,EAEhDkB,EAAa,IAAI,WAAWD,EAAY,MAAM,EAEpD,QAASE,EAAI,EAAGA,EAAIF,EAAY,OAAQ,EAAEE,EACxCD,EAAWC,CAAC,EAAIF,EAAY,WAAWE,CAAC,EAE1C,MAAMC,EAAO,IAAI,KAAK,CAACF,CAAU,EAAG,CAAE,KAAM,iBAAgB,CAAG,EACzDG,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAO,IAAI,gBAAgBD,CAAI,EACpCC,EAAK,aAAa,WAAYrB,EAAS,KAAK,QAAQ,EACpDqB,EAAK,MAAK,CACZ,CACF,CACF,EACA,eAAgB,SAAUC,EAAM,CAC9BhB,KAAI,KAAK,uBAAuBgB,CAAI,WAAW,EAAE,KAAMtB,GAAa,CAElE,MAAMiB,EAAc,OAAO,KAAKjB,EAAS,KAAK,QAAQ,EAEhDkB,EAAa,IAAI,WAAWD,EAAY,MAAM,EAEpD,QAASE,EAAI,EAAGA,EAAIF,EAAY,OAAQ,EAAEE,EACxCD,EAAWC,CAAC,EAAIF,EAAY,WAAWE,CAAC,EAE1C,MAAMC,EAAO,IAAI,KAAK,CAACF,CAAU,EAAG,CAAE,KAAM,iBAAgB,CAAG,EACzDG,EAAO,SAAS,cAAc,GAAG,EACvCA,EAAK,KAAO,IAAI,gBAAgBD,CAAI,EACpCC,EAAK,aAAa,WAAYrB,EAAS,KAAK,QAAQ,EACpDqB,EAAK,MAAK,CACZ,CAAC,CACH,EACA,KAAM,UAAY,CAChB,KAAK,MAAM,MAAM,CACnB,EACA,QAAS,UAAY,CACnB,KAAK,MAAM,SAAS,CACtB,EACA,aAAc,UAAY,CACxB,KAAK,SAAW,GAChB,KAAK,MAAM,QAAQ,CACrB,EAEJ,qBAvJWxC,GAAA,CAAA,MAAM,2CAA2C,0WAV1DT,EAAAA,mBAkEK,KAAA,CAjEF,yCAA2BR,EAAA,eAAe,CAAA,EAC3C,YAAU,mBACT,4BAAOC,EAAA,aAAAA,EAAA,YAAA,GAAA0D,CAAA,KAERnD,EAAAA,mBAEK,KAAA,KAAA,CADUR,EAAA,yBAAboB,EAAAA,YAA0EC,EAAA,OAAjD,IAAKrB,EAAA,UAAW,aAAW,KAAK,YAAU,qDAErEQ,EAAAA,mBAmBK,KAAA,KAAA,CAlBHA,EAAAA,mBAA6C,MAAA,CAAxC,MAAM,UAAU,YAAAC,EAAAA,gBAAqBR,EAAb,YAAY,cACzCO,EAAAA,mBAIM,MAJNS,GAIM,CAFY2C,EAAA,0BAAhB5C,EAAAA,mBAA0CgC,EAAAA,SAAA,CAAA,IAAA,CAAA,EAAA,mBAAd,KAAG,oCAAWlB,EAAAA,gBAAA,sBACvC9B,EAAA,IAAI,EAAA,CAAA,KAEE6D,EAAAD,EAAA,UAAA,MAAAC,EAAS,sBAApB7C,EAAAA,mBAWM,MAAA8C,GAAA,EATJnC,EAAAA,UAAA,EAAA,EAAAX,EAAAA,mBAQOgC,WAAA,KAAAC,EAAAA,WARyBW,EAAA,QAAO,CAAzBG,EAAQC,mBAAtBhD,EAAAA,mBAQO,OAAA,CARmC,IAAKgD,EAAO,MAAM,SAElDD,EAAO,wBADf/C,EAAAA,mBAKE,IAAA,OAHA,MAAA,CAAA,OAAA,SAAA,EACC,QAAKiD,EAAAA,cAAA7D,GAAUH,EAAA,eAAe8D,EAAO,IAAI,EAAA,CAAA,SAAA,CAAA,cAC1CtD,EAAAA,gBAAQsD,EAAO,IAAI,8BAErB/C,EAAAA,mBAAoC,OAAA,mBAAvBP,EAAAA,gBAAQsD,EAAO,IAAI,0DAKtCvD,EAAAA,mBAoCK,KAAA,KAAA,CAnCHN,EAAAA,YAkCSgE,EAAA,KAAA,CAjCI,UAASvD,EAAAA,QAClB,CAIE,CALoB,MAAAC,KAAK,CAC3BV,cAIEiE,EAJF3C,EAAAA,WACUZ,EAAK,CACb,KAAK,sBACL,YAAU,gDAGd,IAyBS,CAzBTV,EAAAA,YAyBSkE,EAAA,KAAA,mBAxBP,IAKE,CALFlE,EAAAA,YAKEmE,EAAA,CAJA,MAAM,WACN,eAAa,eACb,YAAU,kBACT,QAAOpE,EAAA,oCAEVC,EAAAA,YAKEmE,EAAA,CAJA,MAAM,eACN,eAAa,aACb,YAAU,cACT,QAAOpE,EAAA,0BAEVC,EAAAA,YAKEmE,EAAA,CAJA,MAAM,UACN,eAAa,aACb,YAAU,iBACT,QAAOpE,EAAA,6BAEVC,EAAAA,YAKEmE,EAAA,CAJA,MAAM,SACN,eAAa,aACb,YAAU,gBACT,QAAOpE,EAAA,wDAMlBC,EAAAA,YAIE0B,EAJFJ,aAIE,YAHSD,EAAA,8CAAAA,EAAA,SAAQnB,IACTJ,EAAA,OAAM,CACb,mBAAmBC,EAAA,aAAY,EAAA,KAAA,GAAA,CAAA,aAAA,oBAAA,CAAA,kDC/C/BL,GAAU,CACb,WAAY,CACV,eAAA0E,IAEF,MAAO,CACL,QAAS,CACP,KAAM,MACN,SAAU,IAEZ,QAAS,CACP,KAAM,OACN,SAAU,IAEZ,iBAAkB,CAChB,KAAM,QACN,QAAS,IAEX,eAAgB,CACd,KAAM,MACN,SAAU,KAGd,MAAO,CAAC,OAAQ,SAAU,SAAS,EACnC,MAAO,CACL,MAAO,CACL,kBAAmB,GACnB,aAAc,IAChB,CACF,EACA,SAAU,CACR,cAAe,CACb,MAAMC,EAAgB,CAAA,EAChBC,EAAuB,CAAA,EAc7B,OAbA,KAAK,QAAQ,QAAS/B,GAAW,CAG/B,MAAMgC,EAFkBhC,EAAO,KAAK,MAAM,IAAI,EAAE,CAAC,EACT,MAAM,GAAG,EAAE,MAAM,EAAG,EAAE,EACtB,KAAK,GAAG,EAC5C,KAAK,eAAe,SAASgC,CAAe,EAC9CD,EAAqB,KAAK/B,CAAM,EAEhC8B,EAAc,KAAK9B,CAAM,CAE7B,CAAC,EACD8B,EAAc,KAAK,CAACG,EAAGC,IACrBD,EAAE,KAAOC,EAAE,KAAO,GAAKD,EAAE,KAAOC,EAAE,KAAO,EAAI,CAC/C,EACI,KAAK,kBACPH,EAAqB,KAAK,CAACE,EAAGC,IAC5BD,EAAE,KAAOC,EAAE,KAAO,GAAKD,EAAE,KAAOC,EAAE,KAAO,EAAI,CAC/C,EACOJ,EAAc,OAAOC,CAAoB,GAE3CD,CACT,GAEF,QAAS,CACP,YAAa,SAAU9B,EAAQ,CAC7B,KAAK,aAAeA,EACpB,KAAK,kBAAoB,EAC3B,EACA,cAAe,SAAUA,EAAQ,CAC/B,IAAImC,EAAS,CAAA,EACb,UAAWb,KAAU,KAAK,QACpB,KAAK,QAAQA,CAAM,EAAE,SAActB,GACrCmC,EAAO,KAAK,KAAK,QAAQb,CAAM,CAAC,EAGpC,OAAOa,CACT,EACA,WAAY,SAAUnC,EAAQ,CAC5B,OAAO,OAAO,QAAQ,KAAK,OAAO,EAAE,KAAK,CAAC,CAACoC,EAAYd,CAAM,IACpDA,EAAO,SAActB,GAAUsB,EAAO,WAAgB,EAC9D,CACH,EACA,WAAY,SAAUtB,EAAQ,CAC5B,KAAK,MAAM,OAAQA,CAAM,CAC3B,EACA,cAAcA,EAAQ,CACpB,KAAK,MAAM,UAAWA,CAAM,CAC9B,EACA,aAAc,SAAUA,EAAQ,CAC9B,KAAK,MAAM,SAAUA,CAAM,CAC7B,EAEJ,oIA3GErB,EAAAA,YAiBe0D,EAAA,CAhBZ,QAAS,CAAA,EACT,MAAO7E,EAAA,aACR,QAAQ,UACR,MAAM,OACN,YAAU,gBAEC,KAAIU,EAAAA,QACb,CAOE,CAAA,KARqB8B,CAAM,IAAA,CAC7BvC,cAOE6E,EAPFvD,EAAAA,WACUiB,EAAM,CACb,QAASxC,EAAA,cAAcwC,EAAO,IAAI,EAClC,cAAaxC,EAAA,WAAWwC,EAAO,IAAI,EACnC,OAAI,IAAQxC,EAAA,WAAWwC,EAAO,IAAI,EAClC,UAAO,IAAQxC,EAAA,cAAcwC,EAAO,IAAI,EACxC,SAAM,IAAQxC,EAAA,aAAawC,EAAO,IAAI,sKC8I1C7C,GAAU,CACb,WAAY,cACVoF,EAAAA,aACA,WAAAC,GACA,YAAAC,GACA,qBAAAC,EAAAA,qBACA,iBAAAC,EAAAA,kBAEF,MAAO,CACL,MAAO,CACL,IAAK,IAAI1F,EAAAA,GACT,KAAM,KACN,cAAe,KACf,QAAS,CAAA,EACT,QAAS,CAAA,EACT,UAAW,CAAA,EACX,MAAO,GACP,UAAW,UACX,UAAW,GACX,WAAY,KACZ,UAAW,CAAA,EACX,QAAS,KACT,UAAW,GACX,cAAe,KACf,kBAAmB,KACnB,mBAAoB,GACpB,kBAAmB,GACnB,cAAe,GACf,gBAAiB,GACjB,iBAAkB,GAClB,yBAA0B,GAC1B,iBAAkB,GAClB,SAAU,EACV,aAAc,GAEd,eAAgB,CACd,2BACA,oCACA,+BACA,8BACA,gCACA,kCACA,mCACA,gCACA,0BACA,+BACA,4BACA,mCACA,kCACA,kCACA,kCACA,gCACA,+BACA,sCACA,+BACA,8BACA,6BACA,kCACA,iCACA,8BACA,mBAEJ,CACF,EACA,MAAO,CAEL,iBAAkB,SAAU2F,EAAUC,EAAU,CAC1CD,IAAa,KACf,KAAK,KAAO,KACZ,KAAK,MAAM,UAAU,MAAQ,KAEjC,GAEF,SAAU,CACR,KAAK,IAAI,oBAAmB,CAC9B,EACA,SAAU,CACR,KAAK,OAAM,EACX,KAAK,gBAAe,EAIpB,MAAME,EAAO,KACb,OAAO,WAAa,UAAY,CAC1BA,EAAK,kBACPA,EAAK,gBAAkB,GACvB,QAAQ,GAAG,CAAC,EAEhB,CACF,EACA,QAAS,CACP,cAAe,SAAU9C,EAAQ,CAC/B,IAAImC,EAAS,CAAA,EACb,UAAWb,KAAU,KAAK,QACpB,KAAK,QAAQA,CAAM,EAAE,SAActB,GACrCmC,EAAO,KAAK,KAAK,QAAQb,CAAM,CAAC,EAGpC,OAAOa,CACT,EACA,WAAY,SAAUnC,EAAQ,CAC5B,OAAO,OAAO,QAAQ,KAAK,OAAO,EAAE,KAAK,CAAC,CAACoC,EAAYd,CAAM,IACpDA,EAAO,SAActB,GAAUsB,EAAO,WAAgB,EAC9D,CACH,EACA,WAAY,SAAUyB,EAAS,CAC7B,KAAK,cAAgBA,EAAQ,OAC7B,KAAK,kBAAoB,EAC3B,EACA,OAAQ,UAAY,CAClB9C,EAAAA,GAAI,IAAI,yBAAyB,EAAE,KAAMN,GAAa,CACpD,KAAK,QAAU,OAAO,QAAQA,EAAS,IAAI,EAAE,IAC3C,CAAC,CAACqD,EAAGhD,CAAM,IAAMA,CACnB,CACF,CAAC,EACDC,EAAAA,GAAI,IAAI,8BAA8B,EAAE,KAAMN,GAAa,CACzD,KAAK,QAAUA,EAAS,IAC1B,CAAC,CACH,EACA,gBAAiB,UAAY,CAC3BM,KAAI,IAAI,+CAA+C,EAAE,KACtDN,GAAa,CACZ,KAAK,UAAYA,EAAS,KACtB,OAAO,KAAK,KAAK,SAAS,EAAE,OAAS,GACvC,WAAW,IAAM,CACf,KAAK,gBAAe,EACpB,KAAK,OAAM,CACb,EAAG,GAAI,CAEX,CACF,CACF,EACA,WAAWsD,EAAU,CACnB,OAAOC,EAAAA,OACLC,EAAAA,OAAO,SAASF,CAAQ,EAAI,GAAO,EACnC,yBACF,CACF,EACA,OAAQ,SAAUG,EAAW,KAAMC,EAAY,KAAM,CACnD,MAAMC,EAASF,EAAW,MAAQ,OAC5BG,EAAOH,EACT,uBAAuBA,CAAQ,GAC/B,sBACEI,EAAW,IAAI,SACjBH,IAAc,KAChBG,EAAS,OAAO,SAAU,KAAK,KAAM,KAAK,KAAK,IAAI,EAEnDA,EAAS,OAAO,WAAYH,EAAU,EAAE,EAE1C,IAAII,EAAO,KACKxD,EAAAA,GAAIqD,CAAM,EAAEC,EAAM,CAChC,KAAMC,EACN,QAAS,CAAE,eAAgB,uBAC3B,iBAAkB,SAAUE,EAAe,CACzC,IAAIC,EAAmB,KAAK,MACzBD,EAAc,OAAS,IAAOA,EAAc,KAC/C,EACAD,EAAK,SAAWE,CAClB,EACD,EAEE,KAAMhE,GAAa,CAClB,KAAK,SAAW,IAChB,KAAK,MAAQ,gBACb,KAAK,UAAY,UACjB,KAAK,UAAY,GACjB,WAAW,IAAM,CACf,KAAK,UAAY,EACnB,EAAG,GAAI,EACP,KAAK,OAAM,EACX,IAAIiE,EAAoB,KACpBjE,EAAS,KAAK,4BAA8B,SAC9CiE,EACEjE,EAAS,KAAK,0BAA0B,KAAK;AAAA,CAAI,GAErD,IAAIkE,EAAYlE,EAAS,KAAK,iBAAiB,KAAK;AAAA,CAAI,EACxD,KAAK,WAAaA,EAAS,KAAK,KAChC,KAAK,UAAYA,EAAS,KAAK,UAC/B,KAAK,QAAUA,EAAS,KAAK,SAC7B,KAAK,UAAYkE,EACjB,KAAK,kBAAoBD,EACzB,KAAK,iBAAmB,GACxB,KAAK,KAAO,MACd,CAAC,EACA,MAAOE,GAAU,CAChB,KAAK,cAAgB,KACrB,KAAK,KAAO,MACd,CAAC,CACL,EACA,eAAgB,SAAUC,EAAY,CACpC,KAAK,iBAAmB,GACpB,KAAK,gBAAkB,OACzBA,EAAW,KAAU,KAAK,eAE5B,KAAK,cAAgBA,EACjB,KAAK,WAAW,KAAK,aAAa,GACpC,KAAK,aAAe,GACpB,KAAK,yBAA2B,IAEhC,KAAK,cAAa,CAEtB,EACA,eAAgB,eAAgBC,EAAgB,CAC9C,GAAIA,IAAmB,GACrB,QAAS1C,KAAU,KAAK,cAAc,KAAK,aAAa,EAClDA,EAAO,UAAY,IACrB,MAAMrB,EAAAA,GAAI,KAAK,uBAAuBqB,EAAO,IAAI,kBAAkB,EAIrE,KAAK,aACP,KAAK,aAAa,KAAK,aAAa,EAEpC,KAAK,cAAa,CAEtB,EACA,cAAe,UAAY,CACzBrB,EAAAA,GAAI,KAAK,+BAA+B,KAAK,UAAU,GAAI,CACzD,KAAM,CACJ,YAAa,KAAK,UAAU,KAAK,aAAa,EAElD,CAAC,EAAE,KAAMN,GAAa,CACpB,KAAK,MAAQ,6BAA6B,KAAK,UAAU,OACzD,KAAK,UAAY,UACjB,KAAK,UAAY,GACjB,KAAK,cAAgB,KACrB,KAAK,KAAO,OACZ,KAAK,UAAY,CAAA,EACjB,KAAK,UAAY,GACjB,KAAK,kBAAoB,KACzB,KAAK,QAAU,KACf,WAAW,IAAM,CACf,KAAK,UAAY,GACjB,KAAK,gBAAe,CACtB,EAAG,GAAI,EACP,KAAK,OAAM,CACb,CAAC,CACH,EACA,WAAY,SAAUK,EAAQ,CAC5BC,KAAI,IAAI,uBAAuBD,CAAM,EAAE,EAAE,KAAML,GAAa,CAC1D,IAAIiE,EAAoB,KACpBjE,EAAS,KAAK,4BAA8B,SAC9CiE,EAAoBjE,EAAS,KAAK,0BAA0B,KAAK;AAAA,CAAI,GAEvE,KAAK,WAAaA,EAAS,KAAK,KAChC,KAAK,UAAYA,EAAS,KAAK,UAC/B,KAAK,UAAYA,EAAS,KAAK,iBAAiB,KAAK;AAAA,CAAI,EACzD,KAAK,kBAAoBiE,EACzB,KAAK,iBAAmB,EAC1B,CAAC,CACH,EACA,aAAc,SAAU5D,EAAQ,CAC9B,KAAK,QACF,QAAQ,oCAAoCA,CAAM,GAAI,CACrD,OAAQ,SACR,WAAY,SACb,EACA,KAAMiE,GAAW,CACZ,KAAK,WAAWjE,CAAM,GACxB,KAAK,cAAgBA,EACrB,KAAK,aAAe,GACpB,KAAK,yBAA2B,IAEhC,KAAK,aAAaA,CAAM,CAE5B,CAAC,CACL,EACA,aAAc,SAAUA,EAAQ,CAC9B,KAAK,MAAQ,mBAAmBA,CAAM,OACtC,KAAK,UAAY,UACjB,KAAK,UAAY,GACjBC,KAAI,OAAO,uBAAuBD,CAAM,EAAE,EAAE,KAAML,GAAa,CAC7D,WAAW,IAAM,CACf,KAAK,UAAY,GACjB,KAAK,gBAAe,CACtB,EAAG,GAAI,CACT,CAAC,EACD,KAAK,OAAM,CACb,EACA,cAAcK,EAAQ,CACpB,KAAK,KAAO,KACZ,KAAK,cAAgBA,EACrB,KAAK,SAAW,EAChB,KAAK,MAAM,UAAU,MAAK,CAC5B,EACA,YAAa,CACX,KAAK,KAAO,KACZ,KAAK,cAAgB,KACrB,KAAK,SAAW,EAChB,KAAK,MAAM,UAAU,MAAK,CAC5B,EACA,WAAWkE,EAAO,CAChB,MAAMC,EAAQD,EAAM,OAAO,MAC3B,GAAIC,EAAM,OAAS,EAEjB,GADA,KAAK,KAAOA,EAAM,CAAC,EACf,KAAK,gBAAkB,KACzB,GACE,KAAK,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,GAC9B,KAAK,cAAc,MAAM,MAAM,EAAE,CAAC,EAElC,KAAK,QACF,QACC,eAAe,KAAK,KAAK,IAAI,4CAA4C,KAAK,aAAa,aAC3F,CACE,OAAQ,KACR,WAAY,SAEhB,EACC,KAAK,IAAM,CACV,KAAK,OAAO,KAAK,aAAa,CAChC,CAAC,EACA,MAAOL,GAAU,CAElB,CAAC,MACE,CAML,IAAIM,EAAQ,KAAK,KAAK,KAAK,MAAM,GAAG,EAChCtD,EAAIsD,EAAM,UAAWC,GAAMA,EAAE,SAAS,GAAG,CAAC,EAC1CC,EAAUF,EAAM,MAAM,EAAGtD,CAAC,EAAE,KAAK,GAAG,EACxCsD,EAAQ,KAAK,cAAc,MAAM,GAAG,EACpCtD,EAAIsD,EAAM,UAAWC,GAAMA,EAAE,SAAS,GAAG,CAAC,EAC1C,IAAIE,EAAeH,EAAM,MAAM,EAAGtD,CAAC,EAAE,KAAK,GAAG,EACzCwD,IAAYC,EACd,KAAK,QACF,QACC,yBAAyBD,CAAO,+BAA+BC,CAAY,aAC3E,CACE,OAAQ,KACR,WAAY,SAEhB,EACC,KAAK,IAAM,CACV,KAAK,OAAO,KAAK,aAAa,CAChC,CAAC,EAEH,KAAK,OAAO,KAAK,aAAa,CAElC,MAEA,KAAK,OAAM,OAIb,KAAK,MAAM,UAAU,MAAQ,IAEjC,EACA,WAAY,CACV,KAAK,gBAAkB,EACzB,EAEJ,EA1eWrE,GAAA,CAAA,MAAM,MAAM,qzBAhBrB3B,qBA6IM,MAAA,KAAA,CA5IJd,EAAAA,YAuBQ6C,EAAA,CAvBD,aAAA,GAAW,MAAM,SAAS,MAAM,2BACrC,IAkBQ,CAlBR7C,EAAAA,YAkBQgD,EAAA,CAlBD,MAAM,WAAW,EAAA,mBACtB,IAEQ,CAFRhD,EAAAA,YAEQW,EAAA,CAFD,cAAY,YAAa,QAAOZ,EAAA,8BAAW,IAElD,CAAA,GAAAa,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAA,mBAFkD,mBAElD,EAAA,0BACAZ,EAAAA,YAEQW,EAAA,CAFD,cAAY,gBAAgB,MAAM,OAAQ,QAAOZ,EAAA,+BAAY,IAEpE,CAAA,GAAAa,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAFoE,sBAEpE,EAAA,0BACAN,EAAAA,mBAKE,QAAA,CAJA,IAAI,YACJ,MAAA,CAAA,QAAA,MAAA,EACA,KAAK,OACJ,6BAAQP,EAAA,YAAAA,EAAA,WAAA,GAAA0D,CAAA,4BAEXnD,qBAAM,KAAA,KAAA,KAAA,EAAA,GACNA,EAAAA,mBAGI,IAHJmC,GAGI,iCAHY,cACJ,EAAA,GAAAzC,EAAAA,YAAsCiE,EAAA,KAAA,mBAA9B,IAAqB,CAAA,GAAArD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAArB,wBAAqB,EAAA,4CAAS,8DAElD,EAAA,aAEFZ,EAAAA,YAEQgD,EAAA,CAFD,MAAM,YAAY,KAAK,wBAC5B,IAAkC,CAAlChD,cAAkC+G,EAAA,CAAnB,MAAO1F,EAAA,QAAQ,EAAA,KAAA,EAAA,CAAA,OAAA,CAAA,kBAGlCrB,EAAAA,YAKQ6C,EAAA,CALD,aAAA,GAAW,MAAM,2BACtB,IAGQ,CAHR7C,EAAAA,YAGQgD,EAAA,CAHD,MAAM,QAAQ,MAAM,2BACzB,IAAwC,CAAA,GAAApC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,CAAxCN,EAAAA,mBAAwC,WAAnC,gCAA6B,EAAA,EAClCA,EAAAA,mBAAsD,WAAjD,8CAA2C,EAAA,oBAGpDN,EAAAA,YAAagH,CAAA,EAEbhH,EAAAA,YAMEmC,EAAA,YALSd,EAAA,+CAAAA,EAAA,UAASnB,GAClB,SAAA,GACC,KAAMmB,EAAA,UACN,KAAMA,EAAA,MACP,YAAU,qDAGJ,OAAO,KAAKA,EAAA,SAAS,EAAE,OAAM,iBADrCH,EAAAA,YAiDSgD,EAAA,OA/CP,MAAM,OACN,YAAU,mCAEV,IAMQ,CANRlE,EAAAA,YAMQ6C,EAAA,CAND,aAAA,GAAW,MAAM,2BACtB,IAA6C,CAA7C7C,EAAAA,YAA6CgD,EAAA,CAAtC,MAAM,SAAS,EAAA,mBAAC,IAAc,CAAA,GAAApC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAd,iBAAc,EAAA,YACrCZ,EAAAA,YAGQgD,EAAA,CAHD,MAAM,OAAO,EAAA,mBAElB,IAA0C,CAAA,GAAApC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,CAA1CN,EAAAA,mBAA0C,WAArC,kCAA+B,EAAA,qCAGxCQ,EAAAA,mBAoCMgC,EAAAA,SAAA,KAAAC,EAAAA,WApCiB1B,EAAA,UAAXiE,kBAAZxE,EAAAA,mBAoCM,MAAA,CApC6B,IAAKwE,EAAQ,OAC9CtF,EAAAA,YAiCcmE,EAAA,KAAA,CApBD,iBACT,IAIE,CAHMmB,EAAQ,QAAK,yBADrBpE,EAAAA,YAIE+F,EAAA,OAFA,cAAA,GACA,MAAM,4BAER/F,EAAAA,YAYYV,EAAA,OAZO,aAAY,IAAK,SAAS,QAChC,UAASC,EAAAA,QAClB,CAOE,CARoB,MAAAC,KAAK,CAC3BV,EAAAA,YAOEW,EAPFW,EAAAA,WAOE,CAAA,QAAA,EAAA,EANQZ,EAAK,CACb,KAAK,UACL,QAAQ,OACR,aAAW,cACX,YAAU,cACT,QAAKR,IAAEH,EAAA,WAAWuF,CAAO,6CAG9B,IAA0B,CAA1B1E,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAN,EAAAA,mBAA0B,YAApB,gBAAa,EAAA,qCA7BvB,IAOoB,CAPpBN,EAAAA,YAOoBkH,EAAA,KAAA,mBANlB,IAKE,CALF5G,EAAAA,mBAKE,OAAA,CAJC,MAAKuB,EAAAA,eAAEyD,EAAQ,MAAM,YAAW,CAAA,cACjC/E,EAAAA,8BAAuC+E,EAAQ,YAAY,KAAKA,EAAQ,MAAM,MAAMA,EAAQ,KAAK,8BAKrGtF,EAAAA,YAEuBmH,EAAA,KAAA,mBADrB,IAAkE,CAAlE7G,EAAAA,mBAAkE,OAAA,CAA5D,YAAAC,EAAAA,gBAAyD,gBAA/BR,EAAA,WAAWuF,EAAQ,UAAU,CAAA,wCAwBjEtF,EAAAA,YAAagH,CAAA,iDAGjBhH,EAAAA,YAWQ6C,EAAA,CAXD,aAAA,GAAW,MAAM,2BACtB,IAAkD,CAAlD7C,EAAAA,YAAkDgD,EAAA,CAA3C,MAAM,SAAS,EAAA,mBAAC,IAAmB,CAAA,GAAApC,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAnB,sBAAmB,EAAA,YAC1CZ,EAAAA,YAQQgD,EAAA,CARD,MAAM,YAAY,EAAA,mBACvB,IAME,CANFhD,EAAAA,YAME2C,EAAA,YALStB,EAAA,sDAAAA,EAAA,iBAAgBnB,GACzB,MAAM,qBACN,QAAQ,UACR,eAAA,GACA,YAAU,6DAIhBF,EAAAA,YAQEoH,EAAA,CAPC,QAAS/F,EAAA,QACT,QAASA,EAAA,QACT,qBAAoBA,EAAA,iBACpB,kBAAiBA,EAAA,eACjB,OAAMtB,EAAA,WACN,UAASA,EAAA,cACT,SAAQA,EAAA,mHAGHsB,EAAA,gCADRH,EAAAA,YASEmG,EAAA,kBAPShG,EAAA,sDAAAA,EAAA,iBAAgBnB,GACxB,cAAamB,EAAA,WACb,UAAWA,EAAA,UACX,aAAYA,EAAA,UACZ,sBAAqBA,EAAA,kBACrB,WAAUA,EAAA,QACV,WAAUtB,EAAA,yJAGLsB,EAAA,wCADRH,EAAAA,YAOEoG,EAAA,kBALSjG,EAAA,8DAAAA,EAAA,yBAAwBnB,GAChC,cAAamB,EAAA,cACb,QAAStB,EAAA,cAAcsB,EAAA,aAAa,EACpC,gBAAeA,EAAA,aACf,SAAQtB,EAAA,uHAGXC,EAAAA,YAIEuH,EAAA,YAHSlG,EAAA,uDAAAA,EAAA,kBAAiBnB,GAC1B,MAAM,iBACL,KAAMmB,EAAA,6CAETrB,EAAAA,YAKiBwH,EAAA,YALQnG,EAAA,qDAAAA,EAAA,gBAAenB,GAAE,WAAA,uBACxC,IAGE,CAHFF,EAAAA,YAGEyH,EAAA,CAFC,wBAAcpG,EAAA,gBAAe,IAC7B,iBAAeT,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAGgF,GAAc7F,EAAA,YAAa6F,CAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScriptChooser-ahp4Tu3O.js","sources":["../src/components/CommandParameterEditor.vue","../src/components/CommandEditor.vue","../src/components/EnvironmentChooser.vue","../src/components/ScriptChooser.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-text-field\n v-if=\"!states\"\n :model-value=\"textFieldValue\"\n hide-details\n density=\"compact\"\n variant=\"filled\"\n data-test=\"cmd-param-value\"\n @update:model-value=\"handleChange\"\n />\n <div v-else class=\"d-flex align-center\">\n <v-select\n :items=\"stateOptions\"\n :model-value=\"selectValue\"\n item-title=\"label\"\n :class=\"stateClass\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n placeholder=\"Select...\"\n min-width=\"120px\"\n data-test=\"cmd-param-select\"\n @update:model-value=\"handleChange\"\n />\n <v-text-field\n :model-value=\"stateValue\"\n disabled\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n min-width=\"60px\"\n data-test=\"cmd-param-value\"\n />\n </div>\n </div>\n</template>\n\n<script>\nimport { CmdUtilities } from '../util'\nexport default {\n name: 'CommandParameterEditor',\n mixins: [CmdUtilities],\n props: {\n modelValue: {\n type: [String, Number],\n default: undefined,\n },\n states: {\n type: Object,\n default: () => null,\n },\n statesInHex: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue'],\n computed: {\n textFieldValue() {\n return this.convertToString(this.modelValue)\n },\n stateValue() {\n if (this.statesInHex) {\n return '0x' + this.modelValue.toString(16)\n } else {\n return this.modelValue\n }\n },\n selectValue() {\n // this makes the placeholder prop work\n return this.modelValue === '' ? null : this.modelValue\n },\n stateOptions() {\n if (!this.states) {\n return null\n }\n return Object.keys(this.states).map((label) => {\n return {\n label,\n ...this.states[label],\n }\n })\n },\n hazardous() {\n return (\n Object.entries(this.states)\n .find(([label, state]) => state.value === this.modelValue)\n ?.at(1)?.hazardous !== undefined\n )\n },\n stateClass() {\n return this.hazardous ? 'hazardous mr-4' : 'mr-4'\n },\n },\n methods: {\n handleChange(value) {\n this.$emit('update:modelValue', value)\n },\n },\n}\n</script>\n<style scoped>\n/* This allows Value or State selection to be wider and show state names */\n.container :deep(.v-select__selections) {\n width: auto;\n}\n.v-overflow-btn {\n margin-top: 0px;\n}\n.container {\n padding: 0px;\n}\n.hazardous :deep(.v-select__selection-text) {\n color: rgb(255, 220, 0) !important;\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-card>\n <div style=\"padding: 10px\">\n <target-packet-item-chooser\n :initial-target-name=\"targetName\"\n :initial-packet-name=\"commandName\"\n :disabled=\"sendDisabled\"\n :button-text=\"showCommandButton ? 'Send' : null\"\n mode=\"cmd\"\n @on-set=\"commandChanged($event)\"\n @add-item=\"buildCmd($event)\"\n />\n </div>\n\n <v-card v-if=\"computedRows.length !== 0\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n Parameters\n <v-spacer />\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 class=\"search\"\n />\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"computedRows\"\n :search=\"search\"\n :items-per-page=\"-1\"\n hide-default-footer\n multi-sort\n density=\"compact\"\n @contextmenu:row=\"showContextMenu\"\n >\n <template #item.val=\"{ item }\">\n <slot\n name=\"parameter-editor\"\n :item=\"item\"\n :states-in-hex=\"statesInHex\"\n >\n <!-- Default parameter editor if slot not provided -->\n <command-parameter-editor\n v-model=\"item.val\"\n :states=\"item.states\"\n :states-in-hex=\"statesInHex\"\n />\n </slot>\n </template>\n </v-data-table>\n </v-card>\n\n <v-menu v-model=\"contextMenuShown\" :target=\"[x, y]\">\n <v-list>\n <v-list-item\n v-for=\"(item, index) in contextMenuOptions\"\n :key=\"index\"\n @click.stop=\"item.action\"\n >\n <v-list-item-title>{{ item.title }}</v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n\n <details-dialog\n v-model=\"viewDetails\"\n :target-name=\"targetName\"\n :packet-name=\"commandName\"\n :item-name=\"parameterName\"\n :type=\"'cmd'\"\n />\n </v-card>\n</template>\n\n<script>\nimport 'sprintf-js'\nimport { OpenC3Api } from '@openc3/js-common/services'\nimport TargetPacketItemChooser from './TargetPacketItemChooser.vue'\nimport CommandParameterEditor from './CommandParameterEditor.vue'\nimport DetailsDialog from './DetailsDialog.vue'\nimport { CmdUtilities } from '../util'\n\nexport default {\n name: 'CommandEditor',\n components: {\n TargetPacketItemChooser,\n CommandParameterEditor,\n DetailsDialog,\n },\n mixins: [CmdUtilities],\n props: {\n initialTargetName: {\n type: String,\n default: null,\n },\n initialPacketName: {\n type: String,\n default: null,\n },\n cmdString: {\n type: String,\n default: null,\n },\n sendDisabled: {\n type: Boolean,\n default: false,\n },\n statesInHex: {\n type: Boolean,\n default: false,\n },\n showIgnoredParams: {\n type: Boolean,\n default: false,\n },\n cmdRaw: {\n type: Boolean,\n default: false,\n },\n showCommandButton: {\n type: Boolean,\n default: true,\n },\n },\n emits: ['command-changed', 'build-cmd'],\n data() {\n return {\n search: '',\n headers: [\n { title: 'Name', value: 'parameter_name' },\n { title: 'Value or State', value: 'val' },\n { title: 'Units', value: 'units' },\n { title: 'Range', value: 'range' },\n { title: 'Description', value: 'description' },\n ],\n api: null,\n targetName: '',\n commandName: '',\n commandDescription: '',\n ignoredParams: [],\n computedRows: [],\n reservedItemNames: [\n 'PACKET_TIMESECONDS',\n 'PACKET_TIMEFORMATTED',\n 'RECEIVED_TIMESECONDS',\n 'RECEIVED_TIMEFORMATTED',\n 'RECEIVED_COUNT',\n ],\n contextMenuShown: false,\n viewDetails: false,\n parameterName: '',\n x: 0,\n y: 0,\n contextMenuOptions: [\n {\n title: 'Details',\n action: () => {\n this.contextMenuShown = false\n this.viewDetails = true\n },\n },\n ],\n }\n },\n created() {\n this.api = new OpenC3Api()\n if (this.cmdString) {\n this.processCmdString()\n } else {\n this.targetName = this.initialTargetName\n this.commandName = this.initialPacketName\n this.updateCmdParams()\n }\n },\n methods: {\n commandChanged(event) {\n if (\n this.targetName !== event.targetName ||\n this.commandName !== event.packetName\n ) {\n this.targetName = event.targetName\n this.commandName = event.packetName\n this.updateCmdParams()\n }\n this.$emit('command-changed', event)\n },\n buildCmd(event) {\n this.$emit('build-cmd', event)\n },\n showContextMenu(event, row) {\n event.preventDefault()\n this.parameterName = row.item.parameter_name\n this.contextMenuShown = false\n this.x = event.clientX\n this.y = event.clientY\n this.$nextTick(() => {\n this.contextMenuShown = true\n })\n },\n updateCmdParams() {\n this.ignoredParams = []\n this.computedRows = []\n if (this.targetName && this.commandName) {\n this.api\n .get_target(this.targetName)\n .then(\n (target) => {\n this.ignoredParams = target.ignored_parameters\n return this.api.get_cmd(this.targetName, this.commandName)\n },\n (error) => {\n // eslint-disable-next-line no-console\n console.error('Error getting ignored parameters:', error)\n },\n )\n .then(\n (command) => {\n if (command) {\n command.items.forEach((parameter) => {\n if (this.reservedItemNames.includes(parameter.name)) return\n if (\n !this.ignoredParams.includes(parameter.name) ||\n this.showIgnoredParams\n ) {\n let val = parameter.default\n if (\n !parameter.states &&\n parameter.data_type === 'STRING' &&\n typeof parameter.default === 'string'\n ) {\n val = `'${val}'`\n }\n if (parameter.required) {\n val = null // Special marker for required parameters\n }\n if (parameter.format_string && parameter.default) {\n val = sprintf(parameter.format_string, parameter.default)\n }\n let range = 'N/A'\n if (\n parameter.minimum != null &&\n parameter.maximum != null\n ) {\n if (parameter.data_type === 'FLOAT') {\n if (parameter.minimum < -1e6) {\n if (Number.isSafeInteger(parameter.minimum)) {\n parameter.minimum =\n parameter.minimum.toExponential(3)\n }\n }\n if (parameter.maximum > 1e6) {\n if (Number.isSafeInteger(parameter.maximum)) {\n parameter.maximum =\n parameter.maximum.toExponential(3)\n }\n }\n }\n range = `${parameter.minimum}..${parameter.maximum}`\n }\n this.computedRows.push({\n parameter_name: parameter.name,\n val: val,\n states: parameter.states,\n description: parameter.description,\n range: range,\n units: parameter.units,\n type: parameter.data_type,\n })\n }\n })\n this.commandDescription = command.description\n\n // Populate with parsed parameters if available\n this.populateParametersFromParsed()\n }\n },\n (error) => {\n // eslint-disable-next-line no-console\n console.error('Error getting command parameters:', error)\n },\n )\n }\n },\n triggerUpdateCmdParams() {\n this.updateCmdParams()\n },\n getRows() {\n return this.computedRows\n },\n getCmdString() {\n let cmd = `${this.targetName} ${this.commandName}`\n if (this.computedRows.length === 0) return cmd\n cmd += ' with'\n for (const row of this.computedRows) {\n // null value indicates required parameter not set, see updateCmdParams\n if (row.val === null) {\n throw new Error(`Required parameter ${row.parameter_name} not set`)\n }\n if (row.val !== null && row.val !== undefined && row.val !== '') {\n if (row.states) {\n // If states exist, find the state name for the value\n const stateEntry = Object.entries(row.states).find(\n ([, state]) => state.value === row.val,\n )\n if (stateEntry) {\n // Although not always necessary, always quote states\n cmd += ` ${row.parameter_name} '${stateEntry[0]}',`\n continue\n }\n }\n // We only put the param value in quotes if it is a string with spaces\n // Check for array syntax because we do NOT quote arrays\n let value = this.convertToString(row.val)\n if (value.includes(' ') && !this.isArray(value)) {\n cmd += ` ${row.parameter_name} '${value}',`\n } else {\n cmd += ` ${row.parameter_name} ${value},`\n }\n }\n }\n // Remove trailing comma\n return cmd.slice(0, -1)\n },\n parseCmdString(cmdString) {\n // Parse commands in format: \"TARGET COMMAND with PARAM1 value1, PARAM2 value2\"\n const parts = cmdString.split(' ')\n if (parts.length < 2) return { target: '', command: '', params: {} }\n if (parts.length === 2) {\n return { target: parts[0], command: parts[1], params: {} }\n }\n // Check for a malformed command string that doesn't have 'with'\n if (parts[2] !== 'with') return { target: '', command: '', params: {} }\n\n const target = parts[0]\n const command = parts[1]\n let params = {}\n\n const paramsString = cmdString.split(' with ')[1]\n let paramPairs = []\n let bracketLevel = 0\n let current = ''\n // Parse the params char by char to handle commas inside brackets\n for (let char of paramsString) {\n if (char === '[') {\n bracketLevel++\n current += char\n } else if (char === ']') {\n bracketLevel--\n current += char\n } else if (char === ',' && bracketLevel === 0) {\n paramPairs.push(current.trim())\n current = ''\n } else {\n current += char\n }\n }\n if (current.trim() !== '') {\n paramPairs.push(current.trim())\n }\n\n for (let pair of paramPairs) {\n let firstSpace = pair.indexOf(' ')\n if (firstSpace > 0) {\n let key = pair.substring(0, firstSpace).trim()\n let value = pair.substring(firstSpace + 1).trim()\n params[key] = value\n }\n }\n return { target: target, command: command, params: params }\n },\n processCmdString() {\n const parsed = this.parseCmdString(this.cmdString)\n if (parsed.target && parsed.command) {\n this.targetName = parsed.target\n this.commandName = parsed.command\n this.parsedParameters = parsed.params\n this.updateCmdParams()\n }\n },\n populateParametersFromParsed() {\n // Populate parameters after command parameters are loaded\n if (\n !this.parsedParameters ||\n Object.keys(this.parsedParameters).length === 0\n ) {\n return\n }\n\n this.$nextTick(() => {\n // Give time for parameters to load\n setTimeout(() => {\n this.computedRows.forEach((row) => {\n if (this.parsedParameters.hasOwnProperty(row.parameter_name)) {\n const value = this.parsedParameters[row.parameter_name]\n // Set the value based on parameter type\n if (row.states && typeof value === 'string') {\n // For state parameters, try to match the state name\n const stateKey = Object.keys(row.states).find(\n (key) =>\n key === value || key.toLowerCase() === value.toLowerCase(),\n )\n if (stateKey) {\n row.val = row.states[stateKey].value\n } else {\n row.val = value\n }\n } else if (row.type === 'STRING' && typeof value === 'string') {\n // For string parameters, add quotes if not present\n row.val =\n value.startsWith(\"'\") || value.startsWith('\"')\n ? value\n : `'${value}'`\n } else {\n row.val = value\n }\n }\n })\n }, 100) // Shorter delay since we're already in the component\n })\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 2023, 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 <span> Add environment variables (optional)</span>\n <v-table density=\"compact\">\n <tbody>\n <tr>\n <th scope=\"col\" class=\"text-left\">Key</th>\n <th scope=\"col\" class=\"text-left\">Value</th>\n <th scope=\"col\" class=\"text-right\" width=\"52px\">\n <v-btn\n icon=\"mdi-plus\"\n variant=\"text\"\n data-test=\"new-metadata-icon\"\n @click=\"addEnvVar\"\n />\n </th>\n </tr>\n <tr v-for=\"(env, i) in selected\" :key=\"`tr-${i}`\">\n <td>\n <v-text-field\n v-model=\"env.key\"\n density=\"compact\"\n type=\"text\"\n hide-details\n :readonly=\"env.readonly\"\n :data-test=\"`key-${i}`\"\n />\n </td>\n <td>\n <v-text-field\n v-model=\"env.value\"\n density=\"compact\"\n type=\"text\"\n hide-details\n :readonly=\"env.readonly\"\n :data-test=\"`value-${i}`\"\n />\n </td>\n <td>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n :data-test=\"`remove-env-icon-${i}`\"\n @click=\"delEnvVar(i)\"\n />\n </td>\n </tr>\n </tbody>\n </v-table>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n modelValue: {\n type: Array,\n required: true,\n },\n },\n computed: {\n selected: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n methods: {\n addEnvVar: function () {\n this.selected.push({\n key: '',\n value: '',\n })\n },\n delEnvVar: function (index) {\n this.selected.splice(index, 1)\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 2023, 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>\n <v-autocomplete\n v-model=\"selected\"\n density=\"compact\"\n variant=\"outlined\"\n hide-no-data\n hide-details\n class=\"mb-5\"\n label=\"Select script\"\n :loading=\"loading\"\n :items=\"items\"\n v-model:search=\"search\"\n data-test=\"select-script\"\n />\n </v-row>\n </div>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n // TODO: cache items\n // this was previously handled by Vuetify and the `cache-items` prop on `v-autocomplete`, but that feature was\n // dropped in Vuetify 3\n props: {\n modelValue: String, // modelValue is the default prop when using v-model\n },\n data() {\n return {\n loading: false,\n search: '',\n selected: this.modelValue,\n scripts: [],\n items: [],\n }\n },\n created() {\n this.loading = true\n Api.get('/script-api/scripts')\n .then((response) => {\n this.scripts = response.data.filter((filename) => {\n return filename.includes('.rb') || filename.includes('.py')\n })\n this.items = this.scripts\n })\n .catch((error) => {\n this.$emit('error', {\n type: 'error',\n text: `Failed to connect to OpenC3. ${error}`,\n error: error,\n })\n })\n this.selected = this.modelValue ? this.modelValue : null\n this.loading = false\n },\n watch: {\n selected(newVal, oldVal) {\n if (newVal !== oldVal) {\n if (newVal && newVal.slice(-1) === '*') {\n // Remove the * before returning\n this.$emit('file', newVal.substring(0, newVal.length - 1))\n } else {\n this.$emit('file', newVal)\n }\n }\n },\n search(val) {\n val && val !== this.selected && this.querySelections(val)\n },\n },\n methods: {\n querySelections: function (v) {\n this.loading = true\n // Simulated ajax query\n setTimeout(() => {\n this.items = this.scripts.filter((e) => {\n return (e || '').toLowerCase().indexOf((v || '').toLowerCase()) > -1\n })\n this.loading = false\n }, 500)\n },\n },\n}\n</script>\n"],"names":["_sfc_main","CmdUtilities","label","_b","_a","state","value","_createElementBlock","$props","_openBlock","_hoisted_1","_createVNode","_component_v_select","$options","_component_v_text_field","_createBlock","TargetPacketItemChooser","CommandParameterEditor","DetailsDialog","OpenC3Api","event","row","target","error","command","parameter","val","range","cmd","stateEntry","cmdString","parts","params","paramsString","paramPairs","bracketLevel","current","char","pair","firstSpace","key","parsed","stateKey","_component_v_card","_createElementVNode","_component_target_packet_item_chooser","$data","_cache","$event","_component_v_card_title","_component_v_spacer","_component_v_data_table","_withCtx","item","_renderSlot","_ctx","_component_command_parameter_editor","_component_v_menu","_component_v_list","_Fragment","_renderList","index","_component_v_list_item","_withModifiers","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_details_dialog","_component_v_table","_component_v_btn","env","i","Api","response","filename","newVal","oldVal","v","_component_v_row","_component_v_autocomplete"],"mappings":"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"}