@openc3/vue-common 6.8.1 → 6.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. package/dist/{ArrayWidget-CiW5R8HE.cjs → ArrayWidget-DJkuPBFS.cjs} +2 -2
  2. package/dist/{ArrayWidget-CiW5R8HE.cjs.map → ArrayWidget-DJkuPBFS.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-FGjLmPfG.js → ArrayWidget-DLfNWDzN.js} +4 -4
  4. package/dist/{ArrayWidget-FGjLmPfG.js.map → ArrayWidget-DLfNWDzN.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-V5C4JRhx.cjs → ArrayplotWidget-COGxmBEP.cjs} +2 -2
  6. package/dist/{ArrayplotWidget-V5C4JRhx.cjs.map → ArrayplotWidget-COGxmBEP.cjs.map} +1 -1
  7. package/dist/{ArrayplotWidget-Cfo18TYm.js → ArrayplotWidget-CoRsUxHG.js} +3 -3
  8. package/dist/{ArrayplotWidget-Cfo18TYm.js.map → ArrayplotWidget-CoRsUxHG.js.map} +1 -1
  9. package/dist/{BarColumn-B4naVXS_.cjs → BarColumn-BaPaYtki.cjs} +2 -2
  10. package/dist/{BarColumn-B4naVXS_.cjs.map → BarColumn-BaPaYtki.cjs.map} +1 -1
  11. package/dist/{BarColumn-BuJ6MTYG.js → BarColumn-DHP-zQ4R.js} +3 -3
  12. package/dist/{BarColumn-BuJ6MTYG.js.map → BarColumn-DHP-zQ4R.js.map} +1 -1
  13. package/dist/{BlockWidget-B_JwY8-N.js → BlockWidget-BmHSFvOq.js} +4 -4
  14. package/dist/{BlockWidget-B_JwY8-N.js.map → BlockWidget-BmHSFvOq.js.map} +1 -1
  15. package/dist/{BlockWidget-BJWENVXd.cjs → BlockWidget-DLncsLLX.cjs} +2 -2
  16. package/dist/{BlockWidget-BJWENVXd.cjs.map → BlockWidget-DLncsLLX.cjs.map} +1 -1
  17. package/dist/{ButtonWidget-C2IS6q9D.cjs → ButtonWidget-BLePbTf_.cjs} +2 -2
  18. package/dist/{ButtonWidget-C2IS6q9D.cjs.map → ButtonWidget-BLePbTf_.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-Cd4M3aBD.js → ButtonWidget-C3ZWRjZZ.js} +4 -4
  20. package/dist/{ButtonWidget-Cd4M3aBD.js.map → ButtonWidget-C3ZWRjZZ.js.map} +1 -1
  21. package/dist/{CanvasWidget-BIIhyH_l.cjs → CanvasWidget-C8Sy9t9G.cjs} +2 -2
  22. package/dist/{CanvasWidget-BIIhyH_l.cjs.map → CanvasWidget-C8Sy9t9G.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-CpKdOgTG.js → CanvasWidget-CL-XzPF4.js} +2 -2
  24. package/dist/{CanvasWidget-CpKdOgTG.js.map → CanvasWidget-CL-XzPF4.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-BVlIdbvL.cjs → CanvasdotWidget-6MPKD5iZ.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-BVlIdbvL.cjs.map → CanvasdotWidget-6MPKD5iZ.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-zYbI5LAw.js → CanvasdotWidget-D8Y9DgVE.js} +2 -2
  28. package/dist/{CanvasdotWidget-zYbI5LAw.js.map → CanvasdotWidget-D8Y9DgVE.js.map} +1 -1
  29. package/dist/{CanvasimageWidget--ORQEPj6.js → CanvasimageWidget-DHSGK_tD.js} +3 -3
  30. package/dist/{CanvasimageWidget--ORQEPj6.js.map → CanvasimageWidget-DHSGK_tD.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-SNXRh4TB.cjs → CanvasimageWidget-DYUaf3zy.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-SNXRh4TB.cjs.map → CanvasimageWidget-DYUaf3zy.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-CtAtYHRm.js → CanvasimagevalueWidget-Btt_fQfC.js} +3 -3
  34. package/dist/{CanvasimagevalueWidget-CtAtYHRm.js.map → CanvasimagevalueWidget-Btt_fQfC.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-DcXjMEYO.cjs → CanvasimagevalueWidget-Bu1ECOWl.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-DcXjMEYO.cjs.map → CanvasimagevalueWidget-Bu1ECOWl.cjs.map} +1 -1
  37. package/dist/{CanvaslabelWidget-DWoROb6o.js → CanvaslabelWidget-BF_8RTjv.js} +2 -2
  38. package/dist/{CanvaslabelWidget-DWoROb6o.js.map → CanvaslabelWidget-BF_8RTjv.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-8MMfV594.cjs → CanvaslabelWidget-Dik-ld55.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-8MMfV594.cjs.map → CanvaslabelWidget-Dik-ld55.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-hDxHrErw.cjs → CanvaslabelvalueWidget-BBlKBoZO.cjs} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-hDxHrErw.cjs.map → CanvaslabelvalueWidget-BBlKBoZO.cjs.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-A4UbtwEc.js → CanvaslabelvalueWidget-scbwaujI.js} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-A4UbtwEc.js.map → CanvaslabelvalueWidget-scbwaujI.js.map} +1 -1
  45. package/dist/{CanvaslineWidget-grGKrpPw.cjs → CanvaslineWidget-DN0ojc37.cjs} +2 -2
  46. package/dist/{CanvaslineWidget-grGKrpPw.cjs.map → CanvaslineWidget-DN0ojc37.cjs.map} +1 -1
  47. package/dist/{CanvaslineWidget-BBGi0nrb.js → CanvaslineWidget-gRvm_-TT.js} +2 -2
  48. package/dist/{CanvaslineWidget-BBGi0nrb.js.map → CanvaslineWidget-gRvm_-TT.js.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-C_9OkL7f.js → CanvaslinevalueWidget-CljziRek.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-C_9OkL7f.js.map → CanvaslinevalueWidget-CljziRek.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-DMIWLqT-.cjs → CanvaslinevalueWidget-Cz1XYp0r.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-DMIWLqT-.cjs.map → CanvaslinevalueWidget-Cz1XYp0r.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-BMYkeGyw.cjs → CheckbuttonWidget-B5jOzhZ4.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-BMYkeGyw.cjs.map → CheckbuttonWidget-B5jOzhZ4.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-CTJg8Ypg.js → CheckbuttonWidget-BOabI_jE.js} +2 -2
  56. package/dist/{CheckbuttonWidget-CTJg8Ypg.js.map → CheckbuttonWidget-BOabI_jE.js.map} +1 -1
  57. package/dist/{ClassificationBanners-Dz5-_h_0.js → ClassificationBanners-BGDnMx4r.js} +2 -2
  58. package/dist/{ClassificationBanners-Dz5-_h_0.js.map → ClassificationBanners-BGDnMx4r.js.map} +1 -1
  59. package/dist/{ClassificationBanners-De_CDp9I.cjs → ClassificationBanners-CbcQDr3v.cjs} +2 -2
  60. package/dist/{ClassificationBanners-De_CDp9I.cjs.map → ClassificationBanners-CbcQDr3v.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-DWiMZZk8.js → ComboboxWidget-BLXNYFiY.js} +2 -2
  62. package/dist/{ComboboxWidget-DWiMZZk8.js.map → ComboboxWidget-BLXNYFiY.js.map} +1 -1
  63. package/dist/{ComboboxWidget-CZMUsBRC.cjs → ComboboxWidget-_lxTm8Wb.cjs} +2 -2
  64. package/dist/{ComboboxWidget-CZMUsBRC.cjs.map → ComboboxWidget-_lxTm8Wb.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CD72VN-P.js → CriticalCmdDialog-CnNlsHRX.js} +2 -2
  66. package/dist/{CriticalCmdDialog-CD72VN-P.js.map → CriticalCmdDialog-CnNlsHRX.js.map} +1 -1
  67. package/dist/{CriticalCmdDialog-ByiHBnFL.cjs → CriticalCmdDialog-niBmkudw.cjs} +2 -2
  68. package/dist/{CriticalCmdDialog-ByiHBnFL.cjs.map → CriticalCmdDialog-niBmkudw.cjs.map} +1 -1
  69. package/dist/{DateWidget-C7GSh68_.js → DateWidget-BTqLCtLS.js} +2 -2
  70. package/dist/{DateWidget-C7GSh68_.js.map → DateWidget-BTqLCtLS.js.map} +1 -1
  71. package/dist/{DateWidget-CR4OfvjB.cjs → DateWidget-BvabEAhO.cjs} +2 -2
  72. package/dist/{DateWidget-CR4OfvjB.cjs.map → DateWidget-BvabEAhO.cjs.map} +1 -1
  73. package/dist/{DetailsDialog-B2l0BNc2.js → DetailsDialog-BNCS3QAe.js} +2 -2
  74. package/dist/{DetailsDialog-B2l0BNc2.js.map → DetailsDialog-BNCS3QAe.js.map} +1 -1
  75. package/dist/{DetailsDialog-CrfaoIk5.cjs → DetailsDialog-DgN9Jcio.cjs} +2 -2
  76. package/dist/{DetailsDialog-CrfaoIk5.cjs.map → DetailsDialog-DgN9Jcio.cjs.map} +1 -1
  77. package/dist/EventListDialog-B8rnN9Zi.cjs +2 -0
  78. package/dist/EventListDialog-B8rnN9Zi.cjs.map +1 -0
  79. package/dist/{EventListDialog-1NXp1MLg.js → EventListDialog-C2pwmD0d.js} +554 -389
  80. package/dist/EventListDialog-C2pwmD0d.js.map +1 -0
  81. package/dist/{FormatvalueWidget-CZJdsUAq.js → FormatvalueWidget-CLYx8qbg.js} +3 -3
  82. package/dist/{FormatvalueWidget-CZJdsUAq.js.map → FormatvalueWidget-CLYx8qbg.js.map} +1 -1
  83. package/dist/{FormatvalueWidget-zoY5Fzwr.cjs → FormatvalueWidget-ulLzg1E-.cjs} +2 -2
  84. package/dist/{FormatvalueWidget-zoY5Fzwr.cjs.map → FormatvalueWidget-ulLzg1E-.cjs.map} +1 -1
  85. package/dist/{Graph-DZBpdSgR.js → Graph-BliBYJxD.js} +486 -1050
  86. package/dist/Graph-BliBYJxD.js.map +1 -0
  87. package/dist/Graph-DxC2MPYf.cjs +2 -0
  88. package/dist/Graph-DxC2MPYf.cjs.map +1 -0
  89. package/dist/{GraphWidget-CHm4bhMI.js → GraphWidget-Cb6Ozf54.js} +2 -2
  90. package/dist/GraphWidget-Cb6Ozf54.js.map +1 -0
  91. package/dist/{GraphWidget-P-EUkwbI.cjs → GraphWidget-g-0vO4_S.cjs} +2 -2
  92. package/dist/GraphWidget-g-0vO4_S.cjs.map +1 -0
  93. package/dist/{HorizontalWidget-B2skpV1m.js → HorizontalWidget-AY2M01qP.js} +2 -2
  94. package/dist/{HorizontalWidget-B2skpV1m.js.map → HorizontalWidget-AY2M01qP.js.map} +1 -1
  95. package/dist/{HorizontalWidget-1Gd93-D7.cjs → HorizontalWidget-BiEZZpZQ.cjs} +2 -2
  96. package/dist/{HorizontalWidget-1Gd93-D7.cjs.map → HorizontalWidget-BiEZZpZQ.cjs.map} +1 -1
  97. package/dist/{HorizontalboxWidget-BI0WZP5M.js → HorizontalboxWidget-2MEKvq_C.js} +5 -5
  98. package/dist/{HorizontalboxWidget-BI0WZP5M.js.map → HorizontalboxWidget-2MEKvq_C.js.map} +1 -1
  99. package/dist/{HorizontalboxWidget-CHFz7lCJ.cjs → HorizontalboxWidget-CWq4ej6k.cjs} +2 -2
  100. package/dist/{HorizontalboxWidget-CHFz7lCJ.cjs.map → HorizontalboxWidget-CWq4ej6k.cjs.map} +1 -1
  101. package/dist/{HorizontallineWidget-AmxVeXcU.js → HorizontallineWidget-DgpOPA7q.js} +2 -2
  102. package/dist/{HorizontallineWidget-AmxVeXcU.js.map → HorizontallineWidget-DgpOPA7q.js.map} +1 -1
  103. package/dist/{HorizontallineWidget-CCuEqHsc.cjs → HorizontallineWidget-Dm5G1l4A.cjs} +2 -2
  104. package/dist/{HorizontallineWidget-CCuEqHsc.cjs.map → HorizontallineWidget-Dm5G1l4A.cjs.map} +1 -1
  105. package/dist/{IframeWidget-DG7yUYb3.cjs → IframeWidget-DDw5t7eV.cjs} +2 -2
  106. package/dist/IframeWidget-DDw5t7eV.cjs.map +1 -0
  107. package/dist/{IframeWidget-DcqRMhyW.js → IframeWidget-UKKUl7k5.js} +2 -2
  108. package/dist/IframeWidget-UKKUl7k5.js.map +1 -0
  109. package/dist/{ImageLoader-BaDVKIBu.cjs → ImageLoader-9TCd0KxL.cjs} +2 -2
  110. package/dist/{ImageLoader-BaDVKIBu.cjs.map → ImageLoader-9TCd0KxL.cjs.map} +1 -1
  111. package/dist/{ImageLoader-ly4zoGpO.js → ImageLoader-C-CIL4YD.js} +2 -2
  112. package/dist/{ImageLoader-ly4zoGpO.js.map → ImageLoader-C-CIL4YD.js.map} +1 -1
  113. package/dist/{ImageviewerWidget-cmDHcmW4.js → ImageviewerWidget-DhuQH5Io.js} +2 -2
  114. package/dist/{ImageviewerWidget-cmDHcmW4.js.map → ImageviewerWidget-DhuQH5Io.js.map} +1 -1
  115. package/dist/{ImageviewerWidget-BgMpAFvG.cjs → ImageviewerWidget-DpXzLOpF.cjs} +2 -2
  116. package/dist/{ImageviewerWidget-BgMpAFvG.cjs.map → ImageviewerWidget-DpXzLOpF.cjs.map} +1 -1
  117. package/dist/{InterfacesTab-K7odu5gi.cjs → InterfacesTab-CiVfsUia.cjs} +2 -2
  118. package/dist/{InterfacesTab-K7odu5gi.cjs.map → InterfacesTab-CiVfsUia.cjs.map} +1 -1
  119. package/dist/{InterfacesTab-BSCFzmW1.js → InterfacesTab-Dq3oAKqz.js} +3 -3
  120. package/dist/{InterfacesTab-BSCFzmW1.js.map → InterfacesTab-Dq3oAKqz.js.map} +1 -1
  121. package/dist/{LabelWidget-D6B4JzLR.cjs → LabelWidget-D-m2gFIZ.cjs} +2 -2
  122. package/dist/{LabelWidget-D6B4JzLR.cjs.map → LabelWidget-D-m2gFIZ.cjs.map} +1 -1
  123. package/dist/{LabelWidget-Bemw8Erq.js → LabelWidget-SO9zqcNN.js} +2 -2
  124. package/dist/{LabelWidget-Bemw8Erq.js.map → LabelWidget-SO9zqcNN.js.map} +1 -1
  125. package/dist/{LabelledWidget-Dg1pZiON.cjs → LabelledWidget-BFfsD2wz.cjs} +2 -2
  126. package/dist/{LabelledWidget-Dg1pZiON.cjs.map → LabelledWidget-BFfsD2wz.cjs.map} +1 -1
  127. package/dist/{LabelledWidget-Cb7EvtUG.js → LabelledWidget-DWoM5AJ5.js} +4 -4
  128. package/dist/{LabelledWidget-Cb7EvtUG.js.map → LabelledWidget-DWoM5AJ5.js.map} +1 -1
  129. package/dist/{LabelprogressbarWidget-DrVVuiXa.cjs → LabelprogressbarWidget-B8x5YimU.cjs} +2 -2
  130. package/dist/{LabelprogressbarWidget-DrVVuiXa.cjs.map → LabelprogressbarWidget-B8x5YimU.cjs.map} +1 -1
  131. package/dist/{LabelprogressbarWidget-qYgrGqLY.js → LabelprogressbarWidget-D3vnkvQZ.js} +4 -4
  132. package/dist/{LabelprogressbarWidget-qYgrGqLY.js.map → LabelprogressbarWidget-D3vnkvQZ.js.map} +1 -1
  133. package/dist/{LabelsparklineWidget-CMklq9-f.js → LabelsparklineWidget-DO0T-Jot.js} +4 -4
  134. package/dist/{LabelsparklineWidget-CMklq9-f.js.map → LabelsparklineWidget-DO0T-Jot.js.map} +1 -1
  135. package/dist/{LabelsparklineWidget-Bht80Ncq.cjs → LabelsparklineWidget-DyPaUfc9.cjs} +2 -2
  136. package/dist/{LabelsparklineWidget-Bht80Ncq.cjs.map → LabelsparklineWidget-DyPaUfc9.cjs.map} +1 -1
  137. package/dist/{LabelvalueWidget-NjCMgiYL.js → LabelvalueWidget-B6BbNFnk.js} +4 -4
  138. package/dist/{LabelvalueWidget-NjCMgiYL.js.map → LabelvalueWidget-B6BbNFnk.js.map} +1 -1
  139. package/dist/{LabelvalueWidget-DKx6dV8b.cjs → LabelvalueWidget-cTPG6Xqi.cjs} +2 -2
  140. package/dist/{LabelvalueWidget-DKx6dV8b.cjs.map → LabelvalueWidget-cTPG6Xqi.cjs.map} +1 -1
  141. package/dist/{LabelvaluedescWidget-D8N6KdzA.cjs → LabelvaluedescWidget-C4sIZ0md.cjs} +2 -2
  142. package/dist/{LabelvaluedescWidget-D8N6KdzA.cjs.map → LabelvaluedescWidget-C4sIZ0md.cjs.map} +1 -1
  143. package/dist/{LabelvaluedescWidget-Dflulqm7.js → LabelvaluedescWidget-CxfL-H9C.js} +5 -5
  144. package/dist/{LabelvaluedescWidget-Dflulqm7.js.map → LabelvaluedescWidget-CxfL-H9C.js.map} +1 -1
  145. package/dist/{LabelvaluelimitsbarWidget-M34NDk2S.js → LabelvaluelimitsbarWidget-BT5k9mHv.js} +4 -4
  146. package/dist/{LabelvaluelimitsbarWidget-M34NDk2S.js.map → LabelvaluelimitsbarWidget-BT5k9mHv.js.map} +1 -1
  147. package/dist/{LabelvaluelimitsbarWidget-DbwVdsfd.cjs → LabelvaluelimitsbarWidget-CBnU6Afl.cjs} +2 -2
  148. package/dist/{LabelvaluelimitsbarWidget-DbwVdsfd.cjs.map → LabelvaluelimitsbarWidget-CBnU6Afl.cjs.map} +1 -1
  149. package/dist/{LabelvaluelimitscolumnWidget-1LXrtBFT.cjs → LabelvaluelimitscolumnWidget-CwoMfO0P.cjs} +2 -2
  150. package/dist/{LabelvaluelimitscolumnWidget-1LXrtBFT.cjs.map → LabelvaluelimitscolumnWidget-CwoMfO0P.cjs.map} +1 -1
  151. package/dist/{LabelvaluelimitscolumnWidget-Cchaw_-k.js → LabelvaluelimitscolumnWidget-DUbmxh4p.js} +5 -5
  152. package/dist/{LabelvaluelimitscolumnWidget-Cchaw_-k.js.map → LabelvaluelimitscolumnWidget-DUbmxh4p.js.map} +1 -1
  153. package/dist/{LabelvaluerangebarWidget-Ca6lJAZV.cjs → LabelvaluerangebarWidget-DB4gw6Rd.cjs} +2 -2
  154. package/dist/{LabelvaluerangebarWidget-Ca6lJAZV.cjs.map → LabelvaluerangebarWidget-DB4gw6Rd.cjs.map} +1 -1
  155. package/dist/{LabelvaluerangebarWidget-7pEykAm3.js → LabelvaluerangebarWidget-DexAc2UB.js} +4 -4
  156. package/dist/{LabelvaluerangebarWidget-7pEykAm3.js.map → LabelvaluerangebarWidget-DexAc2UB.js.map} +1 -1
  157. package/dist/{Layout-BNvQKlyy.js → Layout-Dd6dRf3R.js} +2 -2
  158. package/dist/{Layout-BNvQKlyy.js.map → Layout-Dd6dRf3R.js.map} +1 -1
  159. package/dist/Layout-DvBekli8.cjs +2 -0
  160. package/dist/{Layout-CXwcgFxa.cjs.map → Layout-DvBekli8.cjs.map} +1 -1
  161. package/dist/{LedWidget-_EA7ZKM8.js → LedWidget-D1RwHb_V.js} +4 -4
  162. package/dist/{LedWidget-_EA7ZKM8.js.map → LedWidget-D1RwHb_V.js.map} +1 -1
  163. package/dist/{LedWidget-CafSb6jG.cjs → LedWidget-a99ygZOA.cjs} +2 -2
  164. package/dist/{LedWidget-CafSb6jG.cjs.map → LedWidget-a99ygZOA.cjs.map} +1 -1
  165. package/dist/{LimitsbarWidget-DdoQf46y.js → LimitsbarWidget-ClOmoV50.js} +2 -2
  166. package/dist/{LimitsbarWidget-DdoQf46y.js.map → LimitsbarWidget-ClOmoV50.js.map} +1 -1
  167. package/dist/{LimitsbarWidget-B4E6eQgY.cjs → LimitsbarWidget-DaHpj-rM.cjs} +2 -2
  168. package/dist/{LimitsbarWidget-B4E6eQgY.cjs.map → LimitsbarWidget-DaHpj-rM.cjs.map} +1 -1
  169. package/dist/{LimitscolorWidget-Cv0umnVo.js → LimitscolorWidget-CBUoEYKp.js} +2 -2
  170. package/dist/{LimitscolorWidget-Cv0umnVo.js.map → LimitscolorWidget-CBUoEYKp.js.map} +1 -1
  171. package/dist/{LimitscolorWidget-B-ESO_oy.cjs → LimitscolorWidget-D4nPHQlI.cjs} +2 -2
  172. package/dist/{LimitscolorWidget-B-ESO_oy.cjs.map → LimitscolorWidget-D4nPHQlI.cjs.map} +1 -1
  173. package/dist/{LimitscolumnWidget-CnCQtxim.js → LimitscolumnWidget-hsHkmY-_.js} +2 -2
  174. package/dist/{LimitscolumnWidget-CnCQtxim.js.map → LimitscolumnWidget-hsHkmY-_.js.map} +1 -1
  175. package/dist/{LimitscolumnWidget-PbEe5NP1.cjs → LimitscolumnWidget-wIx0L9hb.cjs} +2 -2
  176. package/dist/{LimitscolumnWidget-PbEe5NP1.cjs.map → LimitscolumnWidget-wIx0L9hb.cjs.map} +1 -1
  177. package/dist/{LinegraphWidget-Bto_2lSc.cjs → LinegraphWidget-BRnwhfEQ.cjs} +2 -2
  178. package/dist/{LinegraphWidget-Bto_2lSc.cjs.map → LinegraphWidget-BRnwhfEQ.cjs.map} +1 -1
  179. package/dist/{LinegraphWidget-ekyQoR7x.js → LinegraphWidget-CXrKtxOo.js} +4 -4
  180. package/dist/{LinegraphWidget-ekyQoR7x.js.map → LinegraphWidget-CXrKtxOo.js.map} +1 -1
  181. package/dist/{MatrixbycolumnsWidget-bMjMlQYz.cjs → MatrixbycolumnsWidget-3jldaS14.cjs} +2 -2
  182. package/dist/{MatrixbycolumnsWidget-bMjMlQYz.cjs.map → MatrixbycolumnsWidget-3jldaS14.cjs.map} +1 -1
  183. package/dist/{MatrixbycolumnsWidget-IBUcGNF7.js → MatrixbycolumnsWidget-CsogVU9c.js} +3 -3
  184. package/dist/{MatrixbycolumnsWidget-IBUcGNF7.js.map → MatrixbycolumnsWidget-CsogVU9c.js.map} +1 -1
  185. package/dist/{MicroservicesTab-BXb4TPjR.cjs → MicroservicesTab-3pNZZ5I0.cjs} +2 -2
  186. package/dist/{MicroservicesTab-BXb4TPjR.cjs.map → MicroservicesTab-3pNZZ5I0.cjs.map} +1 -1
  187. package/dist/{MicroservicesTab-CUqp5uFH.js → MicroservicesTab-DzEvbxlM.js} +3 -3
  188. package/dist/{MicroservicesTab-CUqp5uFH.js.map → MicroservicesTab-DzEvbxlM.js.map} +1 -1
  189. package/dist/{Openc3Screen-ByRi15VK.cjs → Openc3Screen-CD3C_EUo.cjs} +2 -2
  190. package/dist/{Openc3Screen-ByRi15VK.cjs.map → Openc3Screen-CD3C_EUo.cjs.map} +1 -1
  191. package/dist/{Openc3Screen-B31-mKUZ.js → Openc3Screen-Cqm5Xtd-.js} +3 -3
  192. package/dist/{Openc3Screen-B31-mKUZ.js.map → Openc3Screen-Cqm5Xtd-.js.map} +1 -1
  193. package/dist/{OutputDialog-wBy-sg3k.js → OutputDialog-7M4L50tA.js} +2 -2
  194. package/dist/{OutputDialog-wBy-sg3k.js.map → OutputDialog-7M4L50tA.js.map} +1 -1
  195. package/dist/{OutputDialog-CXQ5-PgU.cjs → OutputDialog-CnDQxHTZ.cjs} +2 -2
  196. package/dist/{OutputDialog-CXQ5-PgU.cjs.map → OutputDialog-CnDQxHTZ.cjs.map} +1 -1
  197. package/dist/{PackagesTab-oOtpCEIX.cjs → PackagesTab-DPPXZvoV.cjs} +2 -2
  198. package/dist/{PackagesTab-oOtpCEIX.cjs.map → PackagesTab-DPPXZvoV.cjs.map} +1 -1
  199. package/dist/{PackagesTab-BSVPTVe7.js → PackagesTab-N4SD1Pxj.js} +3 -3
  200. package/dist/{PackagesTab-BSVPTVe7.js.map → PackagesTab-N4SD1Pxj.js.map} +1 -1
  201. package/dist/{PluginsTab-DShjzJVP.js → PluginsTab-C7PH2Wym.js} +4 -4
  202. package/dist/{PluginsTab-DShjzJVP.js.map → PluginsTab-C7PH2Wym.js.map} +1 -1
  203. package/dist/{PluginsTab-D2-nxcCZ.cjs → PluginsTab-xzPlEMYj.cjs} +2 -2
  204. package/dist/{PluginsTab-D2-nxcCZ.cjs.map → PluginsTab-xzPlEMYj.cjs.map} +1 -1
  205. package/dist/{ProgressbarWidget-CnveFZVh.js → ProgressbarWidget-CO6CEkxP.js} +2 -2
  206. package/dist/{ProgressbarWidget-CnveFZVh.js.map → ProgressbarWidget-CO6CEkxP.js.map} +1 -1
  207. package/dist/{ProgressbarWidget-KBhRifXc.cjs → ProgressbarWidget-CPeGR-Az.cjs} +2 -2
  208. package/dist/{ProgressbarWidget-KBhRifXc.cjs.map → ProgressbarWidget-CPeGR-Az.cjs.map} +1 -1
  209. package/dist/{RadiobuttonWidget-hWLrCb8W.js → RadiobuttonWidget-DrxUclws.js} +2 -2
  210. package/dist/{RadiobuttonWidget-hWLrCb8W.js.map → RadiobuttonWidget-DrxUclws.js.map} +1 -1
  211. package/dist/{RadiobuttonWidget-Dt1lTgs1.cjs → RadiobuttonWidget-DucgkAYD.cjs} +2 -2
  212. package/dist/{RadiobuttonWidget-Dt1lTgs1.cjs.map → RadiobuttonWidget-DucgkAYD.cjs.map} +1 -1
  213. package/dist/{RadiogroupWidget-CT4otlQS.cjs → RadiogroupWidget-C7oVFRf3.cjs} +2 -2
  214. package/dist/{RadiogroupWidget-CT4otlQS.cjs.map → RadiogroupWidget-C7oVFRf3.cjs.map} +1 -1
  215. package/dist/{RadiogroupWidget-DK1fphkh.js → RadiogroupWidget-DN9C38cg.js} +2 -2
  216. package/dist/{RadiogroupWidget-DK1fphkh.js.map → RadiogroupWidget-DN9C38cg.js.map} +1 -1
  217. package/dist/{RangebarWidget-vspY8CGV.js → RangebarWidget-5uQTfLMP.js} +2 -2
  218. package/dist/{RangebarWidget-vspY8CGV.js.map → RangebarWidget-5uQTfLMP.js.map} +1 -1
  219. package/dist/{RangebarWidget-DquzegM5.cjs → RangebarWidget-Da9S3KMB.cjs} +2 -2
  220. package/dist/{RangebarWidget-DquzegM5.cjs.map → RangebarWidget-Da9S3KMB.cjs.map} +1 -1
  221. package/dist/{RedisTab-DBbLlP9e.cjs → RedisTab-BFTaPNRc.cjs} +2 -2
  222. package/dist/{RedisTab-DBbLlP9e.cjs.map → RedisTab-BFTaPNRc.cjs.map} +1 -1
  223. package/dist/{RedisTab-B28s52_T.js → RedisTab-Cyrr_g9k.js} +2 -2
  224. package/dist/{RedisTab-B28s52_T.js.map → RedisTab-Cyrr_g9k.js.map} +1 -1
  225. package/dist/{RollupWidget-07pNcXQV.js → RollupWidget-B0DCULnu.js} +2 -2
  226. package/dist/{RollupWidget-07pNcXQV.js.map → RollupWidget-B0DCULnu.js.map} +1 -1
  227. package/dist/{RollupWidget-CoxNKLcv.cjs → RollupWidget-DK0eFASs.cjs} +2 -2
  228. package/dist/{RollupWidget-CoxNKLcv.cjs.map → RollupWidget-DK0eFASs.cjs.map} +1 -1
  229. package/dist/{RoutersTab-DEtxUph7.cjs → RoutersTab-B8JIxjdI.cjs} +2 -2
  230. package/dist/{RoutersTab-DEtxUph7.cjs.map → RoutersTab-B8JIxjdI.cjs.map} +1 -1
  231. package/dist/{RoutersTab-DX_r6FEQ.js → RoutersTab-BAfpG8k3.js} +3 -3
  232. package/dist/{RoutersTab-DX_r6FEQ.js.map → RoutersTab-BAfpG8k3.js.map} +1 -1
  233. package/dist/ScriptChooser-ahp4Tu3O.js +573 -0
  234. package/dist/ScriptChooser-ahp4Tu3O.js.map +1 -0
  235. package/dist/ScriptChooser-ma6P0WuM.cjs +2 -0
  236. package/dist/ScriptChooser-ma6P0WuM.cjs.map +1 -0
  237. package/dist/{ScrollwindowWidget-BcbyrYUo.js → ScrollwindowWidget-BOkZQgtf.js} +3 -3
  238. package/dist/{ScrollwindowWidget-BcbyrYUo.js.map → ScrollwindowWidget-BOkZQgtf.js.map} +1 -1
  239. package/dist/{ScrollwindowWidget-Djvcd1yX.cjs → ScrollwindowWidget-xM_R_Arq.cjs} +2 -2
  240. package/dist/{ScrollwindowWidget-Djvcd1yX.cjs.map → ScrollwindowWidget-xM_R_Arq.cjs.map} +1 -1
  241. package/dist/{SecretsTab-BNFEqrT1.js → SecretsTab-D5RxHYVp.js} +2 -2
  242. package/dist/{SecretsTab-BNFEqrT1.js.map → SecretsTab-D5RxHYVp.js.map} +1 -1
  243. package/dist/{SecretsTab-cG1U2SyL.cjs → SecretsTab-DoHYppoO.cjs} +2 -2
  244. package/dist/{SecretsTab-cG1U2SyL.cjs.map → SecretsTab-DoHYppoO.cjs.map} +1 -1
  245. package/dist/{SettingsTab-C4T8ecIZ.js → SettingsTab-CKGQEwd_.js} +137 -121
  246. package/dist/SettingsTab-CKGQEwd_.js.map +1 -0
  247. package/dist/{SettingsTab-DvUFxNoM.cjs → SettingsTab-Dvnzqzdp.cjs} +3 -3
  248. package/dist/SettingsTab-Dvnzqzdp.cjs.map +1 -0
  249. package/dist/{SignalWidget-9IqQEM4M.cjs → SignalWidget-BWKgNMdV.cjs} +2 -2
  250. package/dist/{SignalWidget-9IqQEM4M.cjs.map → SignalWidget-BWKgNMdV.cjs.map} +1 -1
  251. package/dist/{SignalWidget-BDp5sUHj.js → SignalWidget-Cis0Xkea.js} +2 -2
  252. package/dist/{SignalWidget-BDp5sUHj.js.map → SignalWidget-Cis0Xkea.js.map} +1 -1
  253. package/dist/{SimpleTextDialog-C1trfMSJ.cjs → SimpleTextDialog-BCNn5FZh.cjs} +2 -2
  254. package/dist/{SimpleTextDialog-C1trfMSJ.cjs.map → SimpleTextDialog-BCNn5FZh.cjs.map} +1 -1
  255. package/dist/{SimpleTextDialog-LQJdcAXX.js → SimpleTextDialog-D2mEDvGY.js} +2 -2
  256. package/dist/{SimpleTextDialog-LQJdcAXX.js.map → SimpleTextDialog-D2mEDvGY.js.map} +1 -1
  257. package/dist/{SpacerWidget-DcOnQ1yI.js → SpacerWidget-CLcqC2Qk.js} +2 -2
  258. package/dist/{SpacerWidget-DcOnQ1yI.js.map → SpacerWidget-CLcqC2Qk.js.map} +1 -1
  259. package/dist/{SpacerWidget-BS_oBLMC.cjs → SpacerWidget-_daU5QnM.cjs} +2 -2
  260. package/dist/{SpacerWidget-BS_oBLMC.cjs.map → SpacerWidget-_daU5QnM.cjs.map} +1 -1
  261. package/dist/{SparklineWidget-CVglnlAm.js → SparklineWidget-CTp83eZ-.js} +4 -4
  262. package/dist/{SparklineWidget-CVglnlAm.js.map → SparklineWidget-CTp83eZ-.js.map} +1 -1
  263. package/dist/{SparklineWidget-CciCNv5R.cjs → SparklineWidget-qRnlPzJ_.cjs} +2 -2
  264. package/dist/{SparklineWidget-CciCNv5R.cjs.map → SparklineWidget-qRnlPzJ_.cjs.map} +1 -1
  265. package/dist/{TabbookWidget-hCZ5AcLk.cjs → TabbookWidget-C0Fvv-o5.cjs} +2 -2
  266. package/dist/{TabbookWidget-hCZ5AcLk.cjs.map → TabbookWidget-C0Fvv-o5.cjs.map} +1 -1
  267. package/dist/{TabbookWidget-p51Oa7Ru.js → TabbookWidget-uucd-zsX.js} +2 -2
  268. package/dist/{TabbookWidget-p51Oa7Ru.js.map → TabbookWidget-uucd-zsX.js.map} +1 -1
  269. package/dist/TargetPacketItemChooser-CAl-fNql.cjs +2 -0
  270. package/dist/TargetPacketItemChooser-CAl-fNql.cjs.map +1 -0
  271. package/dist/TargetPacketItemChooser-CXpSx-eA.js +572 -0
  272. package/dist/TargetPacketItemChooser-CXpSx-eA.js.map +1 -0
  273. package/dist/{TargetsTab-CBagO3CX.js → TargetsTab-CM4ABe5y.js} +3 -3
  274. package/dist/{TargetsTab-CBagO3CX.js.map → TargetsTab-CM4ABe5y.js.map} +1 -1
  275. package/dist/{TargetsTab-CTzQTnuk.cjs → TargetsTab-Ixql3xzm.cjs} +2 -2
  276. package/dist/{TargetsTab-CTzQTnuk.cjs.map → TargetsTab-Ixql3xzm.cjs.map} +1 -1
  277. package/dist/{TextboxWidget-DM-XX97e.js → TextboxWidget-C2n38ti5.js} +4 -4
  278. package/dist/{TextboxWidget-DM-XX97e.js.map → TextboxWidget-C2n38ti5.js.map} +1 -1
  279. package/dist/{TextboxWidget-BhtvlFuj.cjs → TextboxWidget-DrdMC0EB.cjs} +2 -2
  280. package/dist/{TextboxWidget-BhtvlFuj.cjs.map → TextboxWidget-DrdMC0EB.cjs.map} +1 -1
  281. package/dist/{TextfieldWidget-7cYHAgH8.js → TextfieldWidget--HTv9ddk.js} +2 -2
  282. package/dist/{TextfieldWidget-7cYHAgH8.js.map → TextfieldWidget--HTv9ddk.js.map} +1 -1
  283. package/dist/{TextfieldWidget-ChH9glbY.cjs → TextfieldWidget-VeOem1w3.cjs} +2 -2
  284. package/dist/{TextfieldWidget-ChH9glbY.cjs.map → TextfieldWidget-VeOem1w3.cjs.map} +1 -1
  285. package/dist/{TimeWidget-CUm-LMyL.cjs → TimeWidget-C9ltUWFh.cjs} +2 -2
  286. package/dist/{TimeWidget-CUm-LMyL.cjs.map → TimeWidget-C9ltUWFh.cjs.map} +1 -1
  287. package/dist/{TimeWidget-EvQJyu6x.js → TimeWidget-CPNVZaUM.js} +2 -2
  288. package/dist/{TimeWidget-EvQJyu6x.js.map → TimeWidget-CPNVZaUM.js.map} +1 -1
  289. package/dist/{TitleWidget-6ddfJuqd.js → TitleWidget-Cp0cb6V8.js} +2 -2
  290. package/dist/{TitleWidget-6ddfJuqd.js.map → TitleWidget-Cp0cb6V8.js.map} +1 -1
  291. package/dist/{TitleWidget-Es1lfe61.cjs → TitleWidget-IuUVZkLh.cjs} +2 -2
  292. package/dist/{TitleWidget-Es1lfe61.cjs.map → TitleWidget-IuUVZkLh.cjs.map} +1 -1
  293. package/dist/ToolsTab-Bgrj0eGr.cjs +7 -0
  294. package/dist/ToolsTab-Bgrj0eGr.cjs.map +1 -0
  295. package/dist/{ToolsTab-ClJNvp8z.js → ToolsTab-DGjyBWkp.js} +5 -5
  296. package/dist/ToolsTab-DGjyBWkp.js.map +1 -0
  297. package/dist/{TopBar-CmP-ZyVe.js → TopBar-B48yYbtR.js} +79 -65
  298. package/dist/{TopBar-CmP-ZyVe.js.map → TopBar-B48yYbtR.js.map} +1 -1
  299. package/dist/TopBar-DLz-U85G.cjs +2 -0
  300. package/dist/{TopBar-xyBcJsNc.cjs.map → TopBar-DLz-U85G.cjs.map} +1 -1
  301. package/dist/{UpgradeToEnterpriseDialog-DpWUa84S.js → UpgradeToEnterpriseDialog-C2Ggr_Xd.js} +2 -2
  302. package/dist/{UpgradeToEnterpriseDialog-DpWUa84S.js.map → UpgradeToEnterpriseDialog-C2Ggr_Xd.js.map} +1 -1
  303. package/dist/{UpgradeToEnterpriseDialog-CViAJs_M.cjs → UpgradeToEnterpriseDialog-DtckZO3_.cjs} +2 -2
  304. package/dist/{UpgradeToEnterpriseDialog-CViAJs_M.cjs.map → UpgradeToEnterpriseDialog-DtckZO3_.cjs.map} +1 -1
  305. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs} +39 -39
  306. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs.map +1 -0
  307. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js} +2272 -2208
  308. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-JEZNdnan.js.map +1 -0
  309. package/dist/{VWidget-3jbGZ8Dh.cjs → VWidget-Cf9MXbCl.cjs} +2 -2
  310. package/dist/{VWidget-3jbGZ8Dh.cjs.map → VWidget-Cf9MXbCl.cjs.map} +1 -1
  311. package/dist/{VWidget-P-X9ffkl.js → VWidget-DQGJRgAk.js} +3 -3
  312. package/dist/{VWidget-P-X9ffkl.js.map → VWidget-DQGJRgAk.js.map} +1 -1
  313. package/dist/{ValueWidget-DAUGuQ9f.js → ValueWidget-Bk1RFjks.js} +4 -4
  314. package/dist/{ValueWidget-DAUGuQ9f.js.map → ValueWidget-Bk1RFjks.js.map} +1 -1
  315. package/dist/{ValueWidget-D3yaN8DJ.cjs → ValueWidget-BmXm9dYt.cjs} +2 -2
  316. package/dist/{ValueWidget-D3yaN8DJ.cjs.map → ValueWidget-BmXm9dYt.cjs.map} +1 -1
  317. package/dist/{ValuelimitsbarWidget-DmLUXw0I.js → ValuelimitsbarWidget-C0HIBYh2.js} +4 -4
  318. package/dist/{ValuelimitsbarWidget-DmLUXw0I.js.map → ValuelimitsbarWidget-C0HIBYh2.js.map} +1 -1
  319. package/dist/{ValuelimitsbarWidget-DGwtzXt6.cjs → ValuelimitsbarWidget-PjCpjhsr.cjs} +2 -2
  320. package/dist/{ValuelimitsbarWidget-DGwtzXt6.cjs.map → ValuelimitsbarWidget-PjCpjhsr.cjs.map} +1 -1
  321. package/dist/{ValuelimitscolumnWidget-BRYnKfQk.cjs → ValuelimitscolumnWidget-BGiDDUI_.cjs} +2 -2
  322. package/dist/{ValuelimitscolumnWidget-BRYnKfQk.cjs.map → ValuelimitscolumnWidget-BGiDDUI_.cjs.map} +1 -1
  323. package/dist/{ValuelimitscolumnWidget-DDmo8wHJ.js → ValuelimitscolumnWidget-BTT90uyX.js} +4 -4
  324. package/dist/{ValuelimitscolumnWidget-DDmo8wHJ.js.map → ValuelimitscolumnWidget-BTT90uyX.js.map} +1 -1
  325. package/dist/{ValuerangebarWidget-CbzWSWq3.js → ValuerangebarWidget-CcQw_XK9.js} +4 -4
  326. package/dist/{ValuerangebarWidget-CbzWSWq3.js.map → ValuerangebarWidget-CcQw_XK9.js.map} +1 -1
  327. package/dist/{ValuerangebarWidget-hi5jZvo8.cjs → ValuerangebarWidget-ClmX-qH_.cjs} +2 -2
  328. package/dist/{ValuerangebarWidget-hi5jZvo8.cjs.map → ValuerangebarWidget-ClmX-qH_.cjs.map} +1 -1
  329. package/dist/{VerticalWidget-CRFI8Dq6.cjs → VerticalWidget-BeDWsvP6.cjs} +2 -2
  330. package/dist/{VerticalWidget-CRFI8Dq6.cjs.map → VerticalWidget-BeDWsvP6.cjs.map} +1 -1
  331. package/dist/{VerticalWidget-BuKinn_c.js → VerticalWidget-CNtFQv3R.js} +2 -2
  332. package/dist/{VerticalWidget-BuKinn_c.js.map → VerticalWidget-CNtFQv3R.js.map} +1 -1
  333. package/dist/{VerticalboxWidget-1qp7u87Q.cjs → VerticalboxWidget-DlokKDBD.cjs} +2 -2
  334. package/dist/{VerticalboxWidget-1qp7u87Q.cjs.map → VerticalboxWidget-DlokKDBD.cjs.map} +1 -1
  335. package/dist/{VerticalboxWidget-C0zD5h0O.js → VerticalboxWidget-Yxmz1SnU.js} +5 -5
  336. package/dist/{VerticalboxWidget-C0zD5h0O.js.map → VerticalboxWidget-Yxmz1SnU.js.map} +1 -1
  337. package/dist/{Widget-wEcPyNXg.cjs → Widget-HC1_yuQg.cjs} +2 -2
  338. package/dist/{Widget-wEcPyNXg.cjs.map → Widget-HC1_yuQg.cjs.map} +1 -1
  339. package/dist/{Widget-BIXl-Pk5.js → Widget-LsyjS7ZS.js} +2 -2
  340. package/dist/{Widget-BIXl-Pk5.js.map → Widget-LsyjS7ZS.js.map} +1 -1
  341. package/dist/addMonths-BtG7uZLJ.js.map +1 -1
  342. package/dist/addMonths-n1tnl3ab.cjs.map +1 -1
  343. package/dist/components.cjs +3 -3
  344. package/dist/components.cjs.map +1 -1
  345. package/dist/components.js +229 -622
  346. package/dist/components.js.map +1 -1
  347. package/dist/format-B22VpiOS.cjs.map +1 -1
  348. package/dist/format-CVeawcIv.js.map +1 -1
  349. package/dist/getDefaultOptions-Batab9o8.cjs.map +1 -1
  350. package/dist/getDefaultOptions-BhSDk-Jo.js.map +1 -1
  351. package/dist/index-DS1ACWVr.js.map +1 -1
  352. package/dist/index-Nd4O4kac.cjs.map +1 -1
  353. package/dist/parse-DnkEsW-3.js.map +1 -1
  354. package/dist/parse-DwfgQboe.cjs.map +1 -1
  355. package/dist/plugins.cjs +2 -2
  356. package/dist/plugins.cjs.map +1 -1
  357. package/dist/plugins.js +87 -83
  358. package/dist/plugins.js.map +1 -1
  359. package/dist/purify.es-GHnZTJ9O.cjs +3 -0
  360. package/dist/purify.es-GHnZTJ9O.cjs.map +1 -0
  361. package/dist/purify.es-eYFoHPwR.js +529 -0
  362. package/dist/purify.es-eYFoHPwR.js.map +1 -0
  363. package/dist/{settings-DToCplG_.js → settings-DCxXjkio.js} +2 -2
  364. package/dist/{settings-DToCplG_.js.map → settings-DCxXjkio.js.map} +1 -1
  365. package/dist/{settings-CUg4_VNE.cjs → settings-zRw8EylV.cjs} +2 -2
  366. package/dist/{settings-CUg4_VNE.cjs.map → settings-zRw8EylV.cjs.map} +1 -1
  367. package/dist/timeFilters-BKnCM4rv.js.map +1 -1
  368. package/dist/timeFilters-CJFxfjqN.cjs.map +1 -1
  369. package/dist/tools/admin.cjs +1 -1
  370. package/dist/tools/admin.cjs.map +1 -1
  371. package/dist/tools/admin.js +12 -12
  372. package/dist/tools/admin.js.map +1 -1
  373. package/dist/tools/base.cjs +1 -1
  374. package/dist/tools/base.cjs.map +1 -1
  375. package/dist/tools/base.js +324 -320
  376. package/dist/tools/base.js.map +1 -1
  377. package/dist/tools/calendar.cjs +1 -1
  378. package/dist/tools/calendar.js +1 -1
  379. package/dist/tools/scriptrunner.cjs +8 -7
  380. package/dist/tools/scriptrunner.cjs.map +1 -1
  381. package/dist/tools/scriptrunner.js +1497 -1288
  382. package/dist/tools/scriptrunner.js.map +1 -1
  383. package/dist/vue-common.css +1 -1
  384. package/dist/widgets.cjs +1 -1
  385. package/dist/widgets.js +63 -63
  386. package/package.json +5 -2
  387. package/dist/EventListDialog-1NXp1MLg.js.map +0 -1
  388. package/dist/EventListDialog-BwSJXEhw.cjs +0 -2
  389. package/dist/EventListDialog-BwSJXEhw.cjs.map +0 -1
  390. package/dist/Graph-BuKXPKyK.cjs +0 -2
  391. package/dist/Graph-BuKXPKyK.cjs.map +0 -1
  392. package/dist/Graph-DZBpdSgR.js.map +0 -1
  393. package/dist/GraphWidget-CHm4bhMI.js.map +0 -1
  394. package/dist/GraphWidget-P-EUkwbI.cjs.map +0 -1
  395. package/dist/IframeWidget-DG7yUYb3.cjs.map +0 -1
  396. package/dist/IframeWidget-DcqRMhyW.js.map +0 -1
  397. package/dist/Layout-CXwcgFxa.cjs +0 -2
  398. package/dist/ScriptChooser-BZMnm4SX.cjs +0 -2
  399. package/dist/ScriptChooser-BZMnm4SX.cjs.map +0 -1
  400. package/dist/ScriptChooser-Ci_3uZDo.js +0 -176
  401. package/dist/ScriptChooser-Ci_3uZDo.js.map +0 -1
  402. package/dist/SettingsTab-C4T8ecIZ.js.map +0 -1
  403. package/dist/SettingsTab-DvUFxNoM.cjs.map +0 -1
  404. package/dist/ToolsTab-ClJNvp8z.js.map +0 -1
  405. package/dist/ToolsTab-PKUy_HaM.cjs +0 -7
  406. package/dist/ToolsTab-PKUy_HaM.cjs.map +0 -1
  407. package/dist/TopBar-xyBcJsNc.cjs +0 -2
  408. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js.map +0 -1
  409. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PluginsTab-DShjzJVP.js","sources":["../src/plugins/plugin-store/PluginProps.js","../src/plugins/plugin-store/PluginDetailsDialog.vue","../src/plugins/plugin-store/PluginCard.vue","../src/plugins/plugin-store/PluginStoreSettingsDialog.vue","../src/plugins/plugin-store/PluginStore.vue","../src/tools/admin/tabs/plugins/PluginListItem.vue","../src/tools/admin/tabs/plugins/PluginList.vue","../src/tools/admin/tabs/PluginsTab.vue"],"sourcesContent":["/*\n# Copyright 2025, OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nconst settingName = 'store_url'\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n description: String,\n keywords: Array,\n image_url: String,\n license: String,\n // rating: Number,\n // downloads: Number,\n verified: Boolean,\n homepage: String,\n repository: String,\n gem_url: String,\n checksum: String,\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n }\n },\n computed: {\n plugin: function () {\n return {\n id: this.id,\n name: this.name,\n title: this.title,\n // titleSlug: this.titleSlug,\n author: this.author,\n // authorSlug: this.authorSlug,\n description: this.description,\n keywords: this.keywords,\n image_url: this.image_url,\n license: this.license,\n // rating: this.rating,\n // downloads: this.downloads,\n verified: this.verified,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n checksum: this.checksum,\n }\n },\n storeLink: function () {\n if (this.hasStoreListing) {\n return new URL(`/cosmos_plugins/${this.id}`, this._storeUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n },\n created: function () {\n this._api\n .get_setting(settingName)\n .then((storeUrl) => (this._storeUrl = storeUrl || 'https://store.openc3.com'))\n },\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <slot name=\"activator\" :props=\"{ onClick: openDialog }\"></slot>\n <v-dialog v-model=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeLink\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n size=\"small\"\n variant=\"plain\"\n />\n </div>\n </template>\n <span> View at store.openc3.com </span>\n </v-tooltip>\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\n </v-toolbar>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <v-spacer />\n <div v-if=\"verified\">\n Verified\n <v-badge inline icon=\"mdi-shield-check\" color=\"success\" />\n </div>\n </v-card-subtitle>\n <!--\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>\n <v-icon icon=\"mdi-cloud-download\" size=\"x-small\" />\n {{ downloads }} downloads\n </div>\n <v-spacer />\n <div class=\"d-flex align-center\">\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n </div>\n </v-card-subtitle>\n -->\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" />\n <div v-text=\"description\" />\n <div class=\"mt-3 text-caption font-italic\">License: {{ license }}</div>\n <v-text-field\n v-model=\"checksum\"\n label=\"SHA256\"\n variant=\"solo\"\n density=\"compact\"\n hide-details\n readonly\n >\n <template #append>\n <v-tooltip\n v-model=\"showCopiedTooltip\"\n location=\"top\"\n :open-on-hover=\"false\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-content-copy\"\n variant=\"text\"\n density=\"compact\"\n @click=\"copyChecksum\"\n />\n </template>\n <span>Copied!</span>\n </v-tooltip>\n </template>\n </v-text-field>\n </v-card-text>\n\n <v-card-actions class=\"justify-start px-6\">\n <v-btn\n v-if=\"isPluginInstalled\"\n text=\"Uninstall\"\n append-icon=\"mdi-puzzle-remove\"\n variant=\"outlined\"\n color=\"red\"\n @click=\"uninstall\"\n />\n <v-btn\n v-else\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click=\"install\"\n />\n <v-btn\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"repository\"\n target=\"_blank\"\n />\n <v-btn\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"homepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\n\nexport default {\n mixins: [PluginProps],\n props: {\n modelValue: Boolean,\n },\n emits: ['triggerInstall', 'triggerUninstall', 'update:modelValue'],\n data() {\n return {\n showDialog: false,\n showCopiedTooltip: false,\n }\n },\n computed: {\n isDialogOpen: {\n get: function () {\n return this.modelValue || this.showDialog\n },\n set: function (val) {\n this.showDialog = val\n this.$emit('update:modelValue', val)\n },\n },\n },\n methods: {\n openDialog: function () {\n this.isDialogOpen = true\n },\n closeDialog: function () {\n this.isDialogOpen = false\n },\n install: function () {\n this.$emit('triggerInstall', this.gemUrl)\n },\n uninstall: function () {\n this.$emit('triggerUninstall', this.gemUrl)\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.checksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <plugin-details-dialog v-bind=\"plugin\" @trigger-install=\"install\">\n <template #activator=\"{ props }\">\n <v-card v-bind=\"props\" height=\"350\" class=\"d-flex flex-column\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n <v-spacer />\n <v-badge\n v-if=\"verified\"\n inline\n icon=\"mdi-shield-check\"\n color=\"success\"\n />\n </v-card-title>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <!--\n <v-spacer />\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n -->\n </v-card-subtitle>\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n <div\n :class=\"{\n 'truncate-description': true,\n 'truncate-2': !!image_url,\n 'truncate-10': !image_url,\n }\"\n v-text=\"description\"\n />\n </v-card-text>\n <v-spacer />\n <v-card-actions class=\"flex-wrap\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click.stop=\"install\"\n />\n </v-card-actions>\n </v-card>\n </template>\n </plugin-details-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\nimport PluginDetailsDialog from './PluginDetailsDialog.vue'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n emits: ['triggerInstall'],\n methods: {\n install: function () {\n this.$emit('triggerInstall', this.plugin)\n },\n },\n}\n</script>\n\n<style scoped>\n.truncate-description {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate-2 {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n}\n\n.truncate-10 {\n line-clamp: 10;\n -webkit-line-clamp: 10;\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"showDialog\" width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Plugin Store Settings</span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-alert v-model=\"errorLoading\" type=\"error\" closable density=\"compact\">\n Error loading previous configuration due to {{ errorText }}\n </v-alert>\n <v-alert v-model=\"errorSaving\" type=\"error\" closable density=\"compact\">\n Error saving due to {{ errorText }}\n </v-alert>\n <v-alert\n v-model=\"successSaving\"\n type=\"success\"\n closable\n density=\"compact\"\n >\n Saved!\n </v-alert>\n <v-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n </v-card-text>\n <v-card-actions>\n <v-btn\n color=\"success\"\n variant=\"text\"\n text=\"Save\"\n data-test=\"save-store-settings-btn\"\n @click=\"save\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst SETTING_NAME = 'store_url'\nconst SETTING_SCOPE = 'DEFAULT'\nexport default {\n mixins: [Settings],\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue', 'update:storeUrl'],\n data() {\n return {\n showDialog: false,\n storeUrl: '',\n rules: {\n required: (value) => !!value || 'Required',\n url: (value) => {\n try {\n new URL(value)\n } catch (_) {\n return 'Not a valid URL'\n }\n return true\n },\n },\n }\n },\n watch: {\n modelValue: function (val) {\n if (val) {\n this.showDialog = val\n }\n },\n showDialog: function (val) {\n if (!val) {\n this.$emit('update:modelValue', val)\n }\n },\n },\n created: function () {\n this.loadSetting(SETTING_NAME, { scope: SETTING_SCOPE })\n },\n methods: {\n save() {\n this.saveSetting(SETTING_NAME, this.storeUrl, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response) {\n if (response) {\n this.storeUrl = response\n } else {\n // Default URL if setting is not found\n this.storeUrl = 'https://store.openc3.com'\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-sheet class=\"pb-11 pt-8 px-8\" height=\"100%\">\n <div class=\"d-flex justify-content-space-between\">\n <div>\n <div class=\"text-h3 mb-3\">OpenC3 Plugin Store</div>\n <div class=\"text-subtitle-1\">\n Browse plugins made by OpenC3 and the COSMOS community\n </div>\n </div>\n <v-spacer />\n <v-btn icon=\"mdi-cog\" variant=\"text\" @click=\"openSettings\" />\n\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n href=\"https://store.openc3.com\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open store.openc3.com </span>\n </v-tooltip>\n\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"close\" />\n </div>\n <div class=\"d-inline-flex align-center w-100\">\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n data-test=\"search-plugin-store\"\n />\n <v-switch\n v-model=\"verifiedOnly\"\n label=\"Verified only\"\n density=\"compact\"\n hide-details\n class=\"ml-4\"\n />\n </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-container>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card v-bind=\"plugin\" @trigger-install=\"install\" />\n </v-col>\n </v-row>\n </v-container>\n </v-sheet>\n <plugin-store-settings-dialog\n v-model=\"showSettingsDialog\"\n @update:store-url=\"updatePluginStore\"\n />\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { PluginCard } from '@/plugins/plugin-store'\nimport PluginStoreSettingsDialog from './PluginStoreSettingsDialog.vue' // idk why importing from @/plugins/plugin-store isn't working\n\nexport default {\n components: {\n PluginCard,\n PluginStoreSettingsDialog,\n },\n emits: ['close', 'triggerInstall'],\n data() {\n return {\n api: new OpenC3Api(),\n search: '',\n verifiedOnly: false,\n showSettingsDialog: false,\n plugins: [],\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\n if (this.verifiedOnly) {\n filtered = filtered.filter((plugin) => plugin.verified)\n }\n if (this.search.length) {\n filtered = filtered.filter((plugin) =>\n plugin.title.toLowerCase().includes(this.search.toLowerCase()),\n )\n }\n return filtered\n },\n },\n mounted: function () {\n // Don't call updatePluginStore() here. It should be called in the background before the user opens this store\n // view (see PluginsTab.vue `created()`) to keep this feeling fast\n this.fetchPluginStoreData()\n // TODO: do something with plugins that are already installed (no uninstall button: https://github.com/OpenC3/cosmos/pull/2162#discussion_r2249339853 )\n },\n methods: {\n fetchPluginStoreData: function () {\n Api.get('/openc3-api/pluginstore').then((response) => {\n this.plugins = response.data\n })\n },\n close: function () {\n this.$emit('close')\n },\n install: function (plugin) {\n this.$emit('triggerInstall', plugin)\n this.close()\n },\n openSettings: function () {\n this.showSettingsDialog = true\n },\n updatePluginStore: function () {\n this.api.update_plugin_store().then((response) => {\n this.fetchPluginStoreData()\n })\n },\n },\n}\n</script>\n\n<style>\n.v-sheet {\n background-color: var(--color-background-base-default);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <tr\n :class=\"{ 'cursor-pointer': hasStoreListing }\"\n data-test=\"plugin-list-item\"\n @click=\"openDetails\"\n >\n <td>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"56\" min-width=\"56\" />\n </td>\n <td>\n <div class=\"text-h6\" v-text=\"displayTitle\" />\n <div class=\"text-subtitle-2 v-list-item-subtitle pl-0\">\n <!-- subtitle -->\n <template v-if=\"isModified\"> * </template>\n {{ name }}\n </div>\n <div v-if=\"targets?.length\">\n <!-- sub-subtitle -->\n <span v-for=\"(target, index) in targets\" :key=\"index\" class=\"mr-2\">\n <a\n v-if=\"target.modified\"\n style=\"cursor: pointer\"\n @click.prevent=\"downloadTarget(target.name)\"\n v-text=\"target.name\"\n />\n <span v-else v-text=\"target.name\" />\n </span>\n </div>\n </td>\n\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"plugin-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Download\"\n prepend-icon=\"mdi-download\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin\"\n />\n <v-list-item\n title=\"Edit Details\"\n prepend-icon=\"mdi-pencil\"\n data-test=\"edit-plugin\"\n @click=\"edit\"\n />\n <v-list-item\n title=\"Upgrade\"\n prepend-icon=\"mdi-update\"\n data-test=\"upgrade-plugin\"\n @click=\"upgrade\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n <plugin-details-dialog\n v-model=\"showCard\"\n v-bind=\"plugin\"\n @trigger-uninstall=\"deletePrompt\"\n />\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n props: {\n targets: {\n type: Array,\n default: () => {\n return []\n },\n },\n isModified: Boolean,\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showCard: false,\n }\n },\n computed: {\n displayTitle: function () {\n if (this.title) {\n return this.title\n }\n return this.name\n .replace(/^openc3-cosmos-/, '')\n .replace(/-?\\d+\\.\\d+\\.\\d+(?:\\.pre\\.beta\\d+\\.\\d+)?\\.gem(?:__\\d+)?$/, '') // '-6.6.1.pre.beta0.20250801182255.gem__20250801182444' or '6.6.1.gem'\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasStoreListing) {\n this.showCard = true\n }\n },\n downloadPlugin: function () {\n Api.post(`/openc3-api/packages/${this.name}/download`).then(\n (response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n },\n )\n },\n downloadTarget: function (name) {\n Api.post(`/openc3-api/targets/${name}/download`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n })\n },\n edit: function () {\n this.$emit('edit')\n },\n upgrade: function () {\n this.$emit('upgrade')\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-data-table\n :headers=\"[]\"\n :items=\"shownPlugins\"\n density=\"compact\"\n class=\"list\"\n data-test=\"plugin-list\"\n >\n <template #item=\"{ item: plugin }\">\n <plugin-list-item\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n @edit=\"() => editPlugin(plugin.name)\"\n @upgrade=\"() => upgradePlugin(plugin.name)\"\n @delete=\"() => deletePrompt(plugin.name)\"\n />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\n }\n },\n computed: {\n shownPlugins() {\n const pluginsToShow = []\n const defaultPluginsToShow = []\n this.plugins.forEach((plugin) => {\n const pluginNameFirst = plugin.name.split('__')[0]\n const pluginNameSplit = pluginNameFirst.split('-').slice(0, -1)\n const pluginNameShort = pluginNameSplit.join('-')\n if (this.defaultPlugins.includes(pluginNameShort)) {\n defaultPluginsToShow.push(plugin)\n } else {\n pluginsToShow.push(plugin)\n }\n })\n pluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n if (this.showDefaultTools) {\n defaultPluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n return pluginsToShow.concat(defaultPluginsToShow)\n }\n return pluginsToShow\n },\n },\n methods: {\n showDetails: function (plugin) {\n this.detailPlugin = plugin\n this.showPluginDetails = true\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn append-icon=\"mdi-store\" @click=\"openStore\">\n Browse Plugins\n </v-btn>\n <v-btn append-icon=\"mdi-paperclip\" class=\"mx-2\" @click=\"selectFile\">\n Install From File\n </v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n <br />\n <p class=\"mt-2\">\n Note: Use <v-icon> mdi-dots-horizontal </v-icon> in the Installed\n Plugins list to upgrade existing plugins\n </p>\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\" />\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col align=\"right\" class=\"mr-2\">\n <div>* indicates a modified plugin</div>\n <div>Click target link to download modifications</div>\n </v-col>\n </v-row>\n <v-divider />\n <!-- TODO This alert shows both success and failure. Make consistent with rest of OpenC3. -->\n <v-alert\n v-model=\"showAlert\"\n closable\n :type=\"alertType\"\n :text=\"alert\"\n data-test=\"plugin-alert\"\n />\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Process List </v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span> Show Output </span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Installed Plugins </v-col>\n <v-col class=\"v-col-auto\">\n <v-switch\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n density=\"compact\"\n hide-details\n data-test=\"show-default-tools\"\n />\n </v-col>\n </v-row>\n <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\n />\n <plugin-dialog\n v-if=\"showPluginDialog\"\n v-model=\"showPluginDialog\"\n :plugin-name=\"pluginName\"\n :variables=\"variables\"\n :plugin-txt=\"pluginTxt\"\n :existing-plugin-txt=\"existingPluginTxt\"\n :store-id=\"storeId\"\n @callback=\"pluginCallback\"\n />\n <modified-plugin-dialog\n v-if=\"showModifiedPluginDialog\"\n v-model=\"showModifiedPluginDialog\"\n :plugin-name=\"currentPlugin\"\n :targets=\"pluginTargets(currentPlugin)\"\n :plugin-delete=\"pluginDelete\"\n @submit=\"modifiedSubmit\"\n />\n <!-- <download-dialog v-model=\"showDownloadDialog\" /> -->\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n <v-bottom-sheet v-model=\"showPluginStore\" fullscreen>\n <plugin-store\n @close=\"() => (showPluginStore = false)\"\n @trigger-install=\"(storeData) => upload(null, storeData)\"\n />\n </v-bottom-sheet>\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\nimport { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n api: new OpenC3Api(),\n file: null,\n currentPlugin: null,\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n pluginName: null,\n variables: {},\n storeId: null,\n pluginTxt: '',\n pluginHashTmp: null,\n existingPluginTxt: null,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n progress: 0,\n pluginDelete: false,\n // When updating update local_mode.rb, local_mode.py, plugins.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdqueue', // Enterprise only\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n watch: {\n // watcher to reset the file input when the dialog is closed\n showPluginDialog: function (newValue, oldValue) {\n if (newValue === false) {\n this.file = null\n this.$refs.fileInput.value = null\n }\n },\n },\n created() {\n this.api.update_plugin_store()\n },\n mounted() {\n this.update()\n this.updateProcesses()\n\n // Handle going \"back\" from the plugin store\n // (idk why v-bottom-sheet's close-on-back prop isn't working)\n const that = this\n window.onpopstate = function () {\n if (that.showPluginStore) {\n that.showPluginStore = false\n history.go(1)\n }\n }\n },\n methods: {\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n upload: function (existing = null, storeData = null) {\n const method = existing ? 'put' : 'post'\n const path = existing\n ? `/openc3-api/plugins/${existing}`\n : '/openc3-api/plugins'\n const formData = new FormData()\n if (storeData === null) {\n formData.append('plugin', this.file, this.file.name)\n } else {\n formData.append('store_id', storeData.id)\n }\n let self = this\n const promise = Api[method](path, {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n promise\n .then((response) => {\n this.progress = 100\n this.alert = 'Uploaded file'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt =\n response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.storeId = response.data.store_id\n this.pluginTxt = pluginTxt\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n this.file = undefined\n })\n .catch((error) => {\n this.currentPlugin = null\n this.file = undefined\n })\n },\n pluginCallback: function (pluginHash) {\n this.showPluginDialog = false\n if (this.currentPlugin !== null) {\n pluginHash['name'] = this.currentPlugin\n }\n this.pluginHashTmp = pluginHash\n if (this.isModified(this.currentPlugin)) {\n this.pluginDelete = false\n this.showModifiedPluginDialog = true\n } else {\n this.pluginInstall()\n }\n },\n modifiedSubmit: async function (deleteModified) {\n if (deleteModified === true) {\n for (let target of this.pluginTargets(this.currentPlugin)) {\n if (target.modified == true) {\n await Api.post(`/openc3-api/targets/${target.name}/delete_modified`)\n }\n }\n }\n if (this.pluginDelete) {\n this.deletePlugin(this.currentPlugin)\n } else {\n this.pluginInstall()\n }\n },\n pluginInstall: function () {\n Api.post(`/openc3-api/plugins/install/${this.pluginName}`, {\n data: {\n plugin_hash: JSON.stringify(this.pluginHashTmp),\n },\n }).then((response) => {\n this.alert = `Started installing plugin ${this.pluginName} ...`\n this.alertType = 'success'\n this.showAlert = true\n this.currentPlugin = null\n this.file = undefined\n this.variables = {}\n this.pluginTxt = ''\n this.existingPluginTxt = null\n this.storeId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.file = null\n this.currentPlugin = plugin\n this.progress = 0\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.file = null\n this.currentPlugin = null\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n openStore() {\n this.showPluginStore = true\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["settingName","PluginProps","OpenC3Api","storeUrl","_sfc_main","val","_hoisted_4","_renderSlot","_ctx","$options","_createVNode","_component_v_dialog","$event","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_cache","_component_v_card_subtitle","_createElementBlock","_hoisted_2","_component_v_badge","_component_v_card_text","_createBlock","_component_v_img","_component_v_text_field","$data","_mergeProps","_component_v_card_actions","PluginDetailsDialog","_openBlock","_component_plugin_details_dialog","_component_v_card_title","_createTextVNode","_normalizeClass","SETTING_NAME","SETTING_SCOPE","Settings","value","response","_component_v_alert","PluginCard","PluginStoreSettingsDialog","filtered","plugin","Api","_hoisted_1","_component_v_sheet","_component_v_switch","_component_v_container","_component_v_row","_Fragment","_renderList","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","decodedData","uInt8Array","i","blob","link","name","args","$props","_a","_hoisted_3","target","index","_withModifiers","_component_v_menu","_component_v_icon","_component_v_list","_component_v_list_item","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","newValue","oldValue","that","process","_","nanoSecs","format","toDate","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","event","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_progress_circular","_component_v_list_item_title","_component_v_list_item_subtitle","_component_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}
1
+ {"version":3,"file":"PluginsTab-C7PH2Wym.js","sources":["../src/plugins/plugin-store/PluginProps.js","../src/plugins/plugin-store/PluginDetailsDialog.vue","../src/plugins/plugin-store/PluginCard.vue","../src/plugins/plugin-store/PluginStoreSettingsDialog.vue","../src/plugins/plugin-store/PluginStore.vue","../src/tools/admin/tabs/plugins/PluginListItem.vue","../src/tools/admin/tabs/plugins/PluginList.vue","../src/tools/admin/tabs/PluginsTab.vue"],"sourcesContent":["/*\n# Copyright 2025, OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nconst settingName = 'store_url'\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n description: String,\n keywords: Array,\n image_url: String,\n license: String,\n // rating: Number,\n // downloads: Number,\n verified: Boolean,\n homepage: String,\n repository: String,\n gem_url: String,\n checksum: String,\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n }\n },\n computed: {\n plugin: function () {\n return {\n id: this.id,\n name: this.name,\n title: this.title,\n // titleSlug: this.titleSlug,\n author: this.author,\n // authorSlug: this.authorSlug,\n description: this.description,\n keywords: this.keywords,\n image_url: this.image_url,\n license: this.license,\n // rating: this.rating,\n // downloads: this.downloads,\n verified: this.verified,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n checksum: this.checksum,\n }\n },\n storeLink: function () {\n if (this.hasStoreListing) {\n return new URL(`/cosmos_plugins/${this.id}`, this._storeUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n },\n created: function () {\n this._api\n .get_setting(settingName)\n .then((storeUrl) => (this._storeUrl = storeUrl || 'https://store.openc3.com'))\n },\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <slot name=\"activator\" :props=\"{ onClick: openDialog }\"></slot>\n <v-dialog v-model=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeLink\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n size=\"small\"\n variant=\"plain\"\n />\n </div>\n </template>\n <span> View at store.openc3.com </span>\n </v-tooltip>\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\n </v-toolbar>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <v-spacer />\n <div v-if=\"verified\">\n Verified\n <v-badge inline icon=\"mdi-shield-check\" color=\"success\" />\n </div>\n </v-card-subtitle>\n <!--\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>\n <v-icon icon=\"mdi-cloud-download\" size=\"x-small\" />\n {{ downloads }} downloads\n </div>\n <v-spacer />\n <div class=\"d-flex align-center\">\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n </div>\n </v-card-subtitle>\n -->\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" />\n <div v-text=\"description\" />\n <div class=\"mt-3 text-caption font-italic\">License: {{ license }}</div>\n <v-text-field\n v-model=\"checksum\"\n label=\"SHA256\"\n variant=\"solo\"\n density=\"compact\"\n hide-details\n readonly\n >\n <template #append>\n <v-tooltip\n v-model=\"showCopiedTooltip\"\n location=\"top\"\n :open-on-hover=\"false\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-content-copy\"\n variant=\"text\"\n density=\"compact\"\n @click=\"copyChecksum\"\n />\n </template>\n <span>Copied!</span>\n </v-tooltip>\n </template>\n </v-text-field>\n </v-card-text>\n\n <v-card-actions class=\"justify-start px-6\">\n <v-btn\n v-if=\"isPluginInstalled\"\n text=\"Uninstall\"\n append-icon=\"mdi-puzzle-remove\"\n variant=\"outlined\"\n color=\"red\"\n @click=\"uninstall\"\n />\n <v-btn\n v-else\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click=\"install\"\n />\n <v-btn\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"repository\"\n target=\"_blank\"\n />\n <v-btn\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"homepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\n\nexport default {\n mixins: [PluginProps],\n props: {\n modelValue: Boolean,\n },\n emits: ['triggerInstall', 'triggerUninstall', 'update:modelValue'],\n data() {\n return {\n showDialog: false,\n showCopiedTooltip: false,\n }\n },\n computed: {\n isDialogOpen: {\n get: function () {\n return this.modelValue || this.showDialog\n },\n set: function (val) {\n this.showDialog = val\n this.$emit('update:modelValue', val)\n },\n },\n },\n methods: {\n openDialog: function () {\n this.isDialogOpen = true\n },\n closeDialog: function () {\n this.isDialogOpen = false\n },\n install: function () {\n this.$emit('triggerInstall', this.gemUrl)\n },\n uninstall: function () {\n this.$emit('triggerUninstall', this.gemUrl)\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.checksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <plugin-details-dialog v-bind=\"plugin\" @trigger-install=\"install\">\n <template #activator=\"{ props }\">\n <v-card v-bind=\"props\" height=\"350\" class=\"d-flex flex-column\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n <v-spacer />\n <v-badge\n v-if=\"verified\"\n inline\n icon=\"mdi-shield-check\"\n color=\"success\"\n />\n </v-card-title>\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>{{ author }}</div>\n <!--\n <v-spacer />\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n -->\n </v-card-subtitle>\n <v-card-text>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n <div\n :class=\"{\n 'truncate-description': true,\n 'truncate-2': !!image_url,\n 'truncate-10': !image_url,\n }\"\n v-text=\"description\"\n />\n </v-card-text>\n <v-spacer />\n <v-card-actions class=\"flex-wrap\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n @click.stop=\"install\"\n />\n </v-card-actions>\n </v-card>\n </template>\n </plugin-details-dialog>\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\nimport PluginDetailsDialog from './PluginDetailsDialog.vue'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n emits: ['triggerInstall'],\n methods: {\n install: function () {\n this.$emit('triggerInstall', this.plugin)\n },\n },\n}\n</script>\n\n<style scoped>\n.truncate-description {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate-2 {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n}\n\n.truncate-10 {\n line-clamp: 10;\n -webkit-line-clamp: 10;\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"showDialog\" width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Plugin Store Settings</span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-alert v-model=\"errorLoading\" type=\"error\" closable density=\"compact\">\n Error loading previous configuration due to {{ errorText }}\n </v-alert>\n <v-alert v-model=\"errorSaving\" type=\"error\" closable density=\"compact\">\n Error saving due to {{ errorText }}\n </v-alert>\n <v-alert\n v-model=\"successSaving\"\n type=\"success\"\n closable\n density=\"compact\"\n >\n Saved!\n </v-alert>\n <v-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n </v-card-text>\n <v-card-actions>\n <v-btn\n color=\"success\"\n variant=\"text\"\n text=\"Save\"\n data-test=\"save-store-settings-btn\"\n @click=\"save\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst SETTING_NAME = 'store_url'\nconst SETTING_SCOPE = 'DEFAULT'\nexport default {\n mixins: [Settings],\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue', 'update:storeUrl'],\n data() {\n return {\n showDialog: false,\n storeUrl: '',\n rules: {\n required: (value) => !!value || 'Required',\n url: (value) => {\n try {\n new URL(value)\n } catch (_) {\n return 'Not a valid URL'\n }\n return true\n },\n },\n }\n },\n watch: {\n modelValue: function (val) {\n if (val) {\n this.showDialog = val\n }\n },\n showDialog: function (val) {\n if (!val) {\n this.$emit('update:modelValue', val)\n }\n },\n },\n created: function () {\n this.loadSetting(SETTING_NAME, { scope: SETTING_SCOPE })\n },\n methods: {\n save() {\n this.saveSetting(SETTING_NAME, this.storeUrl, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response) {\n if (response) {\n this.storeUrl = response\n } else {\n // Default URL if setting is not found\n this.storeUrl = 'https://store.openc3.com'\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-sheet class=\"pb-11 pt-8 px-8\" height=\"100%\">\n <div class=\"d-flex justify-content-space-between\">\n <div>\n <div class=\"text-h3 mb-3\">OpenC3 Plugin Store</div>\n <div class=\"text-subtitle-1\">\n Browse plugins made by OpenC3 and the COSMOS community\n </div>\n </div>\n <v-spacer />\n <v-btn icon=\"mdi-cog\" variant=\"text\" @click=\"openSettings\" />\n\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n href=\"https://store.openc3.com\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open store.openc3.com </span>\n </v-tooltip>\n\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"close\" />\n </div>\n <div class=\"d-inline-flex align-center w-100\">\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n data-test=\"search-plugin-store\"\n />\n <v-switch\n v-model=\"verifiedOnly\"\n label=\"Verified only\"\n density=\"compact\"\n hide-details\n class=\"ml-4\"\n />\n </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-container>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card v-bind=\"plugin\" @trigger-install=\"install\" />\n </v-col>\n </v-row>\n </v-container>\n </v-sheet>\n <plugin-store-settings-dialog\n v-model=\"showSettingsDialog\"\n @update:store-url=\"updatePluginStore\"\n />\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { PluginCard } from '@/plugins/plugin-store'\nimport PluginStoreSettingsDialog from './PluginStoreSettingsDialog.vue' // idk why importing from @/plugins/plugin-store isn't working\n\nexport default {\n components: {\n PluginCard,\n PluginStoreSettingsDialog,\n },\n emits: ['close', 'triggerInstall'],\n data() {\n return {\n api: new OpenC3Api(),\n search: '',\n verifiedOnly: false,\n showSettingsDialog: false,\n plugins: [],\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\n if (this.verifiedOnly) {\n filtered = filtered.filter((plugin) => plugin.verified)\n }\n if (this.search.length) {\n filtered = filtered.filter((plugin) =>\n plugin.title.toLowerCase().includes(this.search.toLowerCase()),\n )\n }\n return filtered\n },\n },\n mounted: function () {\n // Don't call updatePluginStore() here. It should be called in the background before the user opens this store\n // view (see PluginsTab.vue `created()`) to keep this feeling fast\n this.fetchPluginStoreData()\n // TODO: do something with plugins that are already installed (no uninstall button: https://github.com/OpenC3/cosmos/pull/2162#discussion_r2249339853 )\n },\n methods: {\n fetchPluginStoreData: function () {\n Api.get('/openc3-api/pluginstore').then((response) => {\n this.plugins = response.data\n })\n },\n close: function () {\n this.$emit('close')\n },\n install: function (plugin) {\n this.$emit('triggerInstall', plugin)\n this.close()\n },\n openSettings: function () {\n this.showSettingsDialog = true\n },\n updatePluginStore: function () {\n this.api.update_plugin_store().then((response) => {\n this.fetchPluginStoreData()\n })\n },\n },\n}\n</script>\n\n<style>\n.v-sheet {\n background-color: var(--color-background-base-default);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <tr\n :class=\"{ 'cursor-pointer': hasStoreListing }\"\n data-test=\"plugin-list-item\"\n @click=\"openDetails\"\n >\n <td>\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"56\" min-width=\"56\" />\n </td>\n <td>\n <div class=\"text-h6\" v-text=\"displayTitle\" />\n <div class=\"text-subtitle-2 v-list-item-subtitle pl-0\">\n <!-- subtitle -->\n <template v-if=\"isModified\"> * </template>\n {{ name }}\n </div>\n <div v-if=\"targets?.length\">\n <!-- sub-subtitle -->\n <span v-for=\"(target, index) in targets\" :key=\"index\" class=\"mr-2\">\n <a\n v-if=\"target.modified\"\n style=\"cursor: pointer\"\n @click.prevent=\"downloadTarget(target.name)\"\n v-text=\"target.name\"\n />\n <span v-else v-text=\"target.name\" />\n </span>\n </div>\n </td>\n\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"plugin-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Download\"\n prepend-icon=\"mdi-download\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin\"\n />\n <v-list-item\n title=\"Edit Details\"\n prepend-icon=\"mdi-pencil\"\n data-test=\"edit-plugin\"\n @click=\"edit\"\n />\n <v-list-item\n title=\"Upgrade\"\n prepend-icon=\"mdi-update\"\n data-test=\"upgrade-plugin\"\n @click=\"upgrade\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n <plugin-details-dialog\n v-model=\"showCard\"\n v-bind=\"plugin\"\n @trigger-uninstall=\"deletePrompt\"\n />\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n props: {\n targets: {\n type: Array,\n default: () => {\n return []\n },\n },\n isModified: Boolean,\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showCard: false,\n }\n },\n computed: {\n displayTitle: function () {\n if (this.title) {\n return this.title\n }\n return this.name\n .replace(/^openc3-cosmos-/, '')\n .replace(/-?\\d+\\.\\d+\\.\\d+(?:\\.pre\\.beta\\d+\\.\\d+)?\\.gem(?:__\\d+)?$/, '') // '-6.6.1.pre.beta0.20250801182255.gem__20250801182444' or '6.6.1.gem'\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasStoreListing) {\n this.showCard = true\n }\n },\n downloadPlugin: function () {\n Api.post(`/openc3-api/packages/${this.name}/download`).then(\n (response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n },\n )\n },\n downloadTarget: function (name) {\n Api.post(`/openc3-api/targets/${name}/download`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n })\n },\n edit: function () {\n this.$emit('edit')\n },\n upgrade: function () {\n this.$emit('upgrade')\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-data-table\n :headers=\"[]\"\n :items=\"shownPlugins\"\n density=\"compact\"\n class=\"list\"\n data-test=\"plugin-list\"\n >\n <template #item=\"{ item: plugin }\">\n <plugin-list-item\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n @edit=\"() => editPlugin(plugin.name)\"\n @upgrade=\"() => upgradePlugin(plugin.name)\"\n @delete=\"() => deletePrompt(plugin.name)\"\n />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\n }\n },\n computed: {\n shownPlugins() {\n const pluginsToShow = []\n const defaultPluginsToShow = []\n this.plugins.forEach((plugin) => {\n const pluginNameFirst = plugin.name.split('__')[0]\n const pluginNameSplit = pluginNameFirst.split('-').slice(0, -1)\n const pluginNameShort = pluginNameSplit.join('-')\n if (this.defaultPlugins.includes(pluginNameShort)) {\n defaultPluginsToShow.push(plugin)\n } else {\n pluginsToShow.push(plugin)\n }\n })\n pluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n if (this.showDefaultTools) {\n defaultPluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n return pluginsToShow.concat(defaultPluginsToShow)\n }\n return pluginsToShow\n },\n },\n methods: {\n showDetails: function (plugin) {\n this.detailPlugin = plugin\n this.showPluginDetails = true\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn append-icon=\"mdi-store\" @click=\"openStore\">\n Browse Plugins\n </v-btn>\n <v-btn append-icon=\"mdi-paperclip\" class=\"mx-2\" @click=\"selectFile\">\n Install From File\n </v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n <br />\n <p class=\"mt-2\">\n Note: Use <v-icon> mdi-dots-horizontal </v-icon> in the Installed\n Plugins list to upgrade existing plugins\n </p>\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\" />\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col align=\"right\" class=\"mr-2\">\n <div>* indicates a modified plugin</div>\n <div>Click target link to download modifications</div>\n </v-col>\n </v-row>\n <v-divider />\n <!-- TODO This alert shows both success and failure. Make consistent with rest of OpenC3. -->\n <v-alert\n v-model=\"showAlert\"\n closable\n :type=\"alertType\"\n :text=\"alert\"\n data-test=\"plugin-alert\"\n />\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Process List </v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span> Show Output </span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Installed Plugins </v-col>\n <v-col class=\"v-col-auto\">\n <v-switch\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n density=\"compact\"\n hide-details\n data-test=\"show-default-tools\"\n />\n </v-col>\n </v-row>\n <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\n />\n <plugin-dialog\n v-if=\"showPluginDialog\"\n v-model=\"showPluginDialog\"\n :plugin-name=\"pluginName\"\n :variables=\"variables\"\n :plugin-txt=\"pluginTxt\"\n :existing-plugin-txt=\"existingPluginTxt\"\n :store-id=\"storeId\"\n @callback=\"pluginCallback\"\n />\n <modified-plugin-dialog\n v-if=\"showModifiedPluginDialog\"\n v-model=\"showModifiedPluginDialog\"\n :plugin-name=\"currentPlugin\"\n :targets=\"pluginTargets(currentPlugin)\"\n :plugin-delete=\"pluginDelete\"\n @submit=\"modifiedSubmit\"\n />\n <!-- <download-dialog v-model=\"showDownloadDialog\" /> -->\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n <v-bottom-sheet v-model=\"showPluginStore\" fullscreen>\n <plugin-store\n @close=\"() => (showPluginStore = false)\"\n @trigger-install=\"(storeData) => upload(null, storeData)\"\n />\n </v-bottom-sheet>\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\nimport { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n api: new OpenC3Api(),\n file: null,\n currentPlugin: null,\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n pluginName: null,\n variables: {},\n storeId: null,\n pluginTxt: '',\n pluginHashTmp: null,\n existingPluginTxt: null,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n progress: 0,\n pluginDelete: false,\n // When updating update local_mode.rb, local_mode.py, plugins.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdqueue', // Enterprise only\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n watch: {\n // watcher to reset the file input when the dialog is closed\n showPluginDialog: function (newValue, oldValue) {\n if (newValue === false) {\n this.file = null\n this.$refs.fileInput.value = null\n }\n },\n },\n created() {\n this.api.update_plugin_store()\n },\n mounted() {\n this.update()\n this.updateProcesses()\n\n // Handle going \"back\" from the plugin store\n // (idk why v-bottom-sheet's close-on-back prop isn't working)\n const that = this\n window.onpopstate = function () {\n if (that.showPluginStore) {\n that.showPluginStore = false\n history.go(1)\n }\n }\n },\n methods: {\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n upload: function (existing = null, storeData = null) {\n const method = existing ? 'put' : 'post'\n const path = existing\n ? `/openc3-api/plugins/${existing}`\n : '/openc3-api/plugins'\n const formData = new FormData()\n if (storeData === null) {\n formData.append('plugin', this.file, this.file.name)\n } else {\n formData.append('store_id', storeData.id)\n }\n let self = this\n const promise = Api[method](path, {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n promise\n .then((response) => {\n this.progress = 100\n this.alert = 'Uploaded file'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt =\n response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.storeId = response.data.store_id\n this.pluginTxt = pluginTxt\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n this.file = undefined\n })\n .catch((error) => {\n this.currentPlugin = null\n this.file = undefined\n })\n },\n pluginCallback: function (pluginHash) {\n this.showPluginDialog = false\n if (this.currentPlugin !== null) {\n pluginHash['name'] = this.currentPlugin\n }\n this.pluginHashTmp = pluginHash\n if (this.isModified(this.currentPlugin)) {\n this.pluginDelete = false\n this.showModifiedPluginDialog = true\n } else {\n this.pluginInstall()\n }\n },\n modifiedSubmit: async function (deleteModified) {\n if (deleteModified === true) {\n for (let target of this.pluginTargets(this.currentPlugin)) {\n if (target.modified == true) {\n await Api.post(`/openc3-api/targets/${target.name}/delete_modified`)\n }\n }\n }\n if (this.pluginDelete) {\n this.deletePlugin(this.currentPlugin)\n } else {\n this.pluginInstall()\n }\n },\n pluginInstall: function () {\n Api.post(`/openc3-api/plugins/install/${this.pluginName}`, {\n data: {\n plugin_hash: JSON.stringify(this.pluginHashTmp),\n },\n }).then((response) => {\n this.alert = `Started installing plugin ${this.pluginName} ...`\n this.alertType = 'success'\n this.showAlert = true\n this.currentPlugin = null\n this.file = undefined\n this.variables = {}\n this.pluginTxt = ''\n this.existingPluginTxt = null\n this.storeId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.file = null\n this.currentPlugin = plugin\n this.progress = 0\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.file = null\n this.currentPlugin = null\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n openStore() {\n this.showPluginStore = true\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["settingName","PluginProps","OpenC3Api","storeUrl","_sfc_main","val","_hoisted_4","_renderSlot","_ctx","$options","_createVNode","_component_v_dialog","$event","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_cache","_component_v_card_subtitle","_createElementBlock","_hoisted_2","_component_v_badge","_component_v_card_text","_createBlock","_component_v_img","_component_v_text_field","$data","_mergeProps","_component_v_card_actions","PluginDetailsDialog","_openBlock","_component_plugin_details_dialog","_component_v_card_title","_createTextVNode","_normalizeClass","SETTING_NAME","SETTING_SCOPE","Settings","value","response","_component_v_alert","PluginCard","PluginStoreSettingsDialog","filtered","plugin","Api","_hoisted_1","_component_v_sheet","_component_v_switch","_component_v_container","_component_v_row","_Fragment","_renderList","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","decodedData","uInt8Array","i","blob","link","name","args","$props","_a","_hoisted_3","target","index","_withModifiers","_component_v_menu","_component_v_icon","_component_v_list","_component_v_list_item","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","newValue","oldValue","that","process","_","nanoSecs","format","toDate","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","event","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_progress_circular","_component_v_list_item_title","_component_v_list_item_subtitle","_component_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs"),e=require("vue"),x=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const A=require("./SimpleTextDialog-C1trfMSJ.cjs"),k=require("./tools/admin.cjs"),M=require("./settings-CUg4_VNE.cjs"),P=require("./format-B22VpiOS.cjs"),j="store_url",N={props:{id:Number,name:String,title:String,author:String,description:String,keywords:Array,image_url:String,license:String,verified:Boolean,homepage:String,repository:String,gem_url:String,checksum:String},data:function(){return{_api:new h.gi,_storeUrl:""}},computed:{plugin:function(){return{id:this.id,name:this.name,title:this.title,author:this.author,description:this.description,keywords:this.keywords,image_url:this.image_url,license:this.license,verified:this.verified,homepage:this.homepage,repository:this.repository,gem_url:this.gem_url,checksum:this.checksum}},storeLink:function(){return this.hasStoreListing?new URL(`/cosmos_plugins/${this.id}`,this._storeUrl):null},hasStoreListing:function(){return!!this.id},isPluginInstalled:function(){return!!this.name}},created:function(){this._api.get_setting(j).then(t=>this._storeUrl=t||"https://store.openc3.com")}},z={mixins:[N],props:{modelValue:Boolean},emits:["triggerInstall","triggerUninstall","update:modelValue"],data(){return{showDialog:!1,showCopiedTooltip:!1}},computed:{isDialogOpen:{get:function(){return this.modelValue||this.showDialog},set:function(t){this.showDialog=t,this.$emit("update:modelValue",t)}}},methods:{openDialog:function(){this.isDialogOpen=!0},closeDialog:function(){this.isDialogOpen=!1},install:function(){this.$emit("triggerInstall",this.gemUrl)},uninstall:function(){this.$emit("triggerUninstall",this.gemUrl)},copyChecksum:function(){navigator.clipboard.writeText(this.checksum),this.showCopiedTooltip=!0,setTimeout(()=>{this.showCopiedTooltip=!1},1e3)}}},q=["textContent"],F={key:0},R=["textContent"],H={class:"mt-3 text-caption font-italic"};function G(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-badge"),_=e.resolveComponent("v-card-subtitle"),v=e.resolveComponent("v-img"),d=e.resolveComponent("v-text-field"),C=e.resolveComponent("v-card-text"),p=e.resolveComponent("v-card-actions"),V=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(t.$slots,"activator",{props:{onClick:l.openDialog}}),e.createVNode(g,{modelValue:l.isDialogOpen,"onUpdate:modelValue":o[2]||(o[2]=w=>l.isDialogOpen=w),"max-width":"500"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(f,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",{textContent:e.toDisplayString(t.title)},null,8,q),e.createVNode(a),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:w})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(w)),[e.createVNode(r,{href:t.storeLink,target:"_blank",icon:"mdi-open-in-new",size:"small",variant:"plain"},null,8,["href"])],16)]),default:e.withCtx(()=>[o[3]||(o[3]=e.createElementVNode("span",null," View at store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close-box",variant:"text",density:"compact",onClick:l.closeDialog},null,8,["onClick"])]),_:1}),e.createVNode(_,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1),e.createVNode(a),t.verified?(e.openBlock(),e.createElementBlock("div",F,[o[4]||(o[4]=e.createTextVNode(" Verified ",-1)),e.createVNode(m,{inline:"",icon:"mdi-shield-check",color:"success"})])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(C,null,{default:e.withCtx(()=>[t.image_url?(e.openBlock(),e.createBlock(v,{key:0,src:t.image_url},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{textContent:e.toDisplayString(t.description)},null,8,R),e.createElementVNode("div",H,"License: "+e.toDisplayString(t.license),1),e.createVNode(d,{modelValue:t.checksum,"onUpdate:modelValue":o[1]||(o[1]=w=>t.checksum=w),label:"SHA256",variant:"solo",density:"compact","hide-details":"",readonly:""},{append:e.withCtx(()=>[e.createVNode(s,{modelValue:n.showCopiedTooltip,"onUpdate:modelValue":o[0]||(o[0]=w=>n.showCopiedTooltip=w),location:"top","open-on-hover":!1},{activator:e.withCtx(({props:w})=>[e.createVNode(r,e.mergeProps(w,{icon:"mdi-content-copy",variant:"text",density:"compact",onClick:l.copyChecksum}),null,16,["onClick"])]),default:e.withCtx(()=>[o[5]||(o[5]=e.createElementVNode("span",null,"Copied!",-1))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(p,{class:"justify-start px-6"},{default:e.withCtx(()=>[t.isPluginInstalled?(e.openBlock(),e.createBlock(r,{key:0,text:"Uninstall","append-icon":"mdi-puzzle-remove",variant:"outlined",color:"red",onClick:l.uninstall},null,8,["onClick"])):(e.openBlock(),e.createBlock(r,{key:1,text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:l.install},null,8,["onClick"])),e.createVNode(r,{text:"Repository","append-icon":"mdi-open-in-new",variant:"outlined",href:t.repository,target:"_blank"},null,8,["href"]),e.createVNode(r,{text:"Homepage","append-icon":"mdi-open-in-new",variant:"outlined",href:t.homepage,target:"_blank"},null,8,["href"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}const D=x._export_sfc(z,[["render",G]]),J={components:{PluginDetailsDialog:D},mixins:[N],emits:["triggerInstall"],methods:{install:function(){this.$emit("triggerInstall",this.plugin)}}},K=["textContent"];function Q(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-badge"),s=e.resolveComponent("v-card-title"),f=e.resolveComponent("v-card-subtitle"),m=e.resolveComponent("v-img"),_=e.resolveComponent("v-card-text"),v=e.resolveComponent("v-btn"),d=e.resolveComponent("v-card-actions"),C=e.resolveComponent("v-card"),p=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createBlock(p,e.mergeProps(t.plugin,{onTriggerInstall:l.install}),{activator:e.withCtx(({props:V})=>[e.createVNode(C,e.mergeProps(V,{height:"350",class:"d-flex flex-column"}),{default:e.withCtx(()=>[e.createVNode(s,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title)+" ",1),e.createVNode(a),t.verified?(e.openBlock(),e.createBlock(r,{key:0,inline:"",icon:"mdi-shield-check",color:"success"})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(f,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1)]),_:1}),e.createVNode(_,null,{default:e.withCtx(()=>[t.image_url?(e.openBlock(),e.createBlock(m,{key:0,src:t.image_url,"max-height":"160"},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"truncate-description":!0,"truncate-2":!!t.image_url,"truncate-10":!t.image_url}),textContent:e.toDisplayString(t.description)},null,10,K)]),_:1}),e.createVNode(a),e.createVNode(d,{class:"flex-wrap"},{default:e.withCtx(()=>[e.createVNode(v,{text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:e.withModifiers(l.install,["stop"])},null,8,["onClick"])]),_:1})]),_:1},16)]),_:1},16,["onTriggerInstall"])}const W=x._export_sfc(J,[["render",Q],["__scopeId","data-v-83d9d7a7"]]),y="store_url",b="DEFAULT",X={mixins:[M.Settings],props:{modelValue:Boolean},emits:["update:modelValue","update:storeUrl"],data(){return{showDialog:!1,storeUrl:"",rules:{required:t=>!!t||"Required",url:t=>{try{new URL(t)}catch{return"Not a valid URL"}return!0}}}},watch:{modelValue:function(t){t&&(this.showDialog=t)},showDialog:function(t){t||this.$emit("update:modelValue",t)}},created:function(){this.loadSetting(y,{scope:b})},methods:{save(){this.saveSetting(y,this.storeUrl,{scope:b}),this.$emit("update:storeUrl",this.storeUrl),this.showDialog=!1},parseSetting:function(t){t?this.storeUrl=t:this.storeUrl="https://store.openc3.com"}}};function Y(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-alert"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),v=e.resolveComponent("v-card-actions"),d=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(C,{modelValue:n.showDialog,"onUpdate:modelValue":o[4]||(o[4]=p=>n.showDialog=p),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),o[5]||(o[5]=e.createElementVNode("span",null,"Plugin Store Settings",-1)),e.createVNode(a)]),_:1}),e.createVNode(d,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(s,{modelValue:t.errorLoading,"onUpdate:modelValue":o[0]||(o[0]=p=>t.errorLoading=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error loading previous configuration due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.errorSaving,"onUpdate:modelValue":o[1]||(o[1]=p=>t.errorSaving=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error saving due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.successSaving,"onUpdate:modelValue":o[2]||(o[2]=p=>t.successSaving=p),type:"success",closable:"",density:"compact"},{default:e.withCtx(()=>[...o[6]||(o[6]=[e.createTextVNode(" Saved! ",-1)])]),_:1},8,["modelValue"]),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(f,{modelValue:n.storeUrl,"onUpdate:modelValue":o[3]||(o[3]=p=>n.storeUrl=p),label:"Store URL",rules:[n.rules.required,n.rules.url]},null,8,["modelValue","rules"])]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(_,{color:"success",variant:"text",text:"Save","data-test":"save-store-settings-btn",onClick:l.save},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const Z=x._export_sfc(X,[["render",Y]]),$={components:{PluginCard:W,PluginStoreSettingsDialog:Z},emits:["close","triggerInstall"],data(){return{api:new h.gi,search:"",verifiedOnly:!1,showSettingsDialog:!1,plugins:[]}},computed:{filteredPlugins:function(){let t=this.plugins;return this.verifiedOnly&&(t=t.filter(o=>o.verified)),this.search.length&&(t=t.filter(o=>o.title.toLowerCase().includes(this.search.toLowerCase()))),t}},mounted:function(){this.fetchPluginStoreData()},methods:{fetchPluginStoreData:function(){h.hi.get("/openc3-api/pluginstore").then(t=>{this.plugins=t.data})},close:function(){this.$emit("close")},install:function(t){this.$emit("triggerInstall",t),this.close()},openSettings:function(){this.showSettingsDialog=!0},updatePluginStore:function(){this.api.update_plugin_store().then(t=>{this.fetchPluginStoreData()})}}},ee={class:"d-flex justify-content-space-between"},te={class:"d-inline-flex align-center w-100"};function oe(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-switch"),_=e.resolveComponent("plugin-card"),v=e.resolveComponent("v-col"),d=e.resolveComponent("v-row"),C=e.resolveComponent("v-container"),p=e.resolveComponent("v-sheet"),V=e.resolveComponent("plugin-store-settings-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(p,{class:"pb-11 pt-8 px-8",height:"100%"},{default:e.withCtx(()=>[e.createElementVNode("div",ee,[o[4]||(o[4]=e.createElementVNode("div",null,[e.createElementVNode("div",{class:"text-h3 mb-3"},"OpenC3 Plugin Store"),e.createElementVNode("div",{class:"text-subtitle-1"}," Browse plugins made by OpenC3 and the COSMOS community ")],-1)),e.createVNode(a),e.createVNode(r,{icon:"mdi-cog",variant:"text",onClick:l.openSettings},null,8,["onClick"]),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:g})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(g)),[e.createVNode(r,{href:"https://store.openc3.com",target:"_blank",icon:"mdi-open-in-new",variant:"text",class:"mx-2"})],16)]),default:e.withCtx(()=>[o[3]||(o[3]=e.createElementVNode("span",null," Open store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close",variant:"text",onClick:l.close},null,8,["onClick"])]),e.createElementVNode("div",te,[e.createVNode(f,{modelValue:n.search,"onUpdate:modelValue":o[0]||(o[0]=g=>n.search=g),label:"Search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","single-line":"","hide-details":"","data-test":"search-plugin-store"},null,8,["modelValue"]),e.createVNode(m,{modelValue:n.verifiedOnly,"onUpdate:modelValue":o[1]||(o[1]=g=>n.verifiedOnly=g),label:"Verified only",density:"compact","hide-details":"",class:"ml-4"},null,8,["modelValue"])]),e.createVNode(a),o[5]||(o[5]=e.createElementVNode("span",{class:""}," Click on a plugin to see more information about it ",-1)),e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.filteredPlugins,g=>(e.openBlock(),e.createBlock(v,{key:g.id,cols:"4"},{default:e.withCtx(()=>[e.createVNode(_,e.mergeProps({ref_for:!0},g,{onTriggerInstall:l.install}),null,16,["onTriggerInstall"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),e.createVNode(V,{modelValue:n.showSettingsDialog,"onUpdate:modelValue":o[2]||(o[2]=g=>n.showSettingsDialog=g),"onUpdate:storeUrl":l.updatePluginStore},null,8,["modelValue","onUpdate:storeUrl"])],64)}const ne=x._export_sfc($,[["render",oe]]),le={components:{PluginDetailsDialog:D},mixins:[N],props:{targets:{type:Array,default:()=>[]},isModified:Boolean},emits:["edit","delete","upgrade"],data(){return{showCard:!1}},computed:{displayTitle:function(){return this.title?this.title:this.name.replace(/^openc3-cosmos-/,"").replace(/-?\d+\.\d+\.\d+(?:\.pre\.beta\d+\.\d+)?\.gem(?:__\d+)?$/,"")}},methods:{openDetails:function(){this.hasStoreListing&&(this.showCard=!0)},downloadPlugin:function(){h.hi.post(`/openc3-api/packages/${this.name}/download`).then(t=>{const o=window.atob(t.data.contents),i=new Uint8Array(o.length);for(let l=0;l<o.length;++l)i[l]=o.charCodeAt(l);const c=new Blob([i],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(c),n.setAttribute("download",t.data.filename),n.click()})},downloadTarget:function(t){h.hi.post(`/openc3-api/targets/${t}/download`).then(o=>{const i=window.atob(o.data.contents),c=new Uint8Array(i.length);for(let a=0;a<i.length;++a)c[a]=i.charCodeAt(a);const n=new Blob([c],{type:"application/zip"}),l=document.createElement("a");l.href=URL.createObjectURL(n),l.setAttribute("download",o.data.filename),l.click()})},edit:function(){this.$emit("edit")},upgrade:function(){this.$emit("upgrade")},deletePrompt:function(){this.showCard=!1,this.$emit("delete")}}},ie=["textContent"],se={class:"text-subtitle-2 v-list-item-subtitle pl-0"},re={key:0},ae=["onClick","textContent"],ce=["textContent"];function ue(t,o,i,c,n,l){var v;const a=e.resolveComponent("v-img"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-list-item"),f=e.resolveComponent("v-list"),m=e.resolveComponent("v-menu"),_=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("tr",{class:e.normalizeClass({"cursor-pointer":t.hasStoreListing}),"data-test":"plugin-list-item",onClick:o[0]||(o[0]=(...d)=>l.openDetails&&l.openDetails(...d))},[e.createElementVNode("td",null,[t.image_url?(e.openBlock(),e.createBlock(a,{key:0,src:t.image_url,"max-height":"56","min-width":"56"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createElementVNode("div",{class:"text-h6",textContent:e.toDisplayString(l.displayTitle)},null,8,ie),e.createElementVNode("div",se,[i.isModified?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" * ")],64)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.name),1)]),(v=i.targets)!=null&&v.length?(e.openBlock(),e.createElementBlock("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.targets,(d,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"mr-2"},[d.modified?(e.openBlock(),e.createElementBlock("a",{key:0,style:{cursor:"pointer"},onClick:e.withModifiers(p=>l.downloadTarget(d.name),["prevent"]),textContent:e.toDisplayString(d.name)},null,8,ae)):(e.openBlock(),e.createElementBlock("span",{key:1,textContent:e.toDisplayString(d.name)},null,8,ce))]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createVNode(m,null,{activator:e.withCtx(({props:d})=>[e.createVNode(r,e.mergeProps(d,{icon:"mdi-dots-horizontal","data-test":"plugin-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(s,{title:"Download","prepend-icon":"mdi-download","data-test":"download-plugin",onClick:l.downloadPlugin},null,8,["onClick"]),e.createVNode(s,{title:"Edit Details","prepend-icon":"mdi-pencil","data-test":"edit-plugin",onClick:l.edit},null,8,["onClick"]),e.createVNode(s,{title:"Upgrade","prepend-icon":"mdi-update","data-test":"upgrade-plugin",onClick:l.upgrade},null,8,["onClick"]),e.createVNode(s,{title:"Delete","prepend-icon":"mdi-delete","data-test":"delete-plugin",onClick:l.deletePrompt},null,8,["onClick"])]),_:1})]),_:1})])],2),e.createVNode(_,e.mergeProps({modelValue:n.showCard,"onUpdate:modelValue":o[1]||(o[1]=d=>n.showCard=d)},t.plugin,{onTriggerUninstall:l.deletePrompt}),null,16,["modelValue","onTriggerUninstall"])],64)}const de=x._export_sfc(le,[["render",ue]]),pe={components:{PluginListItem:de},props:{plugins:{type:Array,required:!0},targets:{type:Object,required:!0},showDefaultTools:{type:Boolean,default:!1},defaultPlugins:{type:Array,required:!0}},emits:["edit","delete","upgrade"],data(){return{showPluginDetails:!1,detailPlugin:null}},computed:{shownPlugins(){const t=[],o=[];return this.plugins.forEach(i=>{const l=i.name.split("__")[0].split("-").slice(0,-1).join("-");this.defaultPlugins.includes(l)?o.push(i):t.push(i)}),t.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),this.showDefaultTools?(o.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),t.concat(o)):t}},methods:{showDetails:function(t){this.detailPlugin=t,this.showPluginDetails=!0},pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},editPlugin:function(t){this.$emit("edit",t)},upgradePlugin(t){this.$emit("upgrade",t)},deletePrompt:function(t){this.$emit("delete",t)}}};function me(t,o,i,c,n,l){const a=e.resolveComponent("plugin-list-item"),r=e.resolveComponent("v-data-table");return e.openBlock(),e.createBlock(r,{headers:[],items:l.shownPlugins,density:"compact",class:"list","data-test":"plugin-list"},{item:e.withCtx(({item:s})=>[e.createVNode(a,e.mergeProps(s,{targets:l.pluginTargets(s.name),"is-modified":l.isModified(s.name),onEdit:()=>l.editPlugin(s.name),onUpgrade:()=>l.upgradePlugin(s.name),onDelete:()=>l.deletePrompt(s.name)}),null,16,["targets","is-modified","onEdit","onUpgrade","onDelete"])]),_:1},8,["items"])}const ge=x._export_sfc(pe,[["render",me],["__scopeId","data-v-94f3dd91"]]),he={components:{PluginDialog:k.PluginDialog,PluginList:ge,PluginStore:ne,ModifiedPluginDialog:k.ModifiedPluginDialog,SimpleTextDialog:A.SimpleTextDialog},data(){return{api:new h.gi,file:null,currentPlugin:null,plugins:[],targets:{},processes:{},alert:"",alertType:"success",showAlert:!1,pluginName:null,variables:{},storeId:null,pluginTxt:"",pluginHashTmp:null,existingPluginTxt:null,showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",showPluginStore:!1,showPluginDialog:!1,showModifiedPluginDialog:!1,showDefaultTools:!1,progress:0,pluginDelete:!1,defaultPlugins:["openc3-cosmos-tool-admin","openc3-cosmos-tool-bucketexplorer","openc3-cosmos-tool-cmdsender","openc3-cosmos-tool-cmdqueue","openc3-cosmos-tool-cmdhistory","openc3-cosmos-tool-cmdtlmserver","openc3-cosmos-tool-dataextractor","openc3-cosmos-tool-dataviewer","openc3-cosmos-tool-docs","openc3-cosmos-tool-handbooks","openc3-cosmos-tool-iframe","openc3-cosmos-tool-limitsmonitor","openc3-cosmos-tool-packetviewer","openc3-cosmos-tool-scriptrunner","openc3-cosmos-tool-tablemanager","openc3-cosmos-tool-tlmgrapher","openc3-cosmos-tool-tlmviewer","openc3-cosmos-enterprise-tool-admin","openc3-cosmos-tool-autonomic","openc3-cosmos-tool-calendar","openc3-cosmos-tool-grafana","openc3-cosmos-tool-systemhealth","openc3-cosmos-tool-logexplorer","openc3-enterprise-tool-base","openc3-tool-base"]}},watch:{showPluginDialog:function(t,o){t===!1&&(this.file=null,this.$refs.fileInput.value=null)}},created(){this.api.update_plugin_store()},mounted(){this.update(),this.updateProcesses();const t=this;window.onpopstate=function(){t.showPluginStore&&(t.showPluginStore=!1,history.go(1))}},methods:{pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},showOutput:function(t){this.processOutput=t.output,this.showProcessOutput=!0},update:function(){h.hi.get("/openc3-api/plugins/all").then(t=>{this.plugins=Object.entries(t.data).map(([o,i])=>i)}),h.hi.get("/openc3-api/targets_modified").then(t=>{this.targets=t.data})},updateProcesses:function(){h.hi.get("openc3-api/process_status/plugin_?substr=true").then(t=>{this.processes=t.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},formatDate(t){return P.format(P.toDate(parseInt(t)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},upload:function(t=null,o=null){const i=t?"put":"post",c=t?`/openc3-api/plugins/${t}`:"/openc3-api/plugins",n=new FormData;o===null?n.append("plugin",this.file,this.file.name):n.append("store_id",o.id);let l=this;h.hi[i](c,{data:n,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);l.progress=s}}).then(r=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let s=null;r.data.existing_plugin_txt_lines!==void 0&&(s=r.data.existing_plugin_txt_lines.join(`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-B1Hzjyj0.cjs"),e=require("vue"),x=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const A=require("./SimpleTextDialog-BCNn5FZh.cjs"),k=require("./tools/admin.cjs"),M=require("./settings-zRw8EylV.cjs"),P=require("./format-B22VpiOS.cjs"),j="store_url",N={props:{id:Number,name:String,title:String,author:String,description:String,keywords:Array,image_url:String,license:String,verified:Boolean,homepage:String,repository:String,gem_url:String,checksum:String},data:function(){return{_api:new h.gi,_storeUrl:""}},computed:{plugin:function(){return{id:this.id,name:this.name,title:this.title,author:this.author,description:this.description,keywords:this.keywords,image_url:this.image_url,license:this.license,verified:this.verified,homepage:this.homepage,repository:this.repository,gem_url:this.gem_url,checksum:this.checksum}},storeLink:function(){return this.hasStoreListing?new URL(`/cosmos_plugins/${this.id}`,this._storeUrl):null},hasStoreListing:function(){return!!this.id},isPluginInstalled:function(){return!!this.name}},created:function(){this._api.get_setting(j).then(t=>this._storeUrl=t||"https://store.openc3.com")}},z={mixins:[N],props:{modelValue:Boolean},emits:["triggerInstall","triggerUninstall","update:modelValue"],data(){return{showDialog:!1,showCopiedTooltip:!1}},computed:{isDialogOpen:{get:function(){return this.modelValue||this.showDialog},set:function(t){this.showDialog=t,this.$emit("update:modelValue",t)}}},methods:{openDialog:function(){this.isDialogOpen=!0},closeDialog:function(){this.isDialogOpen=!1},install:function(){this.$emit("triggerInstall",this.gemUrl)},uninstall:function(){this.$emit("triggerUninstall",this.gemUrl)},copyChecksum:function(){navigator.clipboard.writeText(this.checksum),this.showCopiedTooltip=!0,setTimeout(()=>{this.showCopiedTooltip=!1},1e3)}}},q=["textContent"],F={key:0},R=["textContent"],H={class:"mt-3 text-caption font-italic"};function G(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-badge"),_=e.resolveComponent("v-card-subtitle"),v=e.resolveComponent("v-img"),d=e.resolveComponent("v-text-field"),C=e.resolveComponent("v-card-text"),p=e.resolveComponent("v-card-actions"),V=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(t.$slots,"activator",{props:{onClick:l.openDialog}}),e.createVNode(g,{modelValue:l.isDialogOpen,"onUpdate:modelValue":o[2]||(o[2]=w=>l.isDialogOpen=w),"max-width":"500"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(f,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",{textContent:e.toDisplayString(t.title)},null,8,q),e.createVNode(a),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:w})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(w)),[e.createVNode(r,{href:t.storeLink,target:"_blank",icon:"mdi-open-in-new",size:"small",variant:"plain"},null,8,["href"])],16)]),default:e.withCtx(()=>[o[3]||(o[3]=e.createElementVNode("span",null," View at store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close-box",variant:"text",density:"compact",onClick:l.closeDialog},null,8,["onClick"])]),_:1}),e.createVNode(_,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1),e.createVNode(a),t.verified?(e.openBlock(),e.createElementBlock("div",F,[o[4]||(o[4]=e.createTextVNode(" Verified ",-1)),e.createVNode(m,{inline:"",icon:"mdi-shield-check",color:"success"})])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(C,null,{default:e.withCtx(()=>[t.image_url?(e.openBlock(),e.createBlock(v,{key:0,src:t.image_url},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{textContent:e.toDisplayString(t.description)},null,8,R),e.createElementVNode("div",H,"License: "+e.toDisplayString(t.license),1),e.createVNode(d,{modelValue:t.checksum,"onUpdate:modelValue":o[1]||(o[1]=w=>t.checksum=w),label:"SHA256",variant:"solo",density:"compact","hide-details":"",readonly:""},{append:e.withCtx(()=>[e.createVNode(s,{modelValue:n.showCopiedTooltip,"onUpdate:modelValue":o[0]||(o[0]=w=>n.showCopiedTooltip=w),location:"top","open-on-hover":!1},{activator:e.withCtx(({props:w})=>[e.createVNode(r,e.mergeProps(w,{icon:"mdi-content-copy",variant:"text",density:"compact",onClick:l.copyChecksum}),null,16,["onClick"])]),default:e.withCtx(()=>[o[5]||(o[5]=e.createElementVNode("span",null,"Copied!",-1))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(p,{class:"justify-start px-6"},{default:e.withCtx(()=>[t.isPluginInstalled?(e.openBlock(),e.createBlock(r,{key:0,text:"Uninstall","append-icon":"mdi-puzzle-remove",variant:"outlined",color:"red",onClick:l.uninstall},null,8,["onClick"])):(e.openBlock(),e.createBlock(r,{key:1,text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:l.install},null,8,["onClick"])),e.createVNode(r,{text:"Repository","append-icon":"mdi-open-in-new",variant:"outlined",href:t.repository,target:"_blank"},null,8,["href"]),e.createVNode(r,{text:"Homepage","append-icon":"mdi-open-in-new",variant:"outlined",href:t.homepage,target:"_blank"},null,8,["href"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}const D=x._export_sfc(z,[["render",G]]),J={components:{PluginDetailsDialog:D},mixins:[N],emits:["triggerInstall"],methods:{install:function(){this.$emit("triggerInstall",this.plugin)}}},K=["textContent"];function Q(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-badge"),s=e.resolveComponent("v-card-title"),f=e.resolveComponent("v-card-subtitle"),m=e.resolveComponent("v-img"),_=e.resolveComponent("v-card-text"),v=e.resolveComponent("v-btn"),d=e.resolveComponent("v-card-actions"),C=e.resolveComponent("v-card"),p=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createBlock(p,e.mergeProps(t.plugin,{onTriggerInstall:l.install}),{activator:e.withCtx(({props:V})=>[e.createVNode(C,e.mergeProps(V,{height:"350",class:"d-flex flex-column"}),{default:e.withCtx(()=>[e.createVNode(s,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title)+" ",1),e.createVNode(a),t.verified?(e.openBlock(),e.createBlock(r,{key:0,inline:"",icon:"mdi-shield-check",color:"success"})):e.createCommentVNode("",!0)]),_:1}),e.createVNode(f,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,e.toDisplayString(t.author),1)]),_:1}),e.createVNode(_,null,{default:e.withCtx(()=>[t.image_url?(e.openBlock(),e.createBlock(m,{key:0,src:t.image_url,"max-height":"160"},null,8,["src"])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass({"truncate-description":!0,"truncate-2":!!t.image_url,"truncate-10":!t.image_url}),textContent:e.toDisplayString(t.description)},null,10,K)]),_:1}),e.createVNode(a),e.createVNode(d,{class:"flex-wrap"},{default:e.withCtx(()=>[e.createVNode(v,{text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",onClick:e.withModifiers(l.install,["stop"])},null,8,["onClick"])]),_:1})]),_:1},16)]),_:1},16,["onTriggerInstall"])}const W=x._export_sfc(J,[["render",Q],["__scopeId","data-v-83d9d7a7"]]),y="store_url",b="DEFAULT",X={mixins:[M.Settings],props:{modelValue:Boolean},emits:["update:modelValue","update:storeUrl"],data(){return{showDialog:!1,storeUrl:"",rules:{required:t=>!!t||"Required",url:t=>{try{new URL(t)}catch{return"Not a valid URL"}return!0}}}},watch:{modelValue:function(t){t&&(this.showDialog=t)},showDialog:function(t){t||this.$emit("update:modelValue",t)}},created:function(){this.loadSetting(y,{scope:b})},methods:{save(){this.saveSetting(y,this.storeUrl,{scope:b}),this.$emit("update:storeUrl",this.storeUrl),this.showDialog=!1},parseSetting:function(t){t?this.storeUrl=t:this.storeUrl="https://store.openc3.com"}}};function Y(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-alert"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),v=e.resolveComponent("v-card-actions"),d=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(C,{modelValue:n.showDialog,"onUpdate:modelValue":o[4]||(o[4]=p=>n.showDialog=p),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),o[5]||(o[5]=e.createElementVNode("span",null,"Plugin Store Settings",-1)),e.createVNode(a)]),_:1}),e.createVNode(d,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(s,{modelValue:t.errorLoading,"onUpdate:modelValue":o[0]||(o[0]=p=>t.errorLoading=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error loading previous configuration due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.errorSaving,"onUpdate:modelValue":o[1]||(o[1]=p=>t.errorSaving=p),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error saving due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.successSaving,"onUpdate:modelValue":o[2]||(o[2]=p=>t.successSaving=p),type:"success",closable:"",density:"compact"},{default:e.withCtx(()=>[...o[6]||(o[6]=[e.createTextVNode(" Saved! ",-1)])]),_:1},8,["modelValue"]),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(f,{modelValue:n.storeUrl,"onUpdate:modelValue":o[3]||(o[3]=p=>n.storeUrl=p),label:"Store URL",rules:[n.rules.required,n.rules.url]},null,8,["modelValue","rules"])]),_:1}),e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(_,{color:"success",variant:"text",text:"Save","data-test":"save-store-settings-btn",onClick:l.save},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])}const Z=x._export_sfc(X,[["render",Y]]),$={components:{PluginCard:W,PluginStoreSettingsDialog:Z},emits:["close","triggerInstall"],data(){return{api:new h.gi,search:"",verifiedOnly:!1,showSettingsDialog:!1,plugins:[]}},computed:{filteredPlugins:function(){let t=this.plugins;return this.verifiedOnly&&(t=t.filter(o=>o.verified)),this.search.length&&(t=t.filter(o=>o.title.toLowerCase().includes(this.search.toLowerCase()))),t}},mounted:function(){this.fetchPluginStoreData()},methods:{fetchPluginStoreData:function(){h.hi.get("/openc3-api/pluginstore").then(t=>{this.plugins=t.data})},close:function(){this.$emit("close")},install:function(t){this.$emit("triggerInstall",t),this.close()},openSettings:function(){this.showSettingsDialog=!0},updatePluginStore:function(){this.api.update_plugin_store().then(t=>{this.fetchPluginStoreData()})}}},ee={class:"d-flex justify-content-space-between"},te={class:"d-inline-flex align-center w-100"};function oe(t,o,i,c,n,l){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-switch"),_=e.resolveComponent("plugin-card"),v=e.resolveComponent("v-col"),d=e.resolveComponent("v-row"),C=e.resolveComponent("v-container"),p=e.resolveComponent("v-sheet"),V=e.resolveComponent("plugin-store-settings-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(p,{class:"pb-11 pt-8 px-8",height:"100%"},{default:e.withCtx(()=>[e.createElementVNode("div",ee,[o[4]||(o[4]=e.createElementVNode("div",null,[e.createElementVNode("div",{class:"text-h3 mb-3"},"OpenC3 Plugin Store"),e.createElementVNode("div",{class:"text-subtitle-1"}," Browse plugins made by OpenC3 and the COSMOS community ")],-1)),e.createVNode(a),e.createVNode(r,{icon:"mdi-cog",variant:"text",onClick:l.openSettings},null,8,["onClick"]),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:g})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(g)),[e.createVNode(r,{href:"https://store.openc3.com",target:"_blank",icon:"mdi-open-in-new",variant:"text",class:"mx-2"})],16)]),default:e.withCtx(()=>[o[3]||(o[3]=e.createElementVNode("span",null," Open store.openc3.com ",-1))]),_:1}),e.createVNode(r,{icon:"mdi-close",variant:"text",onClick:l.close},null,8,["onClick"])]),e.createElementVNode("div",te,[e.createVNode(f,{modelValue:n.search,"onUpdate:modelValue":o[0]||(o[0]=g=>n.search=g),label:"Search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","single-line":"","hide-details":"","data-test":"search-plugin-store"},null,8,["modelValue"]),e.createVNode(m,{modelValue:n.verifiedOnly,"onUpdate:modelValue":o[1]||(o[1]=g=>n.verifiedOnly=g),label:"Verified only",density:"compact","hide-details":"",class:"ml-4"},null,8,["modelValue"])]),e.createVNode(a),o[5]||(o[5]=e.createElementVNode("span",{class:""}," Click on a plugin to see more information about it ",-1)),e.createVNode(C,null,{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.filteredPlugins,g=>(e.openBlock(),e.createBlock(v,{key:g.id,cols:"4"},{default:e.withCtx(()=>[e.createVNode(_,e.mergeProps({ref_for:!0},g,{onTriggerInstall:l.install}),null,16,["onTriggerInstall"])]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),e.createVNode(V,{modelValue:n.showSettingsDialog,"onUpdate:modelValue":o[2]||(o[2]=g=>n.showSettingsDialog=g),"onUpdate:storeUrl":l.updatePluginStore},null,8,["modelValue","onUpdate:storeUrl"])],64)}const ne=x._export_sfc($,[["render",oe]]),le={components:{PluginDetailsDialog:D},mixins:[N],props:{targets:{type:Array,default:()=>[]},isModified:Boolean},emits:["edit","delete","upgrade"],data(){return{showCard:!1}},computed:{displayTitle:function(){return this.title?this.title:this.name.replace(/^openc3-cosmos-/,"").replace(/-?\d+\.\d+\.\d+(?:\.pre\.beta\d+\.\d+)?\.gem(?:__\d+)?$/,"")}},methods:{openDetails:function(){this.hasStoreListing&&(this.showCard=!0)},downloadPlugin:function(){h.hi.post(`/openc3-api/packages/${this.name}/download`).then(t=>{const o=window.atob(t.data.contents),i=new Uint8Array(o.length);for(let l=0;l<o.length;++l)i[l]=o.charCodeAt(l);const c=new Blob([i],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(c),n.setAttribute("download",t.data.filename),n.click()})},downloadTarget:function(t){h.hi.post(`/openc3-api/targets/${t}/download`).then(o=>{const i=window.atob(o.data.contents),c=new Uint8Array(i.length);for(let a=0;a<i.length;++a)c[a]=i.charCodeAt(a);const n=new Blob([c],{type:"application/zip"}),l=document.createElement("a");l.href=URL.createObjectURL(n),l.setAttribute("download",o.data.filename),l.click()})},edit:function(){this.$emit("edit")},upgrade:function(){this.$emit("upgrade")},deletePrompt:function(){this.showCard=!1,this.$emit("delete")}}},ie=["textContent"],se={class:"text-subtitle-2 v-list-item-subtitle pl-0"},re={key:0},ae=["onClick","textContent"],ce=["textContent"];function ue(t,o,i,c,n,l){var v;const a=e.resolveComponent("v-img"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-list-item"),f=e.resolveComponent("v-list"),m=e.resolveComponent("v-menu"),_=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("tr",{class:e.normalizeClass({"cursor-pointer":t.hasStoreListing}),"data-test":"plugin-list-item",onClick:o[0]||(o[0]=(...d)=>l.openDetails&&l.openDetails(...d))},[e.createElementVNode("td",null,[t.image_url?(e.openBlock(),e.createBlock(a,{key:0,src:t.image_url,"max-height":"56","min-width":"56"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createElementVNode("div",{class:"text-h6",textContent:e.toDisplayString(l.displayTitle)},null,8,ie),e.createElementVNode("div",se,[i.isModified?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" * ")],64)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.name),1)]),(v=i.targets)!=null&&v.length?(e.openBlock(),e.createElementBlock("div",re,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.targets,(d,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"mr-2"},[d.modified?(e.openBlock(),e.createElementBlock("a",{key:0,style:{cursor:"pointer"},onClick:e.withModifiers(p=>l.downloadTarget(d.name),["prevent"]),textContent:e.toDisplayString(d.name)},null,8,ae)):(e.openBlock(),e.createElementBlock("span",{key:1,textContent:e.toDisplayString(d.name)},null,8,ce))]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createVNode(m,null,{activator:e.withCtx(({props:d})=>[e.createVNode(r,e.mergeProps(d,{icon:"mdi-dots-horizontal","data-test":"plugin-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(s,{title:"Download","prepend-icon":"mdi-download","data-test":"download-plugin",onClick:l.downloadPlugin},null,8,["onClick"]),e.createVNode(s,{title:"Edit Details","prepend-icon":"mdi-pencil","data-test":"edit-plugin",onClick:l.edit},null,8,["onClick"]),e.createVNode(s,{title:"Upgrade","prepend-icon":"mdi-update","data-test":"upgrade-plugin",onClick:l.upgrade},null,8,["onClick"]),e.createVNode(s,{title:"Delete","prepend-icon":"mdi-delete","data-test":"delete-plugin",onClick:l.deletePrompt},null,8,["onClick"])]),_:1})]),_:1})])],2),e.createVNode(_,e.mergeProps({modelValue:n.showCard,"onUpdate:modelValue":o[1]||(o[1]=d=>n.showCard=d)},t.plugin,{onTriggerUninstall:l.deletePrompt}),null,16,["modelValue","onTriggerUninstall"])],64)}const de=x._export_sfc(le,[["render",ue]]),pe={components:{PluginListItem:de},props:{plugins:{type:Array,required:!0},targets:{type:Object,required:!0},showDefaultTools:{type:Boolean,default:!1},defaultPlugins:{type:Array,required:!0}},emits:["edit","delete","upgrade"],data(){return{showPluginDetails:!1,detailPlugin:null}},computed:{shownPlugins(){const t=[],o=[];return this.plugins.forEach(i=>{const l=i.name.split("__")[0].split("-").slice(0,-1).join("-");this.defaultPlugins.includes(l)?o.push(i):t.push(i)}),t.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),this.showDefaultTools?(o.sort((i,c)=>i.name<c.name?-1:i.name>c.name?1:0),t.concat(o)):t}},methods:{showDetails:function(t){this.detailPlugin=t,this.showPluginDetails=!0},pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},editPlugin:function(t){this.$emit("edit",t)},upgradePlugin(t){this.$emit("upgrade",t)},deletePrompt:function(t){this.$emit("delete",t)}}};function me(t,o,i,c,n,l){const a=e.resolveComponent("plugin-list-item"),r=e.resolveComponent("v-data-table");return e.openBlock(),e.createBlock(r,{headers:[],items:l.shownPlugins,density:"compact",class:"list","data-test":"plugin-list"},{item:e.withCtx(({item:s})=>[e.createVNode(a,e.mergeProps(s,{targets:l.pluginTargets(s.name),"is-modified":l.isModified(s.name),onEdit:()=>l.editPlugin(s.name),onUpgrade:()=>l.upgradePlugin(s.name),onDelete:()=>l.deletePrompt(s.name)}),null,16,["targets","is-modified","onEdit","onUpgrade","onDelete"])]),_:1},8,["items"])}const ge=x._export_sfc(pe,[["render",me],["__scopeId","data-v-94f3dd91"]]),he={components:{PluginDialog:k.PluginDialog,PluginList:ge,PluginStore:ne,ModifiedPluginDialog:k.ModifiedPluginDialog,SimpleTextDialog:A.SimpleTextDialog},data(){return{api:new h.gi,file:null,currentPlugin:null,plugins:[],targets:{},processes:{},alert:"",alertType:"success",showAlert:!1,pluginName:null,variables:{},storeId:null,pluginTxt:"",pluginHashTmp:null,existingPluginTxt:null,showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",showPluginStore:!1,showPluginDialog:!1,showModifiedPluginDialog:!1,showDefaultTools:!1,progress:0,pluginDelete:!1,defaultPlugins:["openc3-cosmos-tool-admin","openc3-cosmos-tool-bucketexplorer","openc3-cosmos-tool-cmdsender","openc3-cosmos-tool-cmdqueue","openc3-cosmos-tool-cmdhistory","openc3-cosmos-tool-cmdtlmserver","openc3-cosmos-tool-dataextractor","openc3-cosmos-tool-dataviewer","openc3-cosmos-tool-docs","openc3-cosmos-tool-handbooks","openc3-cosmos-tool-iframe","openc3-cosmos-tool-limitsmonitor","openc3-cosmos-tool-packetviewer","openc3-cosmos-tool-scriptrunner","openc3-cosmos-tool-tablemanager","openc3-cosmos-tool-tlmgrapher","openc3-cosmos-tool-tlmviewer","openc3-cosmos-enterprise-tool-admin","openc3-cosmos-tool-autonomic","openc3-cosmos-tool-calendar","openc3-cosmos-tool-grafana","openc3-cosmos-tool-systemhealth","openc3-cosmos-tool-logexplorer","openc3-enterprise-tool-base","openc3-tool-base"]}},watch:{showPluginDialog:function(t,o){t===!1&&(this.file=null,this.$refs.fileInput.value=null)}},created(){this.api.update_plugin_store()},mounted(){this.update(),this.updateProcesses();const t=this;window.onpopstate=function(){t.showPluginStore&&(t.showPluginStore=!1,history.go(1))}},methods:{pluginTargets:function(t){let o=[];for(const i in this.targets)this.targets[i].plugin===t&&o.push(this.targets[i]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,i])=>i.plugin===t&&i.modified===!0)},showOutput:function(t){this.processOutput=t.output,this.showProcessOutput=!0},update:function(){h.hi.get("/openc3-api/plugins/all").then(t=>{this.plugins=Object.entries(t.data).map(([o,i])=>i)}),h.hi.get("/openc3-api/targets_modified").then(t=>{this.targets=t.data})},updateProcesses:function(){h.hi.get("openc3-api/process_status/plugin_?substr=true").then(t=>{this.processes=t.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},formatDate(t){return P.format(P.toDate(parseInt(t)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},upload:function(t=null,o=null){const i=t?"put":"post",c=t?`/openc3-api/plugins/${t}`:"/openc3-api/plugins",n=new FormData;o===null?n.append("plugin",this.file,this.file.name):n.append("store_id",o.id);let l=this;h.hi[i](c,{data:n,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);l.progress=s}}).then(r=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let s=null;r.data.existing_plugin_txt_lines!==void 0&&(s=r.data.existing_plugin_txt_lines.join(`
2
2
  `));let f=r.data.plugin_txt_lines.join(`
3
3
  `);this.pluginName=r.data.name,this.variables=r.data.variables,this.storeId=r.data.store_id,this.pluginTxt=f,this.existingPluginTxt=s,this.showPluginDialog=!0,this.file=void 0}).catch(r=>{this.currentPlugin=null,this.file=void 0})},pluginCallback:function(t){this.showPluginDialog=!1,this.currentPlugin!==null&&(t.name=this.currentPlugin),this.pluginHashTmp=t,this.isModified(this.currentPlugin)?(this.pluginDelete=!1,this.showModifiedPluginDialog=!0):this.pluginInstall()},modifiedSubmit:async function(t){if(t===!0)for(let o of this.pluginTargets(this.currentPlugin))o.modified==!0&&await h.hi.post(`/openc3-api/targets/${o.name}/delete_modified`);this.pluginDelete?this.deletePlugin(this.currentPlugin):this.pluginInstall()},pluginInstall:function(){h.hi.post(`/openc3-api/plugins/install/${this.pluginName}`,{data:{plugin_hash:JSON.stringify(this.pluginHashTmp)}}).then(t=>{this.alert=`Started installing plugin ${this.pluginName} ...`,this.alertType="success",this.showAlert=!0,this.currentPlugin=null,this.file=void 0,this.variables={},this.pluginTxt="",this.existingPluginTxt=null,this.storeId=null,setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3),this.update()})},editPlugin:function(t){h.hi.get(`/openc3-api/plugins/${t}`).then(o=>{let i=null;o.data.existing_plugin_txt_lines!==void 0&&(i=o.data.existing_plugin_txt_lines.join(`
4
4
  `)),this.pluginName=o.data.name,this.variables=o.data.variables,this.pluginTxt=o.data.plugin_txt_lines.join(`
5
5
  `),this.existingPluginTxt=i,this.showPluginDialog=!0})},deletePrompt:function(t){this.$dialog.confirm(`Are you sure you want to remove: ${t}`,{okText:"Delete",cancelText:"Cancel"}).then(o=>{this.isModified(t)?(this.currentPlugin=t,this.pluginDelete=!0,this.showModifiedPluginDialog=!0):this.deletePlugin(t)})},deletePlugin:function(t){this.alert=`Removing plugin ${t} ...`,this.alertType="success",this.showAlert=!0,h.hi.delete(`/openc3-api/plugins/${t}`).then(o=>{setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3)}),this.update()},upgradePlugin(t){this.file=null,this.currentPlugin=t,this.progress=0,this.$refs.fileInput.click()},selectFile(){this.file=null,this.currentPlugin=null,this.progress=0,this.$refs.fileInput.click()},fileChange(t){const o=t.target.files;if(o.length>0)if(this.file=o[0],this.currentPlugin!==null)if(this.file.name.split(".gem")[0]==this.currentPlugin.split(".gem")[0])this.$dialog.confirm(`The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}).catch(i=>{});else{let i=this.file.name.split("-"),c=i.findIndex(a=>a.includes(".")),n=i.slice(0,c).join("-");i=this.currentPlugin.split("-"),c=i.findIndex(a=>a.includes("."));let l=i.slice(0,c).join("-");n!==l?this.$dialog.confirm(`The new gem base name ${n} doesn't match the existing ${l}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}):this.upload(this.currentPlugin)}else this.upload();else this.$refs.fileInput.value=null},openStore(){this.showPluginStore=!0}}},fe={class:"mt-2"},_e=["textContent"],ve=["textContent"];function Ce(t,o,i,c,n,l){const a=e.resolveComponent("v-btn"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-col"),f=e.resolveComponent("rux-progress"),m=e.resolveComponent("v-row"),_=e.resolveComponent("v-divider"),v=e.resolveComponent("v-alert"),d=e.resolveComponent("v-list-item-title"),C=e.resolveComponent("v-list-item-subtitle"),p=e.resolveComponent("v-progress-circular"),V=e.resolveComponent("v-tooltip"),g=e.resolveComponent("v-list-item"),w=e.resolveComponent("v-list"),S=e.resolveComponent("v-switch"),T=e.resolveComponent("plugin-list"),B=e.resolveComponent("plugin-dialog"),E=e.resolveComponent("modified-plugin-dialog"),U=e.resolveComponent("simple-text-dialog"),I=e.resolveComponent("plugin-store"),O=e.resolveComponent("v-bottom-sheet");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(m,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(a,{"append-icon":"mdi-store",onClick:l.openStore},{default:e.withCtx(()=>[...o[9]||(o[9]=[e.createTextVNode(" Browse Plugins ",-1)])]),_:1},8,["onClick"]),e.createVNode(a,{"append-icon":"mdi-paperclip",class:"mx-2",onClick:l.selectFile},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode(" Install From File ",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:o[0]||(o[0]=(...u)=>l.fileChange&&l.fileChange(...u))},null,544),o[14]||(o[14]=e.createElementVNode("br",null,null,-1)),e.createElementVNode("p",fe,[o[12]||(o[12]=e.createTextVNode(" Note: Use ",-1)),e.createVNode(r,null,{default:e.withCtx(()=>[...o[11]||(o[11]=[e.createTextVNode(" mdi-dots-horizontal ",-1)])]),_:1}),o[13]||(o[13]=e.createTextVNode(" in the Installed Plugins list to upgrade existing plugins ",-1))])]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(f,{value:n.progress},null,8,["value"])]),_:1})]),_:1}),e.createVNode(m,{"no-gutters":"",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{align:"right",class:"mr-2"},{default:e.withCtx(()=>[...o[15]||(o[15]=[e.createElementVNode("div",null,"* indicates a modified plugin",-1),e.createElementVNode("div",null,"Click target link to download modifications",-1)])]),_:1})]),_:1}),e.createVNode(_),e.createVNode(v,{modelValue:n.showAlert,"onUpdate:modelValue":o[1]||(o[1]=u=>n.showAlert=u),closable:"",type:n.alertType,text:n.alert,"data-test":"plugin-alert"},null,8,["modelValue","type","text"]),Object.keys(n.processes).length>0?(e.openBlock(),e.createBlock(w,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode(" Process List ",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...o[17]||(o[17]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.processes,u=>(e.openBlock(),e.createElementBlock("div",{key:u.name},[e.createVNode(g,null,{append:e.withCtx(()=>[u.state==="Running"?(e.openBlock(),e.createBlock(p,{key:0,indeterminate:"",color:"primary"})):(e.openBlock(),e.createBlock(V,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:L})=>[e.createVNode(a,e.mergeProps({ref_for:!0},L,{icon:"mdi-eye",variant:"text","aria-label":"Show Output","data-test":"show-output",onClick:Ve=>l.showOutput(u)}),null,16,["onClick"])]),default:e.withCtx(()=>[o[18]||(o[18]=e.createElementVNode("span",null," Show Output ",-1))]),_:2},1024))]),default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(u.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${u.process_type}: ${u.detail} - ${u.state}`)},null,10,_e)]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+l.formatDate(u.updated_at))},null,8,ve)]),_:2},1024)]),_:2},1024),e.createVNode(_)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode(" Installed Plugins ",-1)])]),_:1}),e.createVNode(s,{class:"v-col-auto"},{default:e.withCtx(()=>[e.createVNode(S,{modelValue:n.showDefaultTools,"onUpdate:modelValue":o[2]||(o[2]=u=>n.showDefaultTools=u),label:"Show Default Tools",density:"compact","hide-details":"","data-test":"show-default-tools"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(T,{plugins:n.plugins,targets:n.targets,"show-default-tools":n.showDefaultTools,"default-plugins":n.defaultPlugins,onEdit:l.editPlugin,onUpgrade:l.upgradePlugin,onDelete:l.deletePrompt},null,8,["plugins","targets","show-default-tools","default-plugins","onEdit","onUpgrade","onDelete"]),n.showPluginDialog?(e.openBlock(),e.createBlock(B,{key:1,modelValue:n.showPluginDialog,"onUpdate:modelValue":o[3]||(o[3]=u=>n.showPluginDialog=u),"plugin-name":n.pluginName,variables:n.variables,"plugin-txt":n.pluginTxt,"existing-plugin-txt":n.existingPluginTxt,"store-id":n.storeId,onCallback:l.pluginCallback},null,8,["modelValue","plugin-name","variables","plugin-txt","existing-plugin-txt","store-id","onCallback"])):e.createCommentVNode("",!0),n.showModifiedPluginDialog?(e.openBlock(),e.createBlock(E,{key:2,modelValue:n.showModifiedPluginDialog,"onUpdate:modelValue":o[4]||(o[4]=u=>n.showModifiedPluginDialog=u),"plugin-name":n.currentPlugin,targets:l.pluginTargets(n.currentPlugin),"plugin-delete":n.pluginDelete,onSubmit:l.modifiedSubmit},null,8,["modelValue","plugin-name","targets","plugin-delete","onSubmit"])):e.createCommentVNode("",!0),e.createVNode(U,{modelValue:n.showProcessOutput,"onUpdate:modelValue":o[5]||(o[5]=u=>n.showProcessOutput=u),title:"Process Output",text:n.processOutput},null,8,["modelValue","text"]),e.createVNode(O,{modelValue:n.showPluginStore,"onUpdate:modelValue":o[8]||(o[8]=u=>n.showPluginStore=u),fullscreen:""},{default:e.withCtx(()=>[e.createVNode(I,{onClose:o[6]||(o[6]=()=>n.showPluginStore=!1),onTriggerInstall:o[7]||(o[7]=u=>l.upload(null,u))})]),_:1},8,["modelValue"])])}const we=x._export_sfc(he,[["render",Ce],["__scopeId","data-v-f1927f60"]]);exports.default=we;
6
- //# sourceMappingURL=PluginsTab-D2-nxcCZ.cjs.map
6
+ //# sourceMappingURL=PluginsTab-xzPlEMYj.cjs.map