@openc3/vue-common 7.1.1 → 7.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/dist/{ArrayWidget-CmKZQfWB.js → ArrayWidget-D1PArcGr.js} +5 -5
  2. package/dist/{ArrayWidget-CmKZQfWB.js.map → ArrayWidget-D1PArcGr.js.map} +1 -1
  3. package/dist/{ArrayWidget-D_zfyp9k.cjs → ArrayWidget-sQ40q9fv.cjs} +2 -2
  4. package/dist/{ArrayWidget-D_zfyp9k.cjs.map → ArrayWidget-sQ40q9fv.cjs.map} +1 -1
  5. package/dist/{ArrayplotWidget-CK5o4lO8.cjs → ArrayplotWidget-CEBmTpZH.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-CK5o4lO8.cjs.map → ArrayplotWidget-CEBmTpZH.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-D5McM1rY.js → ArrayplotWidget-DPUPy0qM.js} +5 -5
  8. package/dist/{ArrayplotWidget-D5McM1rY.js.map → ArrayplotWidget-DPUPy0qM.js.map} +1 -1
  9. package/dist/{BarColumn-BsS8Fdyl.cjs → BarColumn-BHCgIHhm.cjs} +2 -2
  10. package/dist/{BarColumn-BsS8Fdyl.cjs.map → BarColumn-BHCgIHhm.cjs.map} +1 -1
  11. package/dist/{BarColumn-BtP1cQcf.js → BarColumn-BpdscDQf.js} +3 -3
  12. package/dist/{BarColumn-BtP1cQcf.js.map → BarColumn-BpdscDQf.js.map} +1 -1
  13. package/dist/{BlockWidget-CtBgkMYu.cjs → BlockWidget-BzUgw2-i.cjs} +2 -2
  14. package/dist/{BlockWidget-CtBgkMYu.cjs.map → BlockWidget-BzUgw2-i.cjs.map} +1 -1
  15. package/dist/{BlockWidget-BKMse4hP.js → BlockWidget-_VUsK5T9.js} +5 -5
  16. package/dist/{BlockWidget-BKMse4hP.js.map → BlockWidget-_VUsK5T9.js.map} +1 -1
  17. package/dist/{ButtonWidget-hNa6zzSd.cjs → ButtonWidget-D8BhMKz_.cjs} +3 -3
  18. package/dist/{ButtonWidget-hNa6zzSd.cjs.map → ButtonWidget-D8BhMKz_.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-BLNVL46w.js → ButtonWidget-DE41o-cg.js} +7 -7
  20. package/dist/{ButtonWidget-BLNVL46w.js.map → ButtonWidget-DE41o-cg.js.map} +1 -1
  21. package/dist/{CanvasWidget-1jy1JskS.js → CanvasWidget-BEi8h3Mq.js} +2 -2
  22. package/dist/{CanvasWidget-1jy1JskS.js.map → CanvasWidget-BEi8h3Mq.js.map} +1 -1
  23. package/dist/{CanvasWidget-BldZDkOl.cjs → CanvasWidget-DplsGt-k.cjs} +2 -2
  24. package/dist/{CanvasWidget-BldZDkOl.cjs.map → CanvasWidget-DplsGt-k.cjs.map} +1 -1
  25. package/dist/{CanvasdotWidget-D1yQLRDN.cjs → CanvasdotWidget-CLzrz9dr.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-D1yQLRDN.cjs.map → CanvasdotWidget-CLzrz9dr.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-DxuFGoWt.js → CanvasdotWidget-eZuMgkhL.js} +2 -2
  28. package/dist/{CanvasdotWidget-DxuFGoWt.js.map → CanvasdotWidget-eZuMgkhL.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-D8DConb8.cjs → CanvasimageWidget-66HcpffG.cjs} +2 -2
  30. package/dist/{CanvasimageWidget-D8DConb8.cjs.map → CanvasimageWidget-66HcpffG.cjs.map} +1 -1
  31. package/dist/{CanvasimageWidget-B_JxCI_f.js → CanvasimageWidget-COv_Qnc8.js} +3 -3
  32. package/dist/{CanvasimageWidget-B_JxCI_f.js.map → CanvasimageWidget-COv_Qnc8.js.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-DwHIZzWo.js → CanvasimagevalueWidget-BhuUqLOo.js} +3 -3
  34. package/dist/{CanvasimagevalueWidget-DwHIZzWo.js.map → CanvasimagevalueWidget-BhuUqLOo.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-BL08pdLh.cjs → CanvasimagevalueWidget-DcoH1Rzz.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-BL08pdLh.cjs.map → CanvasimagevalueWidget-DcoH1Rzz.cjs.map} +1 -1
  37. package/dist/CanvaslabelWidget-DtvbgeYH.js +27 -0
  38. package/dist/CanvaslabelWidget-DtvbgeYH.js.map +1 -0
  39. package/dist/CanvaslabelWidget-wcraOzwr.cjs +2 -0
  40. package/dist/CanvaslabelWidget-wcraOzwr.cjs.map +1 -0
  41. package/dist/{CanvaslabelvalueWidget-D1-kZsi-.js → CanvaslabelvalueWidget-C_FRIeNb.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-D1-kZsi-.js.map → CanvaslabelvalueWidget-C_FRIeNb.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-BhL55tjO.cjs → CanvaslabelvalueWidget-CkkDoL8i.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-BhL55tjO.cjs.map → CanvaslabelvalueWidget-CkkDoL8i.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-Din8LMyF.js → CanvaslineWidget-D1K_6mAY.js} +2 -2
  46. package/dist/{CanvaslineWidget-Din8LMyF.js.map → CanvaslineWidget-D1K_6mAY.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-DtkdP3Bb.cjs → CanvaslineWidget-Da1Bf4Df.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-DtkdP3Bb.cjs.map → CanvaslineWidget-Da1Bf4Df.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-ELgzjZeY.cjs → CanvaslinevalueWidget-ChY93jQz.cjs} +2 -2
  50. package/dist/{CanvaslinevalueWidget-ELgzjZeY.cjs.map → CanvaslinevalueWidget-ChY93jQz.cjs.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-DOrasE2j.js → CanvaslinevalueWidget-D4eaxWhR.js} +2 -2
  52. package/dist/{CanvaslinevalueWidget-DOrasE2j.js.map → CanvaslinevalueWidget-D4eaxWhR.js.map} +1 -1
  53. package/dist/{CheckbuttonWidget-A07FryqU.js → CheckbuttonWidget-ByxMDkiS.js} +2 -2
  54. package/dist/{CheckbuttonWidget-A07FryqU.js.map → CheckbuttonWidget-ByxMDkiS.js.map} +1 -1
  55. package/dist/{CheckbuttonWidget-BFjaAmt-.cjs → CheckbuttonWidget-C1iDNOXO.cjs} +2 -2
  56. package/dist/{CheckbuttonWidget-BFjaAmt-.cjs.map → CheckbuttonWidget-C1iDNOXO.cjs.map} +1 -1
  57. package/dist/{ClassificationBanners-ClraI2Ns.js → ClassificationBanners-By6aaadq.js} +2 -2
  58. package/dist/{ClassificationBanners-ClraI2Ns.js.map → ClassificationBanners-By6aaadq.js.map} +1 -1
  59. package/dist/{ClassificationBanners-DCL0KBCW.cjs → ClassificationBanners-D0wqqFTp.cjs} +2 -2
  60. package/dist/{ClassificationBanners-DCL0KBCW.cjs.map → ClassificationBanners-D0wqqFTp.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-CqZ79bCh.cjs → ComboboxWidget-B6kRwkHm.cjs} +2 -2
  62. package/dist/{ComboboxWidget-CqZ79bCh.cjs.map → ComboboxWidget-B6kRwkHm.cjs.map} +1 -1
  63. package/dist/{ComboboxWidget-xayce-aY.js → ComboboxWidget-CAGxGv2r.js} +2 -2
  64. package/dist/{ComboboxWidget-xayce-aY.js.map → ComboboxWidget-CAGxGv2r.js.map} +1 -1
  65. package/dist/{CriticalCmdDialog-ne9rOh2L.js → CriticalCmdDialog-BOA6-qrE.js} +4 -4
  66. package/dist/{CriticalCmdDialog-ne9rOh2L.js.map → CriticalCmdDialog-BOA6-qrE.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-DmhxVXdn.cjs → CriticalCmdDialog-DB9iMK3r.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-DmhxVXdn.cjs.map → CriticalCmdDialog-DB9iMK3r.cjs.map} +1 -1
  69. package/dist/{DateWidget-xU2zuIE3.cjs → DateWidget-C3iCuWog.cjs} +2 -2
  70. package/dist/{DateWidget-xU2zuIE3.cjs.map → DateWidget-C3iCuWog.cjs.map} +1 -1
  71. package/dist/{DateWidget-DrYZJta_.js → DateWidget-DkNWx28s.js} +4 -4
  72. package/dist/{DateWidget-DrYZJta_.js.map → DateWidget-DkNWx28s.js.map} +1 -1
  73. package/dist/{DetailsDialog-V6X078bY.cjs → DetailsDialog-C0q3d_JF.cjs} +2 -2
  74. package/dist/{DetailsDialog-V6X078bY.cjs.map → DetailsDialog-C0q3d_JF.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-CFCaJZWz.js → DetailsDialog-F4KgYM6m.js} +10 -10
  76. package/dist/{DetailsDialog-CFCaJZWz.js.map → DetailsDialog-F4KgYM6m.js.map} +1 -1
  77. package/dist/EventListDialog-CDZFdKNU.cjs +2 -0
  78. package/dist/EventListDialog-CDZFdKNU.cjs.map +1 -0
  79. package/dist/{EventListDialog-CIc8RCyY.js → EventListDialog-g0Y3PS7i.js} +26 -23
  80. package/dist/EventListDialog-g0Y3PS7i.js.map +1 -0
  81. package/dist/{FilechecksumWidget-CTf0XGST.js → FilechecksumWidget-DSfNEnDJ.js} +6 -6
  82. package/dist/{FilechecksumWidget-CTf0XGST.js.map → FilechecksumWidget-DSfNEnDJ.js.map} +1 -1
  83. package/dist/{FilechecksumWidget-JeWqA6dh.cjs → FilechecksumWidget-DxpkQwol.cjs} +2 -2
  84. package/dist/{FilechecksumWidget-JeWqA6dh.cjs.map → FilechecksumWidget-DxpkQwol.cjs.map} +1 -1
  85. package/dist/{FiledisplayWidget-DLJuesmU.js → FiledisplayWidget-D2cxMmrP.js} +5 -5
  86. package/dist/{FiledisplayWidget-DLJuesmU.js.map → FiledisplayWidget-D2cxMmrP.js.map} +1 -1
  87. package/dist/{FiledisplayWidget-B6XFz4P6.cjs → FiledisplayWidget-DZ186686.cjs} +2 -2
  88. package/dist/{FiledisplayWidget-B6XFz4P6.cjs.map → FiledisplayWidget-DZ186686.cjs.map} +1 -1
  89. package/dist/{FormatvalueWidget-DODmUWPH.js → FormatvalueWidget-6-bj_PJO.js} +3 -3
  90. package/dist/{FormatvalueWidget-DODmUWPH.js.map → FormatvalueWidget-6-bj_PJO.js.map} +1 -1
  91. package/dist/{FormatvalueWidget-DHHKnH8A.cjs → FormatvalueWidget-DYvEvnXQ.cjs} +2 -2
  92. package/dist/{FormatvalueWidget-DHHKnH8A.cjs.map → FormatvalueWidget-DYvEvnXQ.cjs.map} +1 -1
  93. package/dist/{Graph-Cwghj5Pc.js → Graph-Cz0Ns1FD.js} +9 -9
  94. package/dist/{Graph-Cwghj5Pc.js.map → Graph-Cz0Ns1FD.js.map} +1 -1
  95. package/dist/{Graph-BtMRutcx.cjs → Graph-Dz9GecGm.cjs} +2 -2
  96. package/dist/{Graph-BtMRutcx.cjs.map → Graph-Dz9GecGm.cjs.map} +1 -1
  97. package/dist/{GraphWidget-Rc-fnHCt.js → GraphWidget-COXK3Dab.js} +5 -5
  98. package/dist/{GraphWidget-Rc-fnHCt.js.map → GraphWidget-COXK3Dab.js.map} +1 -1
  99. package/dist/{GraphWidget-CROq9BtI.cjs → GraphWidget-Duz0GLrA.cjs} +2 -2
  100. package/dist/{GraphWidget-CROq9BtI.cjs.map → GraphWidget-Duz0GLrA.cjs.map} +1 -1
  101. package/dist/{HorizontalWidget-CZqN6UYp.js → HorizontalWidget-C9UFBPsk.js} +2 -2
  102. package/dist/{HorizontalWidget-CZqN6UYp.js.map → HorizontalWidget-C9UFBPsk.js.map} +1 -1
  103. package/dist/{HorizontalWidget-TdOhYEM1.cjs → HorizontalWidget-DXqgBfii.cjs} +2 -2
  104. package/dist/{HorizontalWidget-TdOhYEM1.cjs.map → HorizontalWidget-DXqgBfii.cjs.map} +1 -1
  105. package/dist/{HorizontalboxWidget-JzKHl3o_.cjs → HorizontalboxWidget-B-7LJM-K.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-JzKHl3o_.cjs.map → HorizontalboxWidget-B-7LJM-K.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-BV7cyhwN.js → HorizontalboxWidget-CWLfmRtr.js} +5 -5
  108. package/dist/{HorizontalboxWidget-BV7cyhwN.js.map → HorizontalboxWidget-CWLfmRtr.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-Bln3Q-pv.cjs → HorizontallineWidget-CQ_PbiXH.cjs} +2 -2
  110. package/dist/{HorizontallineWidget-Bln3Q-pv.cjs.map → HorizontallineWidget-CQ_PbiXH.cjs.map} +1 -1
  111. package/dist/{HorizontallineWidget-ChDLR_8D.js → HorizontallineWidget-DeFkOaYO.js} +2 -2
  112. package/dist/{HorizontallineWidget-ChDLR_8D.js.map → HorizontallineWidget-DeFkOaYO.js.map} +1 -1
  113. package/dist/{IframeWidget-DmCr3YW6.cjs → IframeWidget-BAIs-bzc.cjs} +2 -2
  114. package/dist/{IframeWidget-DmCr3YW6.cjs.map → IframeWidget-BAIs-bzc.cjs.map} +1 -1
  115. package/dist/{IframeWidget-BdOS5sm_.js → IframeWidget-Bn9eGzrq.js} +2 -2
  116. package/dist/{IframeWidget-BdOS5sm_.js.map → IframeWidget-Bn9eGzrq.js.map} +1 -1
  117. package/dist/{ImageLoader-D0-l7mY3.cjs → ImageLoader-C8ZJSOzF.cjs} +2 -2
  118. package/dist/{ImageLoader-D0-l7mY3.cjs.map → ImageLoader-C8ZJSOzF.cjs.map} +1 -1
  119. package/dist/{ImageLoader-CnlQ4xLd.js → ImageLoader-_gAudhVo.js} +2 -2
  120. package/dist/{ImageLoader-CnlQ4xLd.js.map → ImageLoader-_gAudhVo.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-B-TRYlMs.cjs → ImageviewerWidget-BDxMpWzy.cjs} +2 -2
  122. package/dist/{ImageviewerWidget-B-TRYlMs.cjs.map → ImageviewerWidget-BDxMpWzy.cjs.map} +1 -1
  123. package/dist/{ImageviewerWidget-DoJBe5eZ.js → ImageviewerWidget-BUWhF32Z.js} +2 -2
  124. package/dist/{ImageviewerWidget-DoJBe5eZ.js.map → ImageviewerWidget-BUWhF32Z.js.map} +1 -1
  125. package/dist/{InterfacesTab-CITUnMac.js → InterfacesTab-CZsnR6xB.js} +4 -4
  126. package/dist/{InterfacesTab-CITUnMac.js.map → InterfacesTab-CZsnR6xB.js.map} +1 -1
  127. package/dist/{InterfacesTab-CIg-DS_I.cjs → InterfacesTab-oFTUZfti.cjs} +2 -2
  128. package/dist/{InterfacesTab-CIg-DS_I.cjs.map → InterfacesTab-oFTUZfti.cjs.map} +1 -1
  129. package/dist/{LabelWidget-DYwcB_S4.js → LabelWidget-BhzkN06D.js} +2 -2
  130. package/dist/{LabelWidget-DYwcB_S4.js.map → LabelWidget-BhzkN06D.js.map} +1 -1
  131. package/dist/{LabelWidget-B695rUxB.cjs → LabelWidget-agzCO9Rx.cjs} +2 -2
  132. package/dist/{LabelWidget-B695rUxB.cjs.map → LabelWidget-agzCO9Rx.cjs.map} +1 -1
  133. package/dist/{LabelledWidget-ubrlqe_n.cjs → LabelledWidget-CmlB3Yd-.cjs} +2 -2
  134. package/dist/{LabelledWidget-ubrlqe_n.cjs.map → LabelledWidget-CmlB3Yd-.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-D4N2gPxJ.js → LabelledWidget-vx8NvW1b.js} +4 -4
  136. package/dist/{LabelledWidget-D4N2gPxJ.js.map → LabelledWidget-vx8NvW1b.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-y__BgVQk.cjs → LabelprogressbarWidget-BB-420i0.cjs} +2 -2
  138. package/dist/{LabelprogressbarWidget-y__BgVQk.cjs.map → LabelprogressbarWidget-BB-420i0.cjs.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-CRnteLAo.js → LabelprogressbarWidget-t5PvKuS4.js} +4 -4
  140. package/dist/{LabelprogressbarWidget-CRnteLAo.js.map → LabelprogressbarWidget-t5PvKuS4.js.map} +1 -1
  141. package/dist/{LabelsparklineWidget-B7h0ndrm.cjs → LabelsparklineWidget-CGg51THo.cjs} +2 -2
  142. package/dist/{LabelsparklineWidget-B7h0ndrm.cjs.map → LabelsparklineWidget-CGg51THo.cjs.map} +1 -1
  143. package/dist/{LabelsparklineWidget-Bbjjio1S.js → LabelsparklineWidget-CebbEH-j.js} +4 -4
  144. package/dist/{LabelsparklineWidget-Bbjjio1S.js.map → LabelsparklineWidget-CebbEH-j.js.map} +1 -1
  145. package/dist/{LabelvalueWidget-Bc6HtTMO.js → LabelvalueWidget-Cbs1DBK2.js} +4 -4
  146. package/dist/{LabelvalueWidget-Bc6HtTMO.js.map → LabelvalueWidget-Cbs1DBK2.js.map} +1 -1
  147. package/dist/{LabelvalueWidget-BE8r18n2.cjs → LabelvalueWidget-xIp1W4ZB.cjs} +2 -2
  148. package/dist/{LabelvalueWidget-BE8r18n2.cjs.map → LabelvalueWidget-xIp1W4ZB.cjs.map} +1 -1
  149. package/dist/{LabelvaluedescWidget-D5aDNr1o.js → LabelvaluedescWidget-B7OIOGc0.js} +5 -5
  150. package/dist/{LabelvaluedescWidget-D5aDNr1o.js.map → LabelvaluedescWidget-B7OIOGc0.js.map} +1 -1
  151. package/dist/{LabelvaluedescWidget-CEZeqLAB.cjs → LabelvaluedescWidget-DE5cZcfN.cjs} +2 -2
  152. package/dist/{LabelvaluedescWidget-CEZeqLAB.cjs.map → LabelvaluedescWidget-DE5cZcfN.cjs.map} +1 -1
  153. package/dist/{LabelvaluelimitsbarWidget-CMnJoNKz.js → LabelvaluelimitsbarWidget-C57kf-oQ.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-CMnJoNKz.js.map → LabelvaluelimitsbarWidget-C57kf-oQ.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BhLZsBy5.cjs → LabelvaluelimitsbarWidget-RlJt1ReS.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-BhLZsBy5.cjs.map → LabelvaluelimitsbarWidget-RlJt1ReS.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-7MEUPhe4.cjs → LabelvaluelimitscolumnWidget-B-TbUVpY.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-7MEUPhe4.cjs.map → LabelvaluelimitscolumnWidget-B-TbUVpY.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-R5ofG4q1.js → LabelvaluelimitscolumnWidget-BRlNDEqp.js} +5 -5
  160. package/dist/{LabelvaluelimitscolumnWidget-R5ofG4q1.js.map → LabelvaluelimitscolumnWidget-BRlNDEqp.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-49fO9s25.cjs → LabelvaluerangebarWidget-BK08A6_N.cjs} +2 -2
  162. package/dist/{LabelvaluerangebarWidget-49fO9s25.cjs.map → LabelvaluerangebarWidget-BK08A6_N.cjs.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-Qa3R2_4p.js → LabelvaluerangebarWidget-Pt_evm3v.js} +4 -4
  164. package/dist/{LabelvaluerangebarWidget-Qa3R2_4p.js.map → LabelvaluerangebarWidget-Pt_evm3v.js.map} +1 -1
  165. package/dist/{Layout-BBLYT0gE.js → Layout-CKmC50QZ.js} +2 -2
  166. package/dist/{Layout-BBLYT0gE.js.map → Layout-CKmC50QZ.js.map} +1 -1
  167. package/dist/{Layout-CilReWuB.cjs → Layout-CkSElGRo.cjs} +2 -2
  168. package/dist/{Layout-CilReWuB.cjs.map → Layout-CkSElGRo.cjs.map} +1 -1
  169. package/dist/{LedWidget-CL2dOxb7.js → LedWidget-D1lmNXpi.js} +5 -5
  170. package/dist/{LedWidget-CL2dOxb7.js.map → LedWidget-D1lmNXpi.js.map} +1 -1
  171. package/dist/{LedWidget-CioTReXJ.cjs → LedWidget-DaFZrKbt.cjs} +2 -2
  172. package/dist/{LedWidget-CioTReXJ.cjs.map → LedWidget-DaFZrKbt.cjs.map} +1 -1
  173. package/dist/{LimitsBar-Akh9OBX8.cjs → LimitsBar-Bkv0A0XE.cjs} +2 -2
  174. package/dist/{LimitsBar-Akh9OBX8.cjs.map → LimitsBar-Bkv0A0XE.cjs.map} +1 -1
  175. package/dist/{LimitsBar-59_qNqi8.js → LimitsBar-D5IZu7eX.js} +2 -2
  176. package/dist/{LimitsBar-59_qNqi8.js.map → LimitsBar-D5IZu7eX.js.map} +1 -1
  177. package/dist/{LimitsbarWidget-Bs2svA1K.cjs → LimitsbarWidget-B_cIeVXW.cjs} +2 -2
  178. package/dist/{LimitsbarWidget-Bs2svA1K.cjs.map → LimitsbarWidget-B_cIeVXW.cjs.map} +1 -1
  179. package/dist/{LimitsbarWidget-C0N2611W.js → LimitsbarWidget-VpxQXE-e.js} +3 -3
  180. package/dist/{LimitsbarWidget-C0N2611W.js.map → LimitsbarWidget-VpxQXE-e.js.map} +1 -1
  181. package/dist/{LimitscolorWidget-GfNCPo3i.js → LimitscolorWidget-79P41CX7.js} +5 -5
  182. package/dist/{LimitscolorWidget-GfNCPo3i.js.map → LimitscolorWidget-79P41CX7.js.map} +1 -1
  183. package/dist/{LimitscolorWidget-G_3Sc7Y3.cjs → LimitscolorWidget-z2tnAyFH.cjs} +2 -2
  184. package/dist/{LimitscolorWidget-G_3Sc7Y3.cjs.map → LimitscolorWidget-z2tnAyFH.cjs.map} +1 -1
  185. package/dist/{LimitscolumnWidget-ut6NX68S.js → LimitscolumnWidget-BFDXhJeZ.js} +2 -2
  186. package/dist/{LimitscolumnWidget-ut6NX68S.js.map → LimitscolumnWidget-BFDXhJeZ.js.map} +1 -1
  187. package/dist/{LimitscolumnWidget-B3OcZYau.cjs → LimitscolumnWidget-ClnN8sMJ.cjs} +2 -2
  188. package/dist/{LimitscolumnWidget-B3OcZYau.cjs.map → LimitscolumnWidget-ClnN8sMJ.cjs.map} +1 -1
  189. package/dist/{LinegraphWidget-BDda9hjY.cjs → LinegraphWidget-C-yffvsK.cjs} +2 -2
  190. package/dist/{LinegraphWidget-BDda9hjY.cjs.map → LinegraphWidget-C-yffvsK.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-DaCyvdnI.js → LinegraphWidget-VqkpOlws.js} +5 -5
  192. package/dist/{LinegraphWidget-DaCyvdnI.js.map → LinegraphWidget-VqkpOlws.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-Cni63alW.js → MatrixbycolumnsWidget--ihvirDP.js} +3 -3
  194. package/dist/{MatrixbycolumnsWidget-Cni63alW.js.map → MatrixbycolumnsWidget--ihvirDP.js.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-DibzZkF7.cjs → MatrixbycolumnsWidget-DGqVDsdg.cjs} +2 -2
  196. package/dist/{MatrixbycolumnsWidget-DibzZkF7.cjs.map → MatrixbycolumnsWidget-DGqVDsdg.cjs.map} +1 -1
  197. package/dist/{MicroservicesTab-CV_35ag8.cjs → MicroservicesTab-BEGNdUG3.cjs} +3 -3
  198. package/dist/{MicroservicesTab-CV_35ag8.cjs.map → MicroservicesTab-BEGNdUG3.cjs.map} +1 -1
  199. package/dist/{MicroservicesTab-gCXt9Jlh.js → MicroservicesTab-CQPpb7j1.js} +15 -15
  200. package/dist/{MicroservicesTab-gCXt9Jlh.js.map → MicroservicesTab-CQPpb7j1.js.map} +1 -1
  201. package/dist/{OpenC3TimePicker-WVlNQdKk.js → OpenC3TimePicker-B0lAIU91.js} +3 -3
  202. package/dist/{OpenC3TimePicker-WVlNQdKk.js.map → OpenC3TimePicker-B0lAIU91.js.map} +1 -1
  203. package/dist/{OpenC3TimePicker-BAzvaP-g.cjs → OpenC3TimePicker-DXhyDkOv.cjs} +2 -2
  204. package/dist/{OpenC3TimePicker-BAzvaP-g.cjs.map → OpenC3TimePicker-DXhyDkOv.cjs.map} +1 -1
  205. package/dist/{Openc3Screen-GLWnn7RG.cjs → Openc3Screen-051vwmN8.cjs} +5 -5
  206. package/dist/{Openc3Screen-GLWnn7RG.cjs.map → Openc3Screen-051vwmN8.cjs.map} +1 -1
  207. package/dist/{Openc3Screen-C4DL3LBY.js → Openc3Screen-Bew5BPgc.js} +8 -8
  208. package/dist/{Openc3Screen-C4DL3LBY.js.map → Openc3Screen-Bew5BPgc.js.map} +1 -1
  209. package/dist/{OutputDialog-DN4Qy6LH.cjs → OutputDialog-CgnRA-f-.cjs} +2 -2
  210. package/dist/{OutputDialog-DN4Qy6LH.cjs.map → OutputDialog-CgnRA-f-.cjs.map} +1 -1
  211. package/dist/{OutputDialog-wOewjnk2.js → OutputDialog-DtrpwjGL.js} +3 -3
  212. package/dist/{OutputDialog-wOewjnk2.js.map → OutputDialog-DtrpwjGL.js.map} +1 -1
  213. package/dist/{PackagesTab-D6UNkpw9.cjs → PackagesTab-BBFiRQN-.cjs} +2 -2
  214. package/dist/{PackagesTab-D6UNkpw9.cjs.map → PackagesTab-BBFiRQN-.cjs.map} +1 -1
  215. package/dist/{PackagesTab-DmsuQSmU.js → PackagesTab-DQ5s3nfh.js} +21 -21
  216. package/dist/{PackagesTab-DmsuQSmU.js.map → PackagesTab-DQ5s3nfh.js.map} +1 -1
  217. package/dist/{PluginsTab-CLQ0EbDl.js → PluginsTab-1tlTx4k1.js} +7 -7
  218. package/dist/{PluginsTab-CLQ0EbDl.js.map → PluginsTab-1tlTx4k1.js.map} +1 -1
  219. package/dist/{PluginsTab-D_cFEd7L.cjs → PluginsTab-DN_iK1D9.cjs} +4 -4
  220. package/dist/{PluginsTab-D_cFEd7L.cjs.map → PluginsTab-DN_iK1D9.cjs.map} +1 -1
  221. package/dist/{ProgressbarWidget-CYyOjBLI.cjs → ProgressbarWidget-B-ScYWwv.cjs} +2 -2
  222. package/dist/{ProgressbarWidget-CYyOjBLI.cjs.map → ProgressbarWidget-B-ScYWwv.cjs.map} +1 -1
  223. package/dist/{ProgressbarWidget-BWqCsk87.js → ProgressbarWidget-BIB3r9SL.js} +2 -2
  224. package/dist/{ProgressbarWidget-BWqCsk87.js.map → ProgressbarWidget-BIB3r9SL.js.map} +1 -1
  225. package/dist/{RadiobuttonWidget-Dza2r34f.js → RadiobuttonWidget-C5rxLM7K.js} +2 -2
  226. package/dist/{RadiobuttonWidget-Dza2r34f.js.map → RadiobuttonWidget-C5rxLM7K.js.map} +1 -1
  227. package/dist/{RadiobuttonWidget-zyCcviRt.cjs → RadiobuttonWidget-EBzI13by.cjs} +2 -2
  228. package/dist/{RadiobuttonWidget-zyCcviRt.cjs.map → RadiobuttonWidget-EBzI13by.cjs.map} +1 -1
  229. package/dist/{RadiogroupWidget-BK-b4dDV.cjs → RadiogroupWidget-BnT62bxt.cjs} +2 -2
  230. package/dist/{RadiogroupWidget-BK-b4dDV.cjs.map → RadiogroupWidget-BnT62bxt.cjs.map} +1 -1
  231. package/dist/{RadiogroupWidget-DWmZMNmr.js → RadiogroupWidget-CciTCv1U.js} +2 -2
  232. package/dist/{RadiogroupWidget-DWmZMNmr.js.map → RadiogroupWidget-CciTCv1U.js.map} +1 -1
  233. package/dist/{RangebarWidget-BKTLrzKd.cjs → RangebarWidget-Can_BQBL.cjs} +2 -2
  234. package/dist/{RangebarWidget-BKTLrzKd.cjs.map → RangebarWidget-Can_BQBL.cjs.map} +1 -1
  235. package/dist/{RangebarWidget-DsGCC1x7.js → RangebarWidget-MPQYi2Km.js} +2 -2
  236. package/dist/{RangebarWidget-DsGCC1x7.js.map → RangebarWidget-MPQYi2Km.js.map} +1 -1
  237. package/dist/{RedisTab-2wFbDYIY.cjs → RedisTab-Bkj57lOf.cjs} +2 -2
  238. package/dist/{RedisTab-2wFbDYIY.cjs.map → RedisTab-Bkj57lOf.cjs.map} +1 -1
  239. package/dist/{RedisTab-9hUKvLT7.js → RedisTab-DAeGow_e.js} +2 -2
  240. package/dist/{RedisTab-9hUKvLT7.js.map → RedisTab-DAeGow_e.js.map} +1 -1
  241. package/dist/{RollupWidget-DGElKXm3.js → RollupWidget-CfjGAhzg.js} +2 -2
  242. package/dist/{RollupWidget-DGElKXm3.js.map → RollupWidget-CfjGAhzg.js.map} +1 -1
  243. package/dist/{RollupWidget-B7x7pcGm.cjs → RollupWidget-IDDWGLom.cjs} +2 -2
  244. package/dist/{RollupWidget-B7x7pcGm.cjs.map → RollupWidget-IDDWGLom.cjs.map} +1 -1
  245. package/dist/{RoutersTab-PRDpocd3.cjs → RoutersTab-BtfVCL1C.cjs} +2 -2
  246. package/dist/{RoutersTab-PRDpocd3.cjs.map → RoutersTab-BtfVCL1C.cjs.map} +1 -1
  247. package/dist/{RoutersTab-Dpq_F5it.js → RoutersTab-G4WKtUOo.js} +4 -4
  248. package/dist/{RoutersTab-Dpq_F5it.js.map → RoutersTab-G4WKtUOo.js.map} +1 -1
  249. package/dist/{ScriptChooser-BIPvMV1Z.cjs → ScriptChooser-B6qtMbkx.cjs} +2 -2
  250. package/dist/{ScriptChooser-BIPvMV1Z.cjs.map → ScriptChooser-B6qtMbkx.cjs.map} +1 -1
  251. package/dist/{ScriptChooser-DSb-nUOY.js → ScriptChooser-BwYB6FOa.js} +16 -16
  252. package/dist/{ScriptChooser-DSb-nUOY.js.map → ScriptChooser-BwYB6FOa.js.map} +1 -1
  253. package/dist/{ScrollwindowWidget-CxCp6zl7.cjs → ScrollwindowWidget-BPTaWCGg.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-CxCp6zl7.cjs.map → ScrollwindowWidget-BPTaWCGg.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-BvKT59rV.js → ScrollwindowWidget-CupaygNN.js} +2 -2
  256. package/dist/{ScrollwindowWidget-BvKT59rV.js.map → ScrollwindowWidget-CupaygNN.js.map} +1 -1
  257. package/dist/{SecretsTab-DAZeb63H.js → SecretsTab-C9xAxuwO.js} +4 -4
  258. package/dist/{SecretsTab-DAZeb63H.js.map → SecretsTab-C9xAxuwO.js.map} +1 -1
  259. package/dist/{SecretsTab-CY-73DBl.cjs → SecretsTab-CRC8DUz8.cjs} +2 -2
  260. package/dist/{SecretsTab-CY-73DBl.cjs.map → SecretsTab-CRC8DUz8.cjs.map} +1 -1
  261. package/dist/{SettingsTab-CHcHYnay.js → SettingsTab-BUdeAh4o.js} +5 -5
  262. package/dist/{SettingsTab-CHcHYnay.js.map → SettingsTab-BUdeAh4o.js.map} +1 -1
  263. package/dist/{SettingsTab-BBi3rofi.cjs → SettingsTab-CXoTKykc.cjs} +2 -2
  264. package/dist/{SettingsTab-BBi3rofi.cjs.map → SettingsTab-CXoTKykc.cjs.map} +1 -1
  265. package/dist/{SignalWidget-NxN9VFAv.cjs → SignalWidget-BbXnGcy9.cjs} +2 -2
  266. package/dist/{SignalWidget-NxN9VFAv.cjs.map → SignalWidget-BbXnGcy9.cjs.map} +1 -1
  267. package/dist/{SignalWidget-DRAFunW0.js → SignalWidget-C-qecoTO.js} +2 -2
  268. package/dist/{SignalWidget-DRAFunW0.js.map → SignalWidget-C-qecoTO.js.map} +1 -1
  269. package/dist/{SimpleTextDialog-B9KuFMP5.cjs → SimpleTextDialog-5wMXYOXj.cjs} +2 -2
  270. package/dist/{SimpleTextDialog-B9KuFMP5.cjs.map → SimpleTextDialog-5wMXYOXj.cjs.map} +1 -1
  271. package/dist/{SimpleTextDialog-B7XASoZh.js → SimpleTextDialog-C-0ZC2bs.js} +2 -2
  272. package/dist/{SimpleTextDialog-B7XASoZh.js.map → SimpleTextDialog-C-0ZC2bs.js.map} +1 -1
  273. package/dist/{SpacerWidget-DnRV7NSQ.cjs → SpacerWidget-BSJsjARt.cjs} +2 -2
  274. package/dist/{SpacerWidget-DnRV7NSQ.cjs.map → SpacerWidget-BSJsjARt.cjs.map} +1 -1
  275. package/dist/{SpacerWidget-CUGpXBpA.js → SpacerWidget-VVkOCb6N.js} +2 -2
  276. package/dist/{SpacerWidget-CUGpXBpA.js.map → SpacerWidget-VVkOCb6N.js.map} +1 -1
  277. package/dist/{SparklineWidget-XWxWkTZw.cjs → SparklineWidget-COGPJfbo.cjs} +2 -2
  278. package/dist/{SparklineWidget-XWxWkTZw.cjs.map → SparklineWidget-COGPJfbo.cjs.map} +1 -1
  279. package/dist/{SparklineWidget-SBWjRrqq.js → SparklineWidget-Dsmn38z_.js} +5 -5
  280. package/dist/{SparklineWidget-SBWjRrqq.js.map → SparklineWidget-Dsmn38z_.js.map} +1 -1
  281. package/dist/{TabbookWidget-yfZK_n_2.cjs → TabbookWidget-B2geV2Qi.cjs} +2 -2
  282. package/dist/{TabbookWidget-yfZK_n_2.cjs.map → TabbookWidget-B2geV2Qi.cjs.map} +1 -1
  283. package/dist/{TabbookWidget-7l6fPoRA.js → TabbookWidget-CXklff-l.js} +2 -2
  284. package/dist/{TabbookWidget-7l6fPoRA.js.map → TabbookWidget-CXklff-l.js.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-QPHy-p2u.js → TargetPacketItemChooser-DDHuygCl.js} +3 -3
  286. package/dist/{TargetPacketItemChooser-QPHy-p2u.js.map → TargetPacketItemChooser-DDHuygCl.js.map} +1 -1
  287. package/dist/{TargetPacketItemChooser-CvDABqt7.cjs → TargetPacketItemChooser-DgO3VgdY.cjs} +2 -2
  288. package/dist/{TargetPacketItemChooser-CvDABqt7.cjs.map → TargetPacketItemChooser-DgO3VgdY.cjs.map} +1 -1
  289. package/dist/{TargetsTab-DcHwCcSU.js → TargetsTab-Ci4cOsIa.js} +13 -13
  290. package/dist/{TargetsTab-DcHwCcSU.js.map → TargetsTab-Ci4cOsIa.js.map} +1 -1
  291. package/dist/{TargetsTab-GpduFeiA.cjs → TargetsTab-DSSFGLD_.cjs} +2 -2
  292. package/dist/{TargetsTab-GpduFeiA.cjs.map → TargetsTab-DSSFGLD_.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-CcvPtdyE.cjs → TextboxWidget-B9vBiTFU.cjs} +2 -2
  294. package/dist/{TextboxWidget-CcvPtdyE.cjs.map → TextboxWidget-B9vBiTFU.cjs.map} +1 -1
  295. package/dist/{TextboxWidget-Qb0TNt4Y.js → TextboxWidget-CHs2VYIv.js} +5 -5
  296. package/dist/{TextboxWidget-Qb0TNt4Y.js.map → TextboxWidget-CHs2VYIv.js.map} +1 -1
  297. package/dist/{TextfieldWidget-D5v1Endh.cjs → TextfieldWidget-CHf6ER_G.cjs} +2 -2
  298. package/dist/{TextfieldWidget-D5v1Endh.cjs.map → TextfieldWidget-CHf6ER_G.cjs.map} +1 -1
  299. package/dist/{TextfieldWidget-DcSGRfnF.js → TextfieldWidget-CdANAW-6.js} +2 -2
  300. package/dist/{TextfieldWidget-DcSGRfnF.js.map → TextfieldWidget-CdANAW-6.js.map} +1 -1
  301. package/dist/{TimeWidget-j18gWgF-.cjs → TimeWidget-C8Za7zUx.cjs} +2 -2
  302. package/dist/{TimeWidget-j18gWgF-.cjs.map → TimeWidget-C8Za7zUx.cjs.map} +1 -1
  303. package/dist/{TimeWidget-aoMkDgRR.js → TimeWidget-D0xT1wXR.js} +5 -5
  304. package/dist/{TimeWidget-aoMkDgRR.js.map → TimeWidget-D0xT1wXR.js.map} +1 -1
  305. package/dist/{TitleWidget-C8b9Vp5r.js → TitleWidget-68NWCcXB.js} +2 -2
  306. package/dist/{TitleWidget-C8b9Vp5r.js.map → TitleWidget-68NWCcXB.js.map} +1 -1
  307. package/dist/{TitleWidget-CNZqa48C.cjs → TitleWidget-D0PYh7V7.cjs} +2 -2
  308. package/dist/{TitleWidget-CNZqa48C.cjs.map → TitleWidget-D0PYh7V7.cjs.map} +1 -1
  309. package/dist/{ToolsTab-MCjy5Bf6.js → ToolsTab-BCvmMDIZ.js} +4 -4
  310. package/dist/{ToolsTab-MCjy5Bf6.js.map → ToolsTab-BCvmMDIZ.js.map} +1 -1
  311. package/dist/{ToolsTab-C7ldaGOD.cjs → ToolsTab-UwVIeP-J.cjs} +2 -2
  312. package/dist/{ToolsTab-C7ldaGOD.cjs.map → ToolsTab-UwVIeP-J.cjs.map} +1 -1
  313. package/dist/{TopBar-Dv9AvR6L.cjs → TopBar-BhrJBXut.cjs} +2 -2
  314. package/dist/{TopBar-Dv9AvR6L.cjs.map → TopBar-BhrJBXut.cjs.map} +1 -1
  315. package/dist/{TopBar-S3ydRxjf.js → TopBar-Cg0kJvmG.js} +2 -2
  316. package/dist/{TopBar-S3ydRxjf.js.map → TopBar-Cg0kJvmG.js.map} +1 -1
  317. package/dist/{TsdbTab-4OaejSum.js → TsdbTab-BytqwnkN.js} +2 -2
  318. package/dist/{TsdbTab-4OaejSum.js.map → TsdbTab-BytqwnkN.js.map} +1 -1
  319. package/dist/{TsdbTab-d1l9Ak2R.cjs → TsdbTab-DatsFS_R.cjs} +2 -2
  320. package/dist/{TsdbTab-d1l9Ak2R.cjs.map → TsdbTab-DatsFS_R.cjs.map} +1 -1
  321. package/dist/{UpgradeToEnterpriseDialog-CkHl-BAB.js → UpgradeToEnterpriseDialog-B0lZup6_.js} +2 -2
  322. package/dist/{UpgradeToEnterpriseDialog-CkHl-BAB.js.map → UpgradeToEnterpriseDialog-B0lZup6_.js.map} +1 -1
  323. package/dist/{UpgradeToEnterpriseDialog-Cd1ulQkq.cjs → UpgradeToEnterpriseDialog-BFhTiNXm.cjs} +2 -2
  324. package/dist/{UpgradeToEnterpriseDialog-Cd1ulQkq.cjs.map → UpgradeToEnterpriseDialog-BFhTiNXm.cjs.map} +1 -1
  325. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-hv0QWZ6Z.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DOidODWT.cjs} +76 -76
  326. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-hv0QWZ6Z.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DOidODWT.cjs.map} +1 -1
  327. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js} +1862 -1862
  328. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-C6eLx1ow.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-JHbHqvBt.js.map} +1 -1
  329. package/dist/{VWidget-CMHOOByt.cjs → VWidget-BZqlpdEk.cjs} +2 -2
  330. package/dist/{VWidget-CMHOOByt.cjs.map → VWidget-BZqlpdEk.cjs.map} +1 -1
  331. package/dist/{VWidget-BgNciXK1.js → VWidget-oMbywhLA.js} +5 -5
  332. package/dist/{VWidget-BgNciXK1.js.map → VWidget-oMbywhLA.js.map} +1 -1
  333. package/dist/{ValueWidget-B1OvCmXK.js → ValueWidget-B1aGUBP7.js} +5 -5
  334. package/dist/{ValueWidget-B1OvCmXK.js.map → ValueWidget-B1aGUBP7.js.map} +1 -1
  335. package/dist/{ValueWidget-C3T9tAUT.cjs → ValueWidget-CuMPXR-z.cjs} +2 -2
  336. package/dist/{ValueWidget-C3T9tAUT.cjs.map → ValueWidget-CuMPXR-z.cjs.map} +1 -1
  337. package/dist/{ValuelimitsbarWidget-CUd9P_Xg.js → ValuelimitsbarWidget-B7KcRjLS.js} +4 -4
  338. package/dist/{ValuelimitsbarWidget-CUd9P_Xg.js.map → ValuelimitsbarWidget-B7KcRjLS.js.map} +1 -1
  339. package/dist/{ValuelimitsbarWidget-DzJYkWOa.cjs → ValuelimitsbarWidget-elJnDGWA.cjs} +2 -2
  340. package/dist/{ValuelimitsbarWidget-DzJYkWOa.cjs.map → ValuelimitsbarWidget-elJnDGWA.cjs.map} +1 -1
  341. package/dist/{ValuelimitscolumnWidget-CbThSMma.js → ValuelimitscolumnWidget-BVt6nLXq.js} +4 -4
  342. package/dist/{ValuelimitscolumnWidget-CbThSMma.js.map → ValuelimitscolumnWidget-BVt6nLXq.js.map} +1 -1
  343. package/dist/{ValuelimitscolumnWidget-Dx_im9Qk.cjs → ValuelimitscolumnWidget-DyQjC-h-.cjs} +2 -2
  344. package/dist/{ValuelimitscolumnWidget-Dx_im9Qk.cjs.map → ValuelimitscolumnWidget-DyQjC-h-.cjs.map} +1 -1
  345. package/dist/{ValuerangebarWidget-C8n2hb3N.cjs → ValuerangebarWidget-E1xvTwhi.cjs} +2 -2
  346. package/dist/{ValuerangebarWidget-C8n2hb3N.cjs.map → ValuerangebarWidget-E1xvTwhi.cjs.map} +1 -1
  347. package/dist/{ValuerangebarWidget-DjL4ze3d.js → ValuerangebarWidget-uVZEI32U.js} +4 -4
  348. package/dist/{ValuerangebarWidget-DjL4ze3d.js.map → ValuerangebarWidget-uVZEI32U.js.map} +1 -1
  349. package/dist/{VerticalWidget-C81rZFvu.cjs → VerticalWidget-BxL_5yEC.cjs} +2 -2
  350. package/dist/{VerticalWidget-C81rZFvu.cjs.map → VerticalWidget-BxL_5yEC.cjs.map} +1 -1
  351. package/dist/{VerticalWidget-V5-vGq7l.js → VerticalWidget-DlftYBjH.js} +2 -2
  352. package/dist/{VerticalWidget-V5-vGq7l.js.map → VerticalWidget-DlftYBjH.js.map} +1 -1
  353. package/dist/{VerticalboxWidget-DQerkhfd.cjs → VerticalboxWidget-BHP0SPpV.cjs} +2 -2
  354. package/dist/{VerticalboxWidget-DQerkhfd.cjs.map → VerticalboxWidget-BHP0SPpV.cjs.map} +1 -1
  355. package/dist/{VerticalboxWidget-OigMLjH8.js → VerticalboxWidget-C7RrkfY0.js} +5 -5
  356. package/dist/{VerticalboxWidget-OigMLjH8.js.map → VerticalboxWidget-C7RrkfY0.js.map} +1 -1
  357. package/dist/{Widget-BiaunQ83.js → Widget-D_HaosJK.js} +3 -3
  358. package/dist/{Widget-BiaunQ83.js.map → Widget-D_HaosJK.js.map} +1 -1
  359. package/dist/{Widget-D23R5IBP.cjs → Widget-a5Y50rAX.cjs} +2 -2
  360. package/dist/{Widget-D23R5IBP.cjs.map → Widget-a5Y50rAX.cjs.map} +1 -1
  361. package/dist/{addMonths-DI1YMeKj.js → addMonths-8x2Zqxlu.js} +2 -2
  362. package/dist/{addMonths-DI1YMeKj.js.map → addMonths-8x2Zqxlu.js.map} +1 -1
  363. package/dist/{addMonths-SOmDn5_g.cjs → addMonths-BKZ-wlfT.cjs} +2 -2
  364. package/dist/{addMonths-SOmDn5_g.cjs.map → addMonths-BKZ-wlfT.cjs.map} +1 -1
  365. package/dist/components.cjs +1 -1
  366. package/dist/components.js +71 -71
  367. package/dist/{format-DMO5vfrX.cjs → format-MMgAFAGt.cjs} +10 -10
  368. package/dist/format-MMgAFAGt.cjs.map +1 -0
  369. package/dist/{format-BJTVXrSU.js → format-mcuVCYue.js} +921 -911
  370. package/dist/format-mcuVCYue.js.map +1 -0
  371. package/dist/getDefaultOptions-DFvSlHOQ.cjs +2 -0
  372. package/dist/{getDefaultOptions-DM-1w6JL.cjs.map → getDefaultOptions-DFvSlHOQ.cjs.map} +1 -1
  373. package/dist/getDefaultOptions-iOY0zDuv.js +8 -0
  374. package/dist/{getDefaultOptions-CK1Ea9CA.js.map → getDefaultOptions-iOY0zDuv.js.map} +1 -1
  375. package/dist/{index-0c3bHqHD.js → index-AU71Em-T.js} +683 -681
  376. package/dist/index-AU71Em-T.js.map +1 -0
  377. package/dist/{index-fyIAHTXk.js → index-CbFUkAzJ.js} +482 -471
  378. package/dist/index-CbFUkAzJ.js.map +1 -0
  379. package/dist/index-DpGzPeGX.cjs +10 -0
  380. package/dist/index-DpGzPeGX.cjs.map +1 -0
  381. package/dist/index-jFVMElAV.cjs +7 -0
  382. package/dist/index-jFVMElAV.cjs.map +1 -0
  383. package/dist/{parse-DVpJm282.cjs → parse-VYeg4sm9.cjs} +2 -2
  384. package/dist/parse-VYeg4sm9.cjs.map +1 -0
  385. package/dist/{parse-BDajhNCa.js → parse-tBX2kWMh.js} +3 -3
  386. package/dist/parse-tBX2kWMh.js.map +1 -0
  387. package/dist/plugins.cjs +2 -2
  388. package/dist/plugins.cjs.map +1 -1
  389. package/dist/plugins.js +362 -376
  390. package/dist/plugins.js.map +1 -1
  391. package/dist/purify.es-BgN5W7Gm.cjs +4 -0
  392. package/dist/purify.es-BgN5W7Gm.cjs.map +1 -0
  393. package/dist/purify.es-XBlcheTS.js +663 -0
  394. package/dist/purify.es-XBlcheTS.js.map +1 -0
  395. package/dist/{settings-TnQjO9IR.cjs → settings-CekhMYoq.cjs} +2 -2
  396. package/dist/{settings-TnQjO9IR.cjs.map → settings-CekhMYoq.cjs.map} +1 -1
  397. package/dist/{settings-08OS6cx2.js → settings-DZ910lLo.js} +2 -2
  398. package/dist/{settings-08OS6cx2.js.map → settings-DZ910lLo.js.map} +1 -1
  399. package/dist/settingsCache-BTZ8CWTD.js +28 -0
  400. package/dist/{settingsCache-CriaPeNM.js.map → settingsCache-BTZ8CWTD.js.map} +1 -1
  401. package/dist/{settingsCache-Bm4JOm9j.cjs → settingsCache-DmIdInSd.cjs} +2 -2
  402. package/dist/{settingsCache-Bm4JOm9j.cjs.map → settingsCache-DmIdInSd.cjs.map} +1 -1
  403. package/dist/{timeFilters-BacGikeM.cjs → timeFilters-DdEvgzim.cjs} +2 -2
  404. package/dist/{timeFilters-BacGikeM.cjs.map → timeFilters-DdEvgzim.cjs.map} +1 -1
  405. package/dist/{timeFilters-BjNif-pu.js → timeFilters-a8Cma3bj.js} +10 -10
  406. package/dist/{timeFilters-BjNif-pu.js.map → timeFilters-a8Cma3bj.js.map} +1 -1
  407. package/dist/tools/admin.cjs +1 -1
  408. package/dist/tools/admin.js +1 -1
  409. package/dist/tools/base.cjs +1 -1
  410. package/dist/tools/base.cjs.map +1 -1
  411. package/dist/tools/base.js +18 -18
  412. package/dist/tools/base.js.map +1 -1
  413. package/dist/tools/calendar.cjs +1 -1
  414. package/dist/tools/calendar.js +1 -1
  415. package/dist/tools/scriptrunner.cjs +8 -8
  416. package/dist/tools/scriptrunner.cjs.map +1 -1
  417. package/dist/tools/scriptrunner.js +1443 -1389
  418. package/dist/tools/scriptrunner.js.map +1 -1
  419. package/dist/util.cjs +1 -1
  420. package/dist/util.js +2 -2
  421. package/dist/vue-common.css +1 -1
  422. package/dist/widgets.cjs +1 -1
  423. package/dist/widgets.js +64 -64
  424. package/package.json +11 -11
  425. package/dist/CanvaslabelWidget-SuEi9yf4.cjs +0 -2
  426. package/dist/CanvaslabelWidget-SuEi9yf4.cjs.map +0 -1
  427. package/dist/CanvaslabelWidget-Tt4dmAOI.js +0 -23
  428. package/dist/CanvaslabelWidget-Tt4dmAOI.js.map +0 -1
  429. package/dist/EventListDialog-C57w2AlC.cjs +0 -2
  430. package/dist/EventListDialog-C57w2AlC.cjs.map +0 -1
  431. package/dist/EventListDialog-CIc8RCyY.js.map +0 -1
  432. package/dist/format-BJTVXrSU.js.map +0 -1
  433. package/dist/format-DMO5vfrX.cjs.map +0 -1
  434. package/dist/getDefaultOptions-CK1Ea9CA.js +0 -8
  435. package/dist/getDefaultOptions-DM-1w6JL.cjs +0 -2
  436. package/dist/index-0c3bHqHD.js.map +0 -1
  437. package/dist/index-BwjFEWGT.cjs +0 -10
  438. package/dist/index-BwjFEWGT.cjs.map +0 -1
  439. package/dist/index-D3OfXI7H.cjs +0 -7
  440. package/dist/index-D3OfXI7H.cjs.map +0 -1
  441. package/dist/index-fyIAHTXk.js.map +0 -1
  442. package/dist/parse-BDajhNCa.js.map +0 -1
  443. package/dist/parse-DVpJm282.cjs.map +0 -1
  444. package/dist/purify.es-C8CCt8xk.cjs +0 -3
  445. package/dist/purify.es-C8CCt8xk.cjs.map +0 -1
  446. package/dist/purify.es-cZjWcAUR.js +0 -595
  447. package/dist/purify.es-cZjWcAUR.js.map +0 -1
  448. package/dist/settingsCache-CriaPeNM.js +0 -28
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsTab-CLQ0EbDl.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 2026, OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 { Api, OpenC3Api } from '@openc3/js-common/services'\n\nconst SETTING_NAME = 'store_url'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n author_extra: Object,\n description: String,\n keywords: Array,\n img_path: String, // Set for local plugins\n image_url: String, // Set for app store plugins\n licenses: Array,\n // rating: Number,\n // downloads: Number,\n homepage: String,\n repository: String,\n gem_url: String,\n minimum_cosmos_version: String,\n checksum: String,\n versions: Array,\n current_version_id: Number,\n access: String,\n entitled: Boolean,\n installAllowed: {\n type: Boolean,\n default: true,\n },\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n imageContents: null,\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 author_extra: this.author_extra,\n description: this.description,\n keywords: this.keywords,\n img_path: this.img_path,\n image_url: this.image_url,\n licenses: this.licenses,\n // rating: this.rating,\n // downloads: this.downloads,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n minimum_cosmos_version: this.minimum_cosmos_version,\n checksum: this.checksum,\n versions: this.versions,\n current_version_id: this.current_version_id,\n access: this.access,\n entitled: this.entitled,\n installAllowed: this.installAllowed,\n }\n },\n canInstall: function () {\n return this.entitled && this.installAllowed\n },\n installTooltip: function () {\n if (!this.installAllowed) {\n return 'Only admin users can install plugins.'\n }\n return this.accessTooltip\n },\n imageContentsWithMimeType: function () {\n if (this.imageContents) {\n const magicNumbers = {\n 'image/bmp': [0x42, 0x4d],\n 'image/jpeg': [0xff, 0xd8, 0xff],\n 'image/png': [0x89, 0x50, 0x4e, 0x47],\n 'image/gif': [0x47, 0x49, 0x46, 0x38],\n 'image/webp': [0x52, 0x49, 0x46, 0x46],\n }\n const fileHead = new TextEncoder()\n .encode(globalThis.atob(this.imageContents.slice(0, 6))) // only atob as much as we need\n .slice(1) // second call to slice on the decoded data because base64 bytes aren't 1:1\n const found = Object.entries(magicNumbers).find(([_, magicNumber]) => {\n return magicNumber.every((byte, i) => byte === fileHead[i])\n })\n if (found) {\n const [mimeType] = found\n return `data:${mimeType};base64,${this.imageContents}`\n }\n }\n return undefined\n },\n _navigableStoreUrl: function () {\n return this._storeUrl.replace('host.docker.internal', 'localhost')\n },\n storeLink: function () {\n if (this.hasStoreListing && this._navigableStoreUrl) {\n return new URL(`/cosmos_plugins/${this.id}`, this._navigableStoreUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n hasDetails: function () {\n if (this.hasStoreListing) {\n return true\n }\n return !!this.title && !!this.description\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n accessTooltip: function () {\n if (this.entitled) {\n return ''\n }\n if (localStorage.getItem('pluginStore.isApiKeySet') !== 'true') {\n return 'Please add your App Store API key using the settings cog icon.'\n }\n if (this.access === 'enterprise') {\n return 'A COSMOS Enterprise license is required for this plugin.'\n } else {\n return 'Please contact sales@openc3.com for access to this plugin.'\n }\n },\n },\n created: async function () {\n try {\n this._storeUrl =\n (await this._api.get_setting(SETTING_NAME)) || DEFAULT_STORE_URL\n } catch {\n this._storeUrl = DEFAULT_STORE_URL\n }\n if (this.img_path) {\n try {\n const params = new URLSearchParams({\n volume: 'OPENC3_GEMS_VOLUME',\n scope: globalThis.openc3Scope,\n })\n const { data } = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(this.img_path)}?${params}`,\n )\n this.imageContents = data.contents\n } catch {\n // Failed to get image, don't do anything\n }\n }\n },\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"versionTitle\" />\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 {{ formattedStoreLink }} </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-space-between subtitle-with-version\"\n >\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <v-select\n v-if=\"hasVersions\"\n v-model=\"selectedVersionId\"\n :items=\"versionOptions\"\n item-title=\"title\"\n item-value=\"value\"\n label=\"Version\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n class=\"mt-1 version-select\"\n />\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 <div class=\"plugin-image-backdrop\">\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n />\n <v-img v-else-if=\"versionImageUrl\" :src=\"versionImageUrl\" />\n </div>\n <div class=\"mt-3\" v-text=\"versionDescription\" />\n <div class=\"mt-3 text-caption font-italic\">\n Keywords:\n <template v-if=\"versionKeywords\">\n <v-chip\n v-for=\"keyword in versionKeywords\"\n :key=\"keyword\"\n variant=\"flat\"\n color=\"primary\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ keyword }}\n </v-chip>\n </template>\n <span v-else class=\"font-italic\"> none </span>\n </div>\n <div class=\"mt-3 text-caption font-italic\">\n Licenses:\n <v-chip\n v-for=\"license in versionLicenses\"\n :key=\"license\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ license }}\n </v-chip>\n </div>\n <div class=\"mt-3\">\n <span class=\"text-caption font-italic\">\n Minimum COSMOS version:\n </span>\n {{ versionMinimumCosmosVersion }}\n <v-tooltip\n v-if=\"versionsAreCompatible !== null\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <span v-bind=\"props\">\n <v-icon\n :icon=\"\n versionsAreCompatible ? 'mdi-check-circle' : 'mdi-alert'\n \"\n size=\"small\"\n />\n </span>\n </template>\n <span v-if=\"versionsAreCompatible\">\n Your version of COSMOS meets the requirements.\n </span>\n <span v-else>\n Your version of COSMOS is out of date. You can still install this\n plugin, but it might not work correctly.\n </span>\n </v-tooltip>\n </div>\n <v-text-field\n v-model=\"versionChecksum\"\n class=\"mt-3\"\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-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n <v-btn\n v-if=\"versionRepository\"\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionRepository\"\n target=\"_blank\"\n />\n <v-btn\n v-if=\"versionHomepage\"\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionHomepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport * as semver from 'semver'\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 installedCosmosVersion: null,\n selectedVersionId: null,\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 hasVersions: function () {\n return this.versions && this.versions.length > 0\n },\n selectedVersion: function () {\n if (!this.hasVersions) {\n return null\n }\n const versionId = this.selectedVersionId || this.current_version_id\n return this.versions.find((v) => v.id === versionId) || this.versions[0]\n },\n versionOptions: function () {\n if (!this.hasVersions) {\n return []\n }\n return this.versions.map((v) => ({\n title: v.version_number,\n value: v.id,\n }))\n },\n versionTitle: function () {\n return this.selectedVersion?.title || this.title\n },\n versionDescription: function () {\n return this.selectedVersion?.description || this.description\n },\n versionKeywords: function () {\n return this.selectedVersion?.keywords || this.keywords\n },\n versionLicenses: function () {\n return this.selectedVersion?.licenses || this.licenses\n },\n versionHomepage: function () {\n return this.selectedVersion?.homepage || this.homepage\n },\n versionRepository: function () {\n return this.selectedVersion?.repository || this.repository\n },\n versionGemUrl: function () {\n return this.selectedVersion?.gem_url || this.gem_url\n },\n versionMinimumCosmosVersion: function () {\n return (\n this.selectedVersion?.minimum_cosmos_version ||\n this.minimum_cosmos_version\n )\n },\n versionChecksum: function () {\n return this.selectedVersion?.checksum || this.checksum\n },\n versionImageUrl: function () {\n return this.selectedVersion?.image_url || this.image_url\n },\n formattedStoreLink: function () {\n return this._navigableStoreUrl.split('://').at(-1)\n },\n versionsAreCompatible: function () {\n if (!this.installedCosmosVersion || !this.versionMinimumCosmosVersion) {\n return null\n }\n return semver.gte(\n this.installedCosmosVersion,\n this.versionMinimumCosmosVersion,\n )\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.installedCosmosVersion = data.version\n })\n },\n mounted: function () {\n this.selectedVersionId = this.current_version_id\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', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n uninstall: function () {\n this.$emit('triggerUninstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.versionChecksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n\n<style scoped>\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n\n.subtitle-with-version {\n width: 100%;\n min-height: 48px;\n}\n\n.version-select {\n max-width: 120px;\n min-width: 120px;\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 height=\"350\" class=\"d-flex flex-column\" @click=\"openDialog\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n </v-card-title>\n <v-card-subtitle class=\"d-flex align-center justify-content-space-between\">\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </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 <div class=\"plugin-image-backdrop\">\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n </div>\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-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click.stop=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n </v-card-actions>\n </v-card>\n <plugin-details-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n v-bind=\"plugin\"\n @trigger-install=\"install\"\n />\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 data() {\n return {\n showDialog: false,\n }\n },\n methods: {\n openDialog: function () {\n this.showDialog = true\n },\n install: function (event) {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: event?.version_id || this.current_version_id,\n })\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\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n <v-text-field v-model=\"apiKey\" type=\"password\" label=\"API Key\" />\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\n <v-dialog v-model=\"showApiKeyAlert\">\n <v-card class=\"pa-3\">\n <v-card-text class=\"pb-0\">\n You're using COSMOS Enterprise, but you haven't set an OpenC3 Store API\n key yet. You must set this to access Enterprise plugins.\n <br />\n <br />\n Visit the\n <a :href=\"accountSettingsUrl\" target=\"_blank\">\n OpenC3 Store account settings<v-icon\n icon=\"mdi-open-in-new\"\n size=\"x-small\"\n />\n </a>\n to generate an API key. Then, return here and open the Plugin Store\n settings with the\n <v-icon icon=\"mdi-cog\" size=\"small\" /> icon and paste your API key into\n the API key field.\n </v-card-text>\n <v-card-actions>\n <v-checkbox\n v-model=\"suppressApiKeyAlert\"\n class=\"px-3\"\n label=\"Don't show this message again\"\n hide-details\n />\n <v-btn variant=\"elevated\" text=\"OK\" @click=\"closeApiKeyAlert\" />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst URL_SETTING_NAME = 'store_url'\nconst API_KEY_SETTING_NAME = 'store_api_key'\nconst SETTING_SCOPE = 'DEFAULT'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\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 apiKey: null,\n isEnterprise: false,\n showApiKeyAlert: false,\n suppressApiKeyAlert: false,\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 computed: {\n accountSettingsUrl: function () {\n const navigableHost = this.storeUrl.replace(\n 'host.docker.internal',\n 'localhost',\n )\n return new URL('account', navigableHost)\n },\n },\n watch: {\n apiKey: function (val) {\n this.checkEnterpriseKey()\n localStorage.setItem('pluginStore.isApiKeySet', !!val)\n },\n isEnterprise: function (val) {\n this.checkEnterpriseKey()\n },\n suppressApiKeyAlert: function (val) {\n localStorage.setItem('pluginStore.suppressApiKeyAlert', val)\n },\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 Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = data.enterprise\n })\n this.loadSetting(URL_SETTING_NAME, { scope: SETTING_SCOPE })\n this.loadSetting(API_KEY_SETTING_NAME, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n },\n methods: {\n checkEnterpriseKey: function () {\n if (this.isEnterprise && this.apiKey === '') {\n this.openApiKeyAlert()\n }\n },\n openApiKeyAlert: function () {\n if (localStorage.getItem('pluginStore.suppressApiKeyAlert') !== 'true') {\n this.showApiKeyAlert = true\n }\n },\n closeApiKeyAlert: function () {\n this.showApiKeyAlert = false\n },\n save: function () {\n this.saveSetting(URL_SETTING_NAME, this.storeUrl, {\n scope: SETTING_SCOPE,\n })\n this.saveSetting(API_KEY_SETTING_NAME, this.apiKey, {\n scope: SETTING_SCOPE,\n })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response, { setting }) {\n switch (setting) {\n case URL_SETTING_NAME:\n this.storeUrl = response || DEFAULT_STORE_URL\n break\n case API_KEY_SETTING_NAME:\n this.apiKey = response || ''\n break\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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=\"storeUrl\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open {{ formattedStoreUrl }} </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 </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-alert\n v-if=\"storeError\"\n class=\"mt-6\"\n color=\"error\"\n :title=\"storeError.title\"\n :text=\"storeError.body\"\n />\n <div\n v-else-if=\"loading\"\n class=\"d-flex justify-center align-center py-12\"\n data-test=\"plugin-store-loading\"\n >\n <v-progress-circular indeterminate color=\"primary\" size=\"48\" />\n <span class=\"ml-4 text-subtitle-1\">Loading plugins...</span>\n </div>\n <v-container v-else>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card\n v-bind=\"plugin\"\n :install-allowed=\"installAllowed\"\n @trigger-install=\"install\"\n />\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\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\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 showSettingsDialog: false,\n plugins: [],\n storeError: null,\n storeUrl: DEFAULT_STORE_URL,\n isEnterprise: false,\n isAdmin: true,\n loading: false,\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\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 formattedStoreUrl: function () {\n return this.storeUrl.split('://').at(-1)\n },\n installAllowed: function () {\n return !this.isEnterprise || this.isAdmin\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 this.fetchUserContext()\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 this.loading = true\n Api.get('/openc3-api/pluginstore')\n .then(({ data }) => {\n if (data.error) {\n const { title, body } = data\n this.storeError = { title, body }\n this.plugins = []\n } else {\n this.storeError = null\n this.plugins = data\n }\n })\n .finally(() => {\n this.loading = false\n })\n },\n fetchUserContext: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = !!data.enterprise\n })\n const roles = OpenC3Auth.userroles() || []\n this.isAdmin = roles.includes('admin')\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 (storeUrl) {\n this.storeUrl = storeUrl\n this.loading = true\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 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 :class=\"{ 'cursor-pointer': hasDetails }\" data-test=\"plugin-list-item\">\n <td>\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n max-height=\"56\"\n min-width=\"56\"\n />\n </td>\n <td>\n <div class=\"text-h6\" @click=\"openDetails\" 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=\"`View Microservices (${microserviceCount})`\"\n prepend-icon=\"mdi-tab\"\n data-test=\"view-microservices\"\n @click=\"viewMicroservices\"\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-if=\"showCard\"\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 microservices: {\n type: Object,\n default: () => ({}),\n },\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 getMicroservicesForPlugin: function () {\n const names = []\n for (const [microserviceName, microservice] of Object.entries(\n this.microservices,\n )) {\n if (microservice.plugin === this.name) {\n names.push(microserviceName)\n }\n }\n return names\n },\n microserviceCount: function () {\n return this.getMicroservicesForPlugin.length\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasDetails) {\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 viewMicroservices: function () {\n const servicesParam = this.getMicroservicesForPlugin.join(',')\n this.$router.push({\n path: '/tools/admin/microservices',\n query: { services: servicesParam },\n })\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 :key=\"plugin.name\"\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n :microservices=\"microservices\"\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 { Api } from '@openc3/js-common/services'\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 microservices: {},\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 mounted() {\n this.fetchMicroservices()\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 fetchMicroservices: function () {\n Api.get('/openc3-api/microservices/all').then((response) => {\n this.microservices = response.data\n })\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.list :deep(tr:nth-child(even)) {\n background-color: rgba(var(--v-theme-on-surface), 0.05);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, 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 accept=\".gem\"\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\n v-text=\"\n ' Updated At: ' +\n formatNanoseconds(process.updated_at, timeZone)\n \"\n />\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-plugin-id=\"storePluginId\"\n :store-version-id=\"storeVersionId\"\n :min-cosmos-version=\"minCosmosVersion\"\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 { 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'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n // Control state\n pluginName: null,\n variables: {},\n storePluginId: null,\n storeVersionId: null,\n minCosmosVersion: null,\n pluginTxt: '',\n file: null,\n currentPlugin: null,\n pluginHashTmp: null,\n existingPluginTxt: null,\n progress: 0,\n pluginDelete: false,\n\n api: new OpenC3Api(),\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n timeZone: 'local',\n // When updating update local_mode.rb, local_mode.py, plugins.p.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-logexplorer', // Enterprise only\n 'openc3-cosmos-tool-notebooks', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // 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 this.api\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\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 resetControlState: function () {\n this.pluginName = null\n this.variables = {}\n this.storePluginId = null\n this.storeVersionId = null\n this.minCosmosVersion = null\n this.pluginTxt = ''\n this.file = null\n this.currentPlugin = null\n this.pluginHashTmp = null\n this.existingPluginTxt = null\n this.progress = 0\n this.pluginDelete = false\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n 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_plugin_id', storeData.id)\n formData.append('store_version_id', storeData.version_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.storePluginId = response.data.store_plugin_id\n this.storeVersionId = response.data.store_version_id\n this.minCosmosVersion = response.data.minimum_cosmos_version\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.storePluginId = null\n this.storeVersionId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n this.resetControlState()\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.resetControlState()\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.resetControlState()\n this.currentPlugin = plugin\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.resetControlState()\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.resetControlState()\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</style>\n"],"names":["SETTING_NAME","DEFAULT_STORE_URL","PluginProps","OpenC3Api","magicNumbers","fileHead","found","_","magicNumber","byte","i","mimeType","params","data","Api","_sfc_main","val","versionId","v","semver.gte","_hoisted_3","_hoisted_5","_hoisted_7","_hoisted_8","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_ctx","_component_v_card_subtitle","_openBlock","_createElementBlock","_hoisted_2","_component_v_icon","_component_v_select","$data","_component_v_card_text","_component_v_img","_Fragment","_renderList","keyword","_component_v_chip","_hoisted_6","license","_cache","_component_v_text_field","_mergeProps","_component_v_card_actions","_normalizeProps","_guardReactiveProps","PluginDetailsDialog","event","_component_v_card_title","_hoisted_1","_normalizeClass","_component_plugin_details_dialog","URL_SETTING_NAME","API_KEY_SETTING_NAME","SETTING_SCOPE","Settings","value","navigableHost","response","setting","_component_v_alert","_createTextVNode","_component_v_checkbox","PluginCard","PluginStoreSettingsDialog","filtered","plugin","title","body","roles","storeUrl","_component_v_sheet","_component_v_progress_circular","_component_v_container","_component_v_row","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","names","microserviceName","microservice","decodedData","uInt8Array","blob","link","name","servicesParam","args","$props","target","index","_withModifiers","_component_v_menu","_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","TimeFilters","newValue","oldValue","that","process","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_switch","_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
+ {"version":3,"file":"PluginsTab-1tlTx4k1.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 2026, OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 { Api, OpenC3Api } from '@openc3/js-common/services'\n\nconst SETTING_NAME = 'store_url'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n author_extra: Object,\n description: String,\n keywords: Array,\n img_path: String, // Set for local plugins\n image_url: String, // Set for app store plugins\n licenses: Array,\n // rating: Number,\n // downloads: Number,\n homepage: String,\n repository: String,\n gem_url: String,\n minimum_cosmos_version: String,\n checksum: String,\n versions: Array,\n current_version_id: Number,\n access: String,\n entitled: Boolean,\n installAllowed: {\n type: Boolean,\n default: true,\n },\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n imageContents: null,\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 author_extra: this.author_extra,\n description: this.description,\n keywords: this.keywords,\n img_path: this.img_path,\n image_url: this.image_url,\n licenses: this.licenses,\n // rating: this.rating,\n // downloads: this.downloads,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n minimum_cosmos_version: this.minimum_cosmos_version,\n checksum: this.checksum,\n versions: this.versions,\n current_version_id: this.current_version_id,\n access: this.access,\n entitled: this.entitled,\n installAllowed: this.installAllowed,\n }\n },\n canInstall: function () {\n return this.entitled && this.installAllowed\n },\n installTooltip: function () {\n if (!this.installAllowed) {\n return 'Only admin users can install plugins.'\n }\n return this.accessTooltip\n },\n imageContentsWithMimeType: function () {\n if (this.imageContents) {\n const magicNumbers = {\n 'image/bmp': [0x42, 0x4d],\n 'image/jpeg': [0xff, 0xd8, 0xff],\n 'image/png': [0x89, 0x50, 0x4e, 0x47],\n 'image/gif': [0x47, 0x49, 0x46, 0x38],\n 'image/webp': [0x52, 0x49, 0x46, 0x46],\n }\n const fileHead = new TextEncoder()\n .encode(globalThis.atob(this.imageContents.slice(0, 6))) // only atob as much as we need\n .slice(1) // second call to slice on the decoded data because base64 bytes aren't 1:1\n const found = Object.entries(magicNumbers).find(([_, magicNumber]) => {\n return magicNumber.every((byte, i) => byte === fileHead[i])\n })\n if (found) {\n const [mimeType] = found\n return `data:${mimeType};base64,${this.imageContents}`\n }\n }\n return undefined\n },\n _navigableStoreUrl: function () {\n return this._storeUrl.replace('host.docker.internal', 'localhost')\n },\n storeLink: function () {\n if (this.hasStoreListing && this._navigableStoreUrl) {\n return new URL(`/cosmos_plugins/${this.id}`, this._navigableStoreUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n hasDetails: function () {\n if (this.hasStoreListing) {\n return true\n }\n return !!this.title && !!this.description\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n accessTooltip: function () {\n if (this.entitled) {\n return ''\n }\n if (localStorage.getItem('pluginStore.isApiKeySet') !== 'true') {\n return 'Please add your App Store API key using the settings cog icon.'\n }\n if (this.access === 'enterprise') {\n return 'A COSMOS Enterprise license is required for this plugin.'\n } else {\n return 'Please contact sales@openc3.com for access to this plugin.'\n }\n },\n },\n created: async function () {\n try {\n this._storeUrl =\n (await this._api.get_setting(SETTING_NAME)) || DEFAULT_STORE_URL\n } catch {\n this._storeUrl = DEFAULT_STORE_URL\n }\n if (this.img_path) {\n try {\n const params = new URLSearchParams({\n volume: 'OPENC3_GEMS_VOLUME',\n scope: globalThis.openc3Scope,\n })\n const { data } = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(this.img_path)}?${params}`,\n )\n this.imageContents = data.contents\n } catch {\n // Failed to get image, don't do anything\n }\n }\n },\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"versionTitle\" />\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 {{ formattedStoreLink }} </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-space-between subtitle-with-version\"\n >\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <v-select\n v-if=\"hasVersions\"\n v-model=\"selectedVersionId\"\n :items=\"versionOptions\"\n item-title=\"title\"\n item-value=\"value\"\n label=\"Version\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n class=\"mt-1 version-select\"\n />\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 <div class=\"plugin-image-backdrop\">\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n />\n <v-img v-else-if=\"versionImageUrl\" :src=\"versionImageUrl\" />\n </div>\n <div class=\"mt-3\" v-text=\"versionDescription\" />\n <div class=\"mt-3 text-caption font-italic\">\n Keywords:\n <template v-if=\"versionKeywords\">\n <v-chip\n v-for=\"keyword in versionKeywords\"\n :key=\"keyword\"\n variant=\"flat\"\n color=\"primary\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ keyword }}\n </v-chip>\n </template>\n <span v-else class=\"font-italic\"> none </span>\n </div>\n <div class=\"mt-3 text-caption font-italic\">\n Licenses:\n <v-chip\n v-for=\"license in versionLicenses\"\n :key=\"license\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ license }}\n </v-chip>\n </div>\n <div class=\"mt-3\">\n <span class=\"text-caption font-italic\">\n Minimum COSMOS version:\n </span>\n {{ versionMinimumCosmosVersion }}\n <v-tooltip\n v-if=\"versionsAreCompatible !== null\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <span v-bind=\"props\">\n <v-icon\n :icon=\"\n versionsAreCompatible ? 'mdi-check-circle' : 'mdi-alert'\n \"\n size=\"small\"\n />\n </span>\n </template>\n <span v-if=\"versionsAreCompatible\">\n Your version of COSMOS meets the requirements.\n </span>\n <span v-else>\n Your version of COSMOS is out of date. You can still install this\n plugin, but it might not work correctly.\n </span>\n </v-tooltip>\n </div>\n <v-text-field\n v-model=\"versionChecksum\"\n class=\"mt-3\"\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-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n <v-btn\n v-if=\"versionRepository\"\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionRepository\"\n target=\"_blank\"\n />\n <v-btn\n v-if=\"versionHomepage\"\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionHomepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport * as semver from 'semver'\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 installedCosmosVersion: null,\n selectedVersionId: null,\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 hasVersions: function () {\n return this.versions && this.versions.length > 0\n },\n selectedVersion: function () {\n if (!this.hasVersions) {\n return null\n }\n const versionId = this.selectedVersionId || this.current_version_id\n return this.versions.find((v) => v.id === versionId) || this.versions[0]\n },\n versionOptions: function () {\n if (!this.hasVersions) {\n return []\n }\n return this.versions.map((v) => ({\n title: v.version_number,\n value: v.id,\n }))\n },\n versionTitle: function () {\n return this.selectedVersion?.title || this.title\n },\n versionDescription: function () {\n return this.selectedVersion?.description || this.description\n },\n versionKeywords: function () {\n return this.selectedVersion?.keywords || this.keywords\n },\n versionLicenses: function () {\n return this.selectedVersion?.licenses || this.licenses\n },\n versionHomepage: function () {\n return this.selectedVersion?.homepage || this.homepage\n },\n versionRepository: function () {\n return this.selectedVersion?.repository || this.repository\n },\n versionGemUrl: function () {\n return this.selectedVersion?.gem_url || this.gem_url\n },\n versionMinimumCosmosVersion: function () {\n return (\n this.selectedVersion?.minimum_cosmos_version ||\n this.minimum_cosmos_version\n )\n },\n versionChecksum: function () {\n return this.selectedVersion?.checksum || this.checksum\n },\n versionImageUrl: function () {\n return this.selectedVersion?.image_url || this.image_url\n },\n formattedStoreLink: function () {\n return this._navigableStoreUrl.split('://').at(-1)\n },\n versionsAreCompatible: function () {\n if (!this.installedCosmosVersion || !this.versionMinimumCosmosVersion) {\n return null\n }\n return semver.gte(\n this.installedCosmosVersion,\n this.versionMinimumCosmosVersion,\n )\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.installedCosmosVersion = data.version\n })\n },\n mounted: function () {\n this.selectedVersionId = this.current_version_id\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', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n uninstall: function () {\n this.$emit('triggerUninstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.versionChecksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n\n<style scoped>\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n\n.subtitle-with-version {\n width: 100%;\n min-height: 48px;\n}\n\n.version-select {\n max-width: 120px;\n min-width: 120px;\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 height=\"350\" class=\"d-flex flex-column\" @click=\"openDialog\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n </v-card-title>\n <v-card-subtitle class=\"d-flex align-center justify-content-space-between\">\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </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 <div class=\"plugin-image-backdrop\">\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n </div>\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-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click.stop=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n </v-card-actions>\n </v-card>\n <plugin-details-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n v-bind=\"plugin\"\n @trigger-install=\"install\"\n />\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 data() {\n return {\n showDialog: false,\n }\n },\n methods: {\n openDialog: function () {\n this.showDialog = true\n },\n install: function (event) {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: event?.version_id || this.current_version_id,\n })\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\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n <v-text-field v-model=\"apiKey\" type=\"password\" label=\"API Key\" />\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\n <v-dialog v-model=\"showApiKeyAlert\">\n <v-card class=\"pa-3\">\n <v-card-text class=\"pb-0\">\n You're using COSMOS Enterprise, but you haven't set an OpenC3 Store API\n key yet. You must set this to access Enterprise plugins.\n <br />\n <br />\n Visit the\n <a :href=\"accountSettingsUrl\" target=\"_blank\">\n OpenC3 Store account settings<v-icon\n icon=\"mdi-open-in-new\"\n size=\"x-small\"\n />\n </a>\n to generate an API key. Then, return here and open the Plugin Store\n settings with the\n <v-icon icon=\"mdi-cog\" size=\"small\" /> icon and paste your API key into\n the API key field.\n </v-card-text>\n <v-card-actions>\n <v-checkbox\n v-model=\"suppressApiKeyAlert\"\n class=\"px-3\"\n label=\"Don't show this message again\"\n hide-details\n />\n <v-btn variant=\"elevated\" text=\"OK\" @click=\"closeApiKeyAlert\" />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst URL_SETTING_NAME = 'store_url'\nconst API_KEY_SETTING_NAME = 'store_api_key'\nconst SETTING_SCOPE = 'DEFAULT'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\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 apiKey: null,\n isEnterprise: false,\n showApiKeyAlert: false,\n suppressApiKeyAlert: false,\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 computed: {\n accountSettingsUrl: function () {\n const navigableHost = this.storeUrl.replace(\n 'host.docker.internal',\n 'localhost',\n )\n return new URL('account', navigableHost)\n },\n },\n watch: {\n apiKey: function (val) {\n this.checkEnterpriseKey()\n localStorage.setItem('pluginStore.isApiKeySet', !!val)\n },\n isEnterprise: function (val) {\n this.checkEnterpriseKey()\n },\n suppressApiKeyAlert: function (val) {\n localStorage.setItem('pluginStore.suppressApiKeyAlert', val)\n },\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 Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = data.enterprise\n })\n this.loadSetting(URL_SETTING_NAME, { scope: SETTING_SCOPE })\n this.loadSetting(API_KEY_SETTING_NAME, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n },\n methods: {\n checkEnterpriseKey: function () {\n if (this.isEnterprise && this.apiKey === '') {\n this.openApiKeyAlert()\n }\n },\n openApiKeyAlert: function () {\n if (localStorage.getItem('pluginStore.suppressApiKeyAlert') !== 'true') {\n this.showApiKeyAlert = true\n }\n },\n closeApiKeyAlert: function () {\n this.showApiKeyAlert = false\n },\n save: function () {\n this.saveSetting(URL_SETTING_NAME, this.storeUrl, {\n scope: SETTING_SCOPE,\n })\n this.saveSetting(API_KEY_SETTING_NAME, this.apiKey, {\n scope: SETTING_SCOPE,\n })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response, { setting }) {\n switch (setting) {\n case URL_SETTING_NAME:\n this.storeUrl = response || DEFAULT_STORE_URL\n break\n case API_KEY_SETTING_NAME:\n this.apiKey = response || ''\n break\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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=\"storeUrl\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open {{ formattedStoreUrl }} </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 </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-alert\n v-if=\"storeError\"\n class=\"mt-6\"\n color=\"error\"\n :title=\"storeError.title\"\n :text=\"storeError.body\"\n />\n <div\n v-else-if=\"loading\"\n class=\"d-flex justify-center align-center py-12\"\n data-test=\"plugin-store-loading\"\n >\n <v-progress-circular indeterminate color=\"primary\" size=\"48\" />\n <span class=\"ml-4 text-subtitle-1\">Loading plugins...</span>\n </div>\n <v-container v-else>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card\n v-bind=\"plugin\"\n :install-allowed=\"installAllowed\"\n @trigger-install=\"install\"\n />\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\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\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 showSettingsDialog: false,\n plugins: [],\n storeError: null,\n storeUrl: DEFAULT_STORE_URL,\n isEnterprise: false,\n isAdmin: true,\n loading: false,\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\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 formattedStoreUrl: function () {\n return this.storeUrl.split('://').at(-1)\n },\n installAllowed: function () {\n return !this.isEnterprise || this.isAdmin\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 this.fetchUserContext()\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 this.loading = true\n Api.get('/openc3-api/pluginstore')\n .then(({ data }) => {\n if (data.error) {\n const { title, body } = data\n this.storeError = { title, body }\n this.plugins = []\n } else {\n this.storeError = null\n this.plugins = data\n }\n })\n .finally(() => {\n this.loading = false\n })\n },\n fetchUserContext: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = !!data.enterprise\n })\n const roles = OpenC3Auth.userroles() || []\n this.isAdmin = roles.includes('admin')\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 (storeUrl) {\n this.storeUrl = storeUrl\n this.loading = true\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 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 :class=\"{ 'cursor-pointer': hasDetails }\" data-test=\"plugin-list-item\">\n <td>\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n max-height=\"56\"\n min-width=\"56\"\n />\n </td>\n <td>\n <div class=\"text-h6\" @click=\"openDetails\" 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=\"`View Microservices (${microserviceCount})`\"\n prepend-icon=\"mdi-tab\"\n data-test=\"view-microservices\"\n @click=\"viewMicroservices\"\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-if=\"showCard\"\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 microservices: {\n type: Object,\n default: () => ({}),\n },\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 getMicroservicesForPlugin: function () {\n const names = []\n for (const [microserviceName, microservice] of Object.entries(\n this.microservices,\n )) {\n if (microservice.plugin === this.name) {\n names.push(microserviceName)\n }\n }\n return names\n },\n microserviceCount: function () {\n return this.getMicroservicesForPlugin.length\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasDetails) {\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 viewMicroservices: function () {\n const servicesParam = this.getMicroservicesForPlugin.join(',')\n this.$router.push({\n path: '/tools/admin/microservices',\n query: { services: servicesParam },\n })\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\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.\n# See LICENSE.md 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 :key=\"plugin.name\"\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n :microservices=\"microservices\"\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 { Api } from '@openc3/js-common/services'\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 microservices: {},\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 mounted() {\n this.fetchMicroservices()\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 fetchMicroservices: function () {\n Api.get('/openc3-api/microservices/all').then((response) => {\n this.microservices = response.data\n })\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.list :deep(tr:nth-child(even)) {\n background-color: rgba(var(--v-theme-on-surface), 0.05);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\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.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, 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 accept=\".gem\"\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\n v-text=\"\n ' Updated At: ' +\n formatNanoseconds(process.updated_at, timeZone)\n \"\n />\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-plugin-id=\"storePluginId\"\n :store-version-id=\"storeVersionId\"\n :min-cosmos-version=\"minCosmosVersion\"\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 { 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'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n // Control state\n pluginName: null,\n variables: {},\n storePluginId: null,\n storeVersionId: null,\n minCosmosVersion: null,\n pluginTxt: '',\n file: null,\n currentPlugin: null,\n pluginHashTmp: null,\n existingPluginTxt: null,\n progress: 0,\n pluginDelete: false,\n\n api: new OpenC3Api(),\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n timeZone: 'local',\n // When updating update local_mode.rb, local_mode.py, plugins.p.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-logexplorer', // Enterprise only\n 'openc3-cosmos-tool-notebooks', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // 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 this.api\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\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 resetControlState: function () {\n this.pluginName = null\n this.variables = {}\n this.storePluginId = null\n this.storeVersionId = null\n this.minCosmosVersion = null\n this.pluginTxt = ''\n this.file = null\n this.currentPlugin = null\n this.pluginHashTmp = null\n this.existingPluginTxt = null\n this.progress = 0\n this.pluginDelete = false\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n 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_plugin_id', storeData.id)\n formData.append('store_version_id', storeData.version_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.storePluginId = response.data.store_plugin_id\n this.storeVersionId = response.data.store_version_id\n this.minCosmosVersion = response.data.minimum_cosmos_version\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.storePluginId = null\n this.storeVersionId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n this.resetControlState()\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.resetControlState()\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.resetControlState()\n this.currentPlugin = plugin\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.resetControlState()\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.resetControlState()\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</style>\n"],"names":["SETTING_NAME","DEFAULT_STORE_URL","PluginProps","OpenC3Api","magicNumbers","fileHead","found","_","magicNumber","byte","i","mimeType","params","data","Api","_sfc_main","val","versionId","v","semver.gte","_hoisted_3","_hoisted_5","_hoisted_7","_hoisted_8","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_ctx","_component_v_card_subtitle","_openBlock","_createElementBlock","_hoisted_2","_component_v_icon","_component_v_select","$data","_component_v_card_text","_component_v_img","_Fragment","_renderList","keyword","_component_v_chip","_hoisted_6","license","_cache","_component_v_text_field","_mergeProps","_component_v_card_actions","_normalizeProps","_guardReactiveProps","PluginDetailsDialog","event","_component_v_card_title","_hoisted_1","_normalizeClass","_component_plugin_details_dialog","URL_SETTING_NAME","API_KEY_SETTING_NAME","SETTING_SCOPE","Settings","value","navigableHost","response","setting","_component_v_alert","_createTextVNode","_component_v_checkbox","PluginCard","PluginStoreSettingsDialog","filtered","plugin","title","body","roles","storeUrl","_component_v_sheet","_component_v_progress_circular","_component_v_container","_component_v_row","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","names","microserviceName","microservice","decodedData","uInt8Array","blob","link","name","servicesParam","args","$props","target","index","_withModifiers","_component_v_menu","_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","TimeFilters","newValue","oldValue","that","process","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_switch","_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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"}