@openc3/vue-common 7.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/dist/{ArrayWidget-BHjh3qLF.cjs → ArrayWidget-CQCphADm.cjs} +3 -3
  2. package/dist/{ArrayWidget-BHjh3qLF.cjs.map → ArrayWidget-CQCphADm.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-Dh6zDiC7.js → ArrayWidget-CcQFJGCA.js} +7 -6
  4. package/dist/{ArrayWidget-Dh6zDiC7.js.map → ArrayWidget-CcQFJGCA.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-CSc_TqNm.js → ArrayplotWidget-DGJEXAY0.js} +6 -5
  6. package/dist/{ArrayplotWidget-CSc_TqNm.js.map → ArrayplotWidget-DGJEXAY0.js.map} +1 -1
  7. package/dist/ArrayplotWidget-J0xWFYsb.cjs +2 -0
  8. package/dist/{ArrayplotWidget-BHD-TGQO.cjs.map → ArrayplotWidget-J0xWFYsb.cjs.map} +1 -1
  9. package/dist/BarColumn-DrvHLEts.cjs +2 -0
  10. package/dist/BarColumn-DrvHLEts.cjs.map +1 -0
  11. package/dist/{BarColumn-DmjMnw5l.js → BarColumn-DwZmAe8g.js} +11 -9
  12. package/dist/BarColumn-DwZmAe8g.js.map +1 -0
  13. package/dist/{BlockWidget-BdR_HCVc.js → BlockWidget-BHtugveV.js} +14 -13
  14. package/dist/{BlockWidget-BdR_HCVc.js.map → BlockWidget-BHtugveV.js.map} +1 -1
  15. package/dist/{BlockWidget-Bi1PfS1k.cjs → BlockWidget-_HTXwzGu.cjs} +2 -2
  16. package/dist/{BlockWidget-Bi1PfS1k.cjs.map → BlockWidget-_HTXwzGu.cjs.map} +1 -1
  17. package/dist/ButtonWidget-C_4jUjbD.cjs +3 -0
  18. package/dist/ButtonWidget-C_4jUjbD.cjs.map +1 -0
  19. package/dist/{ButtonWidget-DZ4VCNWU.js → ButtonWidget-Cc9cYsg8.js} +7 -6
  20. package/dist/ButtonWidget-Cc9cYsg8.js.map +1 -0
  21. package/dist/{CanvasWidget-DTEx-DpZ.cjs → CanvasWidget-98hvMkWl.cjs} +2 -2
  22. package/dist/{CanvasWidget-DTEx-DpZ.cjs.map → CanvasWidget-98hvMkWl.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-DuXOo3jG.js → CanvasWidget-Bn70gBcc.js} +2 -2
  24. package/dist/{CanvasWidget-DuXOo3jG.js.map → CanvasWidget-Bn70gBcc.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-bbOquK8B.cjs → CanvasdotWidget-6s1Kzzoj.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-bbOquK8B.cjs.map → CanvasdotWidget-6s1Kzzoj.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-WoLpxI1u.js → CanvasdotWidget-CMROfW3O.js} +2 -2
  28. package/dist/{CanvasdotWidget-WoLpxI1u.js.map → CanvasdotWidget-CMROfW3O.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-tWpK5rsv.js → CanvasimageWidget-BpM05v_m.js} +3 -3
  30. package/dist/{CanvasimageWidget-tWpK5rsv.js.map → CanvasimageWidget-BpM05v_m.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-D2EqsK7w.cjs → CanvasimageWidget-Du_TULyr.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-D2EqsK7w.cjs.map → CanvasimageWidget-Du_TULyr.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs → CanvasimagevalueWidget-DUiZEzwq.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs.map → CanvasimagevalueWidget-DUiZEzwq.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js → CanvasimagevalueWidget-E6G93iGc.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js.map → CanvasimagevalueWidget-E6G93iGc.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-CDFf8Vll.js → CanvaslabelWidget-C074R2Fy.js} +2 -2
  38. package/dist/{CanvaslabelWidget-CDFf8Vll.js.map → CanvaslabelWidget-C074R2Fy.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs → CanvaslabelWidget-C7K2dtNN.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs.map → CanvaslabelWidget-C7K2dtNN.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js → CanvaslabelvalueWidget-B0nJeS4X.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js.map → CanvaslabelvalueWidget-B0nJeS4X.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs → CanvaslabelvalueWidget-BuayHPZu.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs.map → CanvaslabelvalueWidget-BuayHPZu.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-BttTXCZq.js → CanvaslineWidget-CxnNAqOX.js} +2 -2
  46. package/dist/{CanvaslineWidget-BttTXCZq.js.map → CanvaslineWidget-CxnNAqOX.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-BECtKTPL.cjs → CanvaslineWidget-DaBwCmSV.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-BECtKTPL.cjs.map → CanvaslineWidget-DaBwCmSV.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js → CanvaslinevalueWidget-BwfFyCwH.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js.map → CanvaslinevalueWidget-BwfFyCwH.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs → CanvaslinevalueWidget-xSHdgNCO.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs.map → CanvaslinevalueWidget-xSHdgNCO.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-CTMObPhX.cjs → CheckbuttonWidget-Bey7tHx-.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-CTMObPhX.cjs.map → CheckbuttonWidget-Bey7tHx-.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-18jtf7sh.js → CheckbuttonWidget-yAm10oX0.js} +2 -2
  56. package/dist/{CheckbuttonWidget-18jtf7sh.js.map → CheckbuttonWidget-yAm10oX0.js.map} +1 -1
  57. package/dist/{ClassificationBanners-BmnQODLn.js → ClassificationBanners-DxpE_iPX.js} +2 -2
  58. package/dist/{ClassificationBanners-BmnQODLn.js.map → ClassificationBanners-DxpE_iPX.js.map} +1 -1
  59. package/dist/ClassificationBanners-xG4DOlqJ.cjs +2 -0
  60. package/dist/{ClassificationBanners-DjGCuH-4.cjs.map → ClassificationBanners-xG4DOlqJ.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-BjaVFbD4.js → ComboboxWidget-BnWksnnp.js} +2 -2
  62. package/dist/{ComboboxWidget-BjaVFbD4.js.map → ComboboxWidget-BnWksnnp.js.map} +1 -1
  63. package/dist/{ComboboxWidget-Cc0Acq9q.cjs → ComboboxWidget-Mh6axKMv.cjs} +2 -2
  64. package/dist/{ComboboxWidget-Cc0Acq9q.cjs.map → ComboboxWidget-Mh6axKMv.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CO-nvphS.js → CriticalCmdDialog-D0fIp8Tq.js} +24 -23
  66. package/dist/{CriticalCmdDialog-CO-nvphS.js.map → CriticalCmdDialog-D0fIp8Tq.js.map} +1 -1
  67. package/dist/CriticalCmdDialog-DJ3FWL0_.cjs +2 -0
  68. package/dist/{CriticalCmdDialog-eytxCQto.cjs.map → CriticalCmdDialog-DJ3FWL0_.cjs.map} +1 -1
  69. package/dist/{DateWidget-DkFAFlc8.js → DateWidget-CAiG2FIl.js} +9 -8
  70. package/dist/{DateWidget-DkFAFlc8.js.map → DateWidget-CAiG2FIl.js.map} +1 -1
  71. package/dist/DateWidget-DUYYp-Yx.cjs +2 -0
  72. package/dist/{DateWidget-Cle8FY8Q.cjs.map → DateWidget-DUYYp-Yx.cjs.map} +1 -1
  73. package/dist/DetailsDialog-D3iPUi8b.cjs +2 -0
  74. package/dist/{DetailsDialog-BcMaTfuQ.cjs.map → DetailsDialog-D3iPUi8b.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-sqja4Lzq.js → DetailsDialog-q5SDzw3R.js} +72 -71
  76. package/dist/{DetailsDialog-sqja4Lzq.js.map → DetailsDialog-q5SDzw3R.js.map} +1 -1
  77. package/dist/EventListDialog-1RsuuLHZ.cjs +2 -0
  78. package/dist/EventListDialog-1RsuuLHZ.cjs.map +1 -0
  79. package/dist/{EventListDialog-DjCQAwGl.js → EventListDialog-HuEtOu3k.js} +61 -58
  80. package/dist/EventListDialog-HuEtOu3k.js.map +1 -0
  81. package/dist/FilechecksumWidget-ByVrYgzI.cjs +2 -0
  82. package/dist/{FilechecksumWidget-2ta-UvLp.cjs.map → FilechecksumWidget-ByVrYgzI.cjs.map} +1 -1
  83. package/dist/{FilechecksumWidget-DqJ_hvN4.js → FilechecksumWidget-DeW9wy5d.js} +9 -9
  84. package/dist/{FilechecksumWidget-DqJ_hvN4.js.map → FilechecksumWidget-DeW9wy5d.js.map} +1 -1
  85. package/dist/{FiledisplayWidget-CYznG_tf.js → FiledisplayWidget-C_zPFu2E.js} +7 -6
  86. package/dist/{FiledisplayWidget-CYznG_tf.js.map → FiledisplayWidget-C_zPFu2E.js.map} +1 -1
  87. package/dist/FiledisplayWidget-hYmg981k.cjs +2 -0
  88. package/dist/{FiledisplayWidget-BUKXIQir.cjs.map → FiledisplayWidget-hYmg981k.cjs.map} +1 -1
  89. package/dist/{FormatvalueWidget-BpFXnA_U.cjs → FormatvalueWidget-7VD_kwxB.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-BpFXnA_U.cjs.map → FormatvalueWidget-7VD_kwxB.cjs.map} +1 -1
  91. package/dist/{FormatvalueWidget-BnVu4YGx.js → FormatvalueWidget-BrvPWwfN.js} +3 -3
  92. package/dist/{FormatvalueWidget-BnVu4YGx.js.map → FormatvalueWidget-BrvPWwfN.js.map} +1 -1
  93. package/dist/{Graph-CUFzx8Ti.js → Graph-BCvaO4yI.js} +45 -38
  94. package/dist/Graph-BCvaO4yI.js.map +1 -0
  95. package/dist/Graph-BUqdz6gu.cjs +2 -0
  96. package/dist/Graph-BUqdz6gu.cjs.map +1 -0
  97. package/dist/GraphWidget-BdP0xM_P.cjs +2 -0
  98. package/dist/{GraphWidget-BvCQHVxQ.cjs.map → GraphWidget-BdP0xM_P.cjs.map} +1 -1
  99. package/dist/{GraphWidget-DO5XbOGy.js → GraphWidget-QS-VJoes.js} +26 -31
  100. package/dist/{GraphWidget-DO5XbOGy.js.map → GraphWidget-QS-VJoes.js.map} +1 -1
  101. package/dist/{HorizontalWidget-BBQE-dP-.cjs → HorizontalWidget-B9j7DG2Q.cjs} +2 -2
  102. package/dist/{HorizontalWidget-BBQE-dP-.cjs.map → HorizontalWidget-B9j7DG2Q.cjs.map} +1 -1
  103. package/dist/{HorizontalWidget-BA9PiP3d.js → HorizontalWidget-cFSsdChw.js} +2 -2
  104. package/dist/{HorizontalWidget-BA9PiP3d.js.map → HorizontalWidget-cFSsdChw.js.map} +1 -1
  105. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs → HorizontalboxWidget-C3zHRO9h.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs.map → HorizontalboxWidget-C3zHRO9h.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-B-7HOqgl.js → HorizontalboxWidget-CKA7rLGd.js} +5 -5
  108. package/dist/{HorizontalboxWidget-B-7HOqgl.js.map → HorizontalboxWidget-CKA7rLGd.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-D-o9MGo0.js → HorizontallineWidget-BqbLK0zc.js} +2 -2
  110. package/dist/{HorizontallineWidget-D-o9MGo0.js.map → HorizontallineWidget-BqbLK0zc.js.map} +1 -1
  111. package/dist/{HorizontallineWidget-odTFoB8u.cjs → HorizontallineWidget-GGNFIo1N.cjs} +2 -2
  112. package/dist/{HorizontallineWidget-odTFoB8u.cjs.map → HorizontallineWidget-GGNFIo1N.cjs.map} +1 -1
  113. package/dist/{IframeWidget-BzOka-fX.js → IframeWidget-CITX8Es1.js} +2 -2
  114. package/dist/{IframeWidget-BzOka-fX.js.map → IframeWidget-CITX8Es1.js.map} +1 -1
  115. package/dist/{IframeWidget-cTHu_Rmp.cjs → IframeWidget-lK6Cw1Pp.cjs} +2 -2
  116. package/dist/{IframeWidget-cTHu_Rmp.cjs.map → IframeWidget-lK6Cw1Pp.cjs.map} +1 -1
  117. package/dist/ImageLoader-CkTaGfCC.cjs +2 -0
  118. package/dist/{ImageLoader-BTEOukIw.cjs.map → ImageLoader-CkTaGfCC.cjs.map} +1 -1
  119. package/dist/{ImageLoader-CstmWFM4.js → ImageLoader-DQV_11Vd.js} +2 -2
  120. package/dist/{ImageLoader-CstmWFM4.js.map → ImageLoader-DQV_11Vd.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-BA9uOM1q.js → ImageviewerWidget-BIsSA7KD.js} +2 -2
  122. package/dist/{ImageviewerWidget-BA9uOM1q.js.map → ImageviewerWidget-BIsSA7KD.js.map} +1 -1
  123. package/dist/{ImageviewerWidget-CLAFwmaB.cjs → ImageviewerWidget-CvbsaXCd.cjs} +2 -2
  124. package/dist/{ImageviewerWidget-CLAFwmaB.cjs.map → ImageviewerWidget-CvbsaXCd.cjs.map} +1 -1
  125. package/dist/InterfacesTab-Cfvks-ms.cjs +2 -0
  126. package/dist/{InterfacesTab-CM0CGFVS.cjs.map → InterfacesTab-Cfvks-ms.cjs.map} +1 -1
  127. package/dist/{InterfacesTab-C3mDLkGC.js → InterfacesTab-twne_Qp4.js} +11 -10
  128. package/dist/{InterfacesTab-C3mDLkGC.js.map → InterfacesTab-twne_Qp4.js.map} +1 -1
  129. package/dist/{LabelWidget-CMmVq1mx.cjs → LabelWidget-BFWd6Vgh.cjs} +2 -2
  130. package/dist/{LabelWidget-CMmVq1mx.cjs.map → LabelWidget-BFWd6Vgh.cjs.map} +1 -1
  131. package/dist/{LabelWidget-Da2howZF.js → LabelWidget-FQI-cH_A.js} +2 -2
  132. package/dist/{LabelWidget-Da2howZF.js.map → LabelWidget-FQI-cH_A.js.map} +1 -1
  133. package/dist/{LabelledWidget-CAqH0oWs.cjs → LabelledWidget-AZifUp-f.cjs} +2 -2
  134. package/dist/{LabelledWidget-CAqH0oWs.cjs.map → LabelledWidget-AZifUp-f.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-BH8y3OXT.js → LabelledWidget-KGXtQ4Zb.js} +4 -4
  136. package/dist/{LabelledWidget-BH8y3OXT.js.map → LabelledWidget-KGXtQ4Zb.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-Brl24F4c.js → LabelprogressbarWidget-72WyzD_Q.js} +4 -4
  138. package/dist/{LabelprogressbarWidget-Brl24F4c.js.map → LabelprogressbarWidget-72WyzD_Q.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs → LabelprogressbarWidget-Bd2E9G7V.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs.map → LabelprogressbarWidget-Bd2E9G7V.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-D22MB7-4.js → LabelsparklineWidget-DtWNf4mK.js} +4 -4
  142. package/dist/{LabelsparklineWidget-D22MB7-4.js.map → LabelsparklineWidget-DtWNf4mK.js.map} +1 -1
  143. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs → LabelsparklineWidget-__3CB0T-.cjs} +2 -2
  144. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs.map → LabelsparklineWidget-__3CB0T-.cjs.map} +1 -1
  145. package/dist/LabelvalueWidget-B681T0uR.cjs +2 -0
  146. package/dist/LabelvalueWidget-B681T0uR.cjs.map +1 -0
  147. package/dist/{LabelvalueWidget-_1JPbK-K.js → LabelvalueWidget-D_JLdY7r.js} +11 -12
  148. package/dist/LabelvalueWidget-D_JLdY7r.js.map +1 -0
  149. package/dist/LabelvaluedescWidget-BppM5vGp.js +64 -0
  150. package/dist/LabelvaluedescWidget-BppM5vGp.js.map +1 -0
  151. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs +2 -0
  152. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs.map +1 -0
  153. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js → LabelvaluelimitsbarWidget-B69ogLif.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js.map → LabelvaluelimitsbarWidget-B69ogLif.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs.map → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs → LabelvaluelimitscolumnWidget-BXdmh9So.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs.map → LabelvaluelimitscolumnWidget-BXdmh9So.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js → LabelvaluelimitscolumnWidget-DPYwFdgq.js} +5 -5
  160. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js.map → LabelvaluelimitscolumnWidget-DPYwFdgq.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js → LabelvaluerangebarWidget-BT0BcOoK.js} +4 -4
  162. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js.map → LabelvaluerangebarWidget-BT0BcOoK.js.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs → LabelvaluerangebarWidget-cavgscEk.cjs} +2 -2
  164. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs.map → LabelvaluerangebarWidget-cavgscEk.cjs.map} +1 -1
  165. package/dist/{Layout-DwWEea79.cjs → Layout-D1ukrMwN.cjs} +2 -2
  166. package/dist/{Layout-DwWEea79.cjs.map → Layout-D1ukrMwN.cjs.map} +1 -1
  167. package/dist/{Layout-D7RGn0Fe.js → Layout-d-vb0okO.js} +2 -2
  168. package/dist/{Layout-D7RGn0Fe.js.map → Layout-d-vb0okO.js.map} +1 -1
  169. package/dist/{LedWidget-DgMtvsiv.js → LedWidget-Cmr6eVG2.js} +7 -6
  170. package/dist/{LedWidget-DgMtvsiv.js.map → LedWidget-Cmr6eVG2.js.map} +1 -1
  171. package/dist/LedWidget-Dwrm6hTX.cjs +2 -0
  172. package/dist/{LedWidget-BaiKDozd.cjs.map → LedWidget-Dwrm6hTX.cjs.map} +1 -1
  173. package/dist/{LimitsBar-BFM38vQL.cjs → LimitsBar-Dz1lZ_81.cjs} +2 -2
  174. package/dist/{LimitsBar-BFM38vQL.cjs.map → LimitsBar-Dz1lZ_81.cjs.map} +1 -1
  175. package/dist/{LimitsBar-CcOaAw0C.js → LimitsBar-qMynDHYT.js} +2 -2
  176. package/dist/{LimitsBar-CcOaAw0C.js.map → LimitsBar-qMynDHYT.js.map} +1 -1
  177. package/dist/{LimitsbarWidget-DpmJn1Lo.js → LimitsbarWidget-CMvcwa-m.js} +3 -3
  178. package/dist/{LimitsbarWidget-DpmJn1Lo.js.map → LimitsbarWidget-CMvcwa-m.js.map} +1 -1
  179. package/dist/{LimitsbarWidget-ConP3qI5.cjs → LimitsbarWidget-vIP9AUk4.cjs} +2 -2
  180. package/dist/{LimitsbarWidget-ConP3qI5.cjs.map → LimitsbarWidget-vIP9AUk4.cjs.map} +1 -1
  181. package/dist/LimitscolorWidget-CPuknJPk.cjs +2 -0
  182. package/dist/{LimitscolorWidget-veWQ4NXl.cjs.map → LimitscolorWidget-CPuknJPk.cjs.map} +1 -1
  183. package/dist/{LimitscolorWidget-BMXiEaDm.js → LimitscolorWidget-CZ9wMtcI.js} +7 -6
  184. package/dist/{LimitscolorWidget-BMXiEaDm.js.map → LimitscolorWidget-CZ9wMtcI.js.map} +1 -1
  185. package/dist/{LimitscolumnWidget-CJABAor8.cjs → LimitscolumnWidget-r-nOETY5.cjs} +2 -2
  186. package/dist/{LimitscolumnWidget-CJABAor8.cjs.map → LimitscolumnWidget-r-nOETY5.cjs.map} +1 -1
  187. package/dist/{LimitscolumnWidget-ufFMz6R-.js → LimitscolumnWidget-r84KJGU-.js} +2 -2
  188. package/dist/{LimitscolumnWidget-ufFMz6R-.js.map → LimitscolumnWidget-r84KJGU-.js.map} +1 -1
  189. package/dist/LinegraphWidget-BMUI8q6Q.cjs +2 -0
  190. package/dist/{LinegraphWidget-3E8L5CvM.cjs.map → LinegraphWidget-BMUI8q6Q.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-BC2wVOny.js → LinegraphWidget-COGBGOjF.js} +10 -9
  192. package/dist/{LinegraphWidget-BC2wVOny.js.map → LinegraphWidget-COGBGOjF.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs → MatrixbycolumnsWidget-BoNbbrEi.cjs} +2 -2
  194. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs.map → MatrixbycolumnsWidget-BoNbbrEi.cjs.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js → MatrixbycolumnsWidget-Dx2iz0YF.js} +3 -3
  196. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js.map → MatrixbycolumnsWidget-Dx2iz0YF.js.map} +1 -1
  197. package/dist/{MicroservicesTab-B0SZVty3.js → MicroservicesTab-Bhsf1soi.js} +12 -11
  198. package/dist/{MicroservicesTab-B0SZVty3.js.map → MicroservicesTab-Bhsf1soi.js.map} +1 -1
  199. package/dist/{MicroservicesTab-snXJDoYq.cjs → MicroservicesTab-Cuj56g8-.cjs} +3 -3
  200. package/dist/{MicroservicesTab-snXJDoYq.cjs.map → MicroservicesTab-Cuj56g8-.cjs.map} +1 -1
  201. package/dist/{OpenC3TimePicker-DpkbfbgC.js → OpenC3TimePicker-C3vCnk72.js} +20 -24
  202. package/dist/OpenC3TimePicker-C3vCnk72.js.map +1 -0
  203. package/dist/OpenC3TimePicker-CVUV2cK4.cjs +2 -0
  204. package/dist/OpenC3TimePicker-CVUV2cK4.cjs.map +1 -0
  205. package/dist/Openc3Screen-Bi6NOEQM.cjs +6 -0
  206. package/dist/{Openc3Screen-D1RLlBgQ.cjs.map → Openc3Screen-Bi6NOEQM.cjs.map} +1 -1
  207. package/dist/{Openc3Screen-DbUvz-3B.js → Openc3Screen-DkhDra2o.js} +67 -66
  208. package/dist/{Openc3Screen-DbUvz-3B.js.map → Openc3Screen-DkhDra2o.js.map} +1 -1
  209. package/dist/{OutputDialog-Ds-GdGyI.js → OutputDialog-D0ifesTw.js} +11 -10
  210. package/dist/{OutputDialog-Ds-GdGyI.js.map → OutputDialog-D0ifesTw.js.map} +1 -1
  211. package/dist/OutputDialog-DR9cJem2.cjs +2 -0
  212. package/dist/{OutputDialog-ChPCaQAE.cjs.map → OutputDialog-DR9cJem2.cjs.map} +1 -1
  213. package/dist/PackagesTab-B4sG5tHo.cjs +2 -0
  214. package/dist/{PackagesTab-BgQsbXRo.cjs.map → PackagesTab-B4sG5tHo.cjs.map} +1 -1
  215. package/dist/{PackagesTab-CWplBp_I.js → PackagesTab-Bb221-aM.js} +19 -18
  216. package/dist/{PackagesTab-CWplBp_I.js.map → PackagesTab-Bb221-aM.js.map} +1 -1
  217. package/dist/PluginsTab-Cbi_R9jL.cjs +6 -0
  218. package/dist/PluginsTab-Cbi_R9jL.cjs.map +1 -0
  219. package/dist/{PluginsTab-BiiL622n.js → PluginsTab-nWngR5kY.js} +275 -234
  220. package/dist/PluginsTab-nWngR5kY.js.map +1 -0
  221. package/dist/{ProgressbarWidget-D3ndYnq_.js → ProgressbarWidget-DPbAVjdC.js} +2 -2
  222. package/dist/{ProgressbarWidget-D3ndYnq_.js.map → ProgressbarWidget-DPbAVjdC.js.map} +1 -1
  223. package/dist/{ProgressbarWidget-DludJVUf.cjs → ProgressbarWidget-cPr3o6Nv.cjs} +2 -2
  224. package/dist/{ProgressbarWidget-DludJVUf.cjs.map → ProgressbarWidget-cPr3o6Nv.cjs.map} +1 -1
  225. package/dist/{RadiobuttonWidget-DX4h94p1.cjs → RadiobuttonWidget-BQZkRFa-.cjs} +2 -2
  226. package/dist/{RadiobuttonWidget-DX4h94p1.cjs.map → RadiobuttonWidget-BQZkRFa-.cjs.map} +1 -1
  227. package/dist/{RadiobuttonWidget-CP0S9nWW.js → RadiobuttonWidget-iXI9yCDk.js} +2 -2
  228. package/dist/{RadiobuttonWidget-CP0S9nWW.js.map → RadiobuttonWidget-iXI9yCDk.js.map} +1 -1
  229. package/dist/{RadiogroupWidget-BXHfA21T.js → RadiogroupWidget-CMM_p1eA.js} +2 -2
  230. package/dist/{RadiogroupWidget-BXHfA21T.js.map → RadiogroupWidget-CMM_p1eA.js.map} +1 -1
  231. package/dist/{RadiogroupWidget-NqjBNUH6.cjs → RadiogroupWidget-D2iIQ5RU.cjs} +2 -2
  232. package/dist/{RadiogroupWidget-NqjBNUH6.cjs.map → RadiogroupWidget-D2iIQ5RU.cjs.map} +1 -1
  233. package/dist/{RangebarWidget-Bv2DqkPo.js → RangebarWidget-DJXGUHAc.js} +2 -2
  234. package/dist/{RangebarWidget-Bv2DqkPo.js.map → RangebarWidget-DJXGUHAc.js.map} +1 -1
  235. package/dist/{RangebarWidget-CRq2zpvw.cjs → RangebarWidget-DsphX-jB.cjs} +2 -2
  236. package/dist/{RangebarWidget-CRq2zpvw.cjs.map → RangebarWidget-DsphX-jB.cjs.map} +1 -1
  237. package/dist/RedisTab-BZtfqEcP.js +186 -0
  238. package/dist/RedisTab-BZtfqEcP.js.map +1 -0
  239. package/dist/RedisTab-KhsG2CCO.cjs +2 -0
  240. package/dist/RedisTab-KhsG2CCO.cjs.map +1 -0
  241. package/dist/{RollupWidget-o_huYU0x.js → RollupWidget-BbWLSsTT.js} +2 -2
  242. package/dist/{RollupWidget-o_huYU0x.js.map → RollupWidget-BbWLSsTT.js.map} +1 -1
  243. package/dist/{RollupWidget-B7_Q_boi.cjs → RollupWidget-w-SF3f-X.cjs} +2 -2
  244. package/dist/{RollupWidget-B7_Q_boi.cjs.map → RollupWidget-w-SF3f-X.cjs.map} +1 -1
  245. package/dist/{RoutersTab-DN17iBBi.js → RoutersTab-CLKIJ5cm.js} +13 -12
  246. package/dist/{RoutersTab-DN17iBBi.js.map → RoutersTab-CLKIJ5cm.js.map} +1 -1
  247. package/dist/RoutersTab-DUvOfNhU.cjs +2 -0
  248. package/dist/{RoutersTab-CAbnSGHy.cjs.map → RoutersTab-DUvOfNhU.cjs.map} +1 -1
  249. package/dist/{ScriptChooser-CzzUJ1Zj.js → ScriptChooser-BxTJKTVu.js} +20 -19
  250. package/dist/{ScriptChooser-CzzUJ1Zj.js.map → ScriptChooser-BxTJKTVu.js.map} +1 -1
  251. package/dist/ScriptChooser-YC_FfCLd.cjs +2 -0
  252. package/dist/{ScriptChooser-CggwstfT.cjs.map → ScriptChooser-YC_FfCLd.cjs.map} +1 -1
  253. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs → ScrollwindowWidget-D1mtHFMa.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs.map → ScrollwindowWidget-D1mtHFMa.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-DdjaML6D.js → ScrollwindowWidget-Dxhp7yKn.js} +2 -2
  256. package/dist/{ScrollwindowWidget-DdjaML6D.js.map → ScrollwindowWidget-Dxhp7yKn.js.map} +1 -1
  257. package/dist/SecretsTab-B7oZb354.cjs +2 -0
  258. package/dist/{SecretsTab-Cn6-o85L.cjs.map → SecretsTab-B7oZb354.cjs.map} +1 -1
  259. package/dist/{SecretsTab-Cu3sx2OA.js → SecretsTab-BoBmTh63.js} +5 -5
  260. package/dist/{SecretsTab-Cu3sx2OA.js.map → SecretsTab-BoBmTh63.js.map} +1 -1
  261. package/dist/SettingsTab-2EMyS-3_.cjs +3 -0
  262. package/dist/{SettingsTab-C6zIL2D6.cjs.map → SettingsTab-2EMyS-3_.cjs.map} +1 -1
  263. package/dist/{SettingsTab-B_vvSLvt.js → SettingsTab-BL7gkaO9.js} +7 -6
  264. package/dist/{SettingsTab-B_vvSLvt.js.map → SettingsTab-BL7gkaO9.js.map} +1 -1
  265. package/dist/{SignalWidget-Dd54y28I.js → SignalWidget-65q0tiuo.js} +2 -2
  266. package/dist/{SignalWidget-Dd54y28I.js.map → SignalWidget-65q0tiuo.js.map} +1 -1
  267. package/dist/{SignalWidget-BagcB92r.cjs → SignalWidget-Cld2lVyc.cjs} +2 -2
  268. package/dist/{SignalWidget-BagcB92r.cjs.map → SignalWidget-Cld2lVyc.cjs.map} +1 -1
  269. package/dist/{SimpleTextDialog-DZv9n_kJ.js → SimpleTextDialog-ChmFtdVw.js} +2 -2
  270. package/dist/{SimpleTextDialog-DZv9n_kJ.js.map → SimpleTextDialog-ChmFtdVw.js.map} +1 -1
  271. package/dist/{SimpleTextDialog-BJ50TbWh.cjs → SimpleTextDialog-DVlqwD8O.cjs} +2 -2
  272. package/dist/{SimpleTextDialog-BJ50TbWh.cjs.map → SimpleTextDialog-DVlqwD8O.cjs.map} +1 -1
  273. package/dist/{SpacerWidget-GPFYtIG1.js → SpacerWidget-DFzbojmX.js} +2 -2
  274. package/dist/{SpacerWidget-GPFYtIG1.js.map → SpacerWidget-DFzbojmX.js.map} +1 -1
  275. package/dist/{SpacerWidget-DWjBns9r.cjs → SpacerWidget-DV0-ZfEm.cjs} +2 -2
  276. package/dist/{SpacerWidget-DWjBns9r.cjs.map → SpacerWidget-DV0-ZfEm.cjs.map} +1 -1
  277. package/dist/SparklineWidget-B1RfTxEp.cjs +2 -0
  278. package/dist/{SparklineWidget-xdPgolp3.cjs.map → SparklineWidget-B1RfTxEp.cjs.map} +1 -1
  279. package/dist/{SparklineWidget-f11nrlLS.js → SparklineWidget-Bu4I8zY0.js} +10 -9
  280. package/dist/{SparklineWidget-f11nrlLS.js.map → SparklineWidget-Bu4I8zY0.js.map} +1 -1
  281. package/dist/{TabbookWidget-DeaC27yC.js → TabbookWidget-CELMWyx7.js} +2 -2
  282. package/dist/{TabbookWidget-DeaC27yC.js.map → TabbookWidget-CELMWyx7.js.map} +1 -1
  283. package/dist/{TabbookWidget-CUIYWHRH.cjs → TabbookWidget-CLpx5e5Q.cjs} +2 -2
  284. package/dist/{TabbookWidget-CUIYWHRH.cjs.map → TabbookWidget-CLpx5e5Q.cjs.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-BoBqvs3T.js → TargetPacketItemChooser-BOdVLVbe.js} +177 -153
  286. package/dist/TargetPacketItemChooser-BOdVLVbe.js.map +1 -0
  287. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs +2 -0
  288. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs.map +1 -0
  289. package/dist/{TargetsTab-CjVaBN9O.js → TargetsTab-BJZEtKY4.js} +11 -10
  290. package/dist/{TargetsTab-CjVaBN9O.js.map → TargetsTab-BJZEtKY4.js.map} +1 -1
  291. package/dist/TargetsTab-Dkp4VoK6.cjs +2 -0
  292. package/dist/{TargetsTab-BMcWjrZ_.cjs.map → TargetsTab-Dkp4VoK6.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-tL41zWUX.js → TextboxWidget-DYsqXntS.js} +7 -6
  294. package/dist/{TextboxWidget-tL41zWUX.js.map → TextboxWidget-DYsqXntS.js.map} +1 -1
  295. package/dist/TextboxWidget-DuNmhz89.cjs +2 -0
  296. package/dist/{TextboxWidget-CXA9rR02.cjs.map → TextboxWidget-DuNmhz89.cjs.map} +1 -1
  297. package/dist/{TextfieldWidget-D1qj14Qi.js → TextfieldWidget-BIUgV9Q4.js} +2 -2
  298. package/dist/{TextfieldWidget-D1qj14Qi.js.map → TextfieldWidget-BIUgV9Q4.js.map} +1 -1
  299. package/dist/{TextfieldWidget-D-H2fOZG.cjs → TextfieldWidget-BlW-rSVv.cjs} +2 -2
  300. package/dist/{TextfieldWidget-D-H2fOZG.cjs.map → TextfieldWidget-BlW-rSVv.cjs.map} +1 -1
  301. package/dist/{TimeWidget-CSVGNong.js → TimeWidget-BPXcY1Wy.js} +7 -6
  302. package/dist/{TimeWidget-CSVGNong.js.map → TimeWidget-BPXcY1Wy.js.map} +1 -1
  303. package/dist/TimeWidget-BddmbQgt.cjs +2 -0
  304. package/dist/{TimeWidget-CGk8Ze_I.cjs.map → TimeWidget-BddmbQgt.cjs.map} +1 -1
  305. package/dist/{TitleWidget-ClhWhUf3.cjs → TitleWidget-CPqwZKUx.cjs} +2 -2
  306. package/dist/{TitleWidget-ClhWhUf3.cjs.map → TitleWidget-CPqwZKUx.cjs.map} +1 -1
  307. package/dist/{TitleWidget-CLx-tuYT.js → TitleWidget-DJ9mHRLE.js} +2 -2
  308. package/dist/{TitleWidget-CLx-tuYT.js.map → TitleWidget-DJ9mHRLE.js.map} +1 -1
  309. package/dist/ToolsTab-B4CURni4.cjs +2 -0
  310. package/dist/{ToolsTab-DTHap-Nq.cjs.map → ToolsTab-B4CURni4.cjs.map} +1 -1
  311. package/dist/{ToolsTab-lBB_KhmA.js → ToolsTab-VSCWDywf.js} +62 -61
  312. package/dist/{ToolsTab-lBB_KhmA.js.map → ToolsTab-VSCWDywf.js.map} +1 -1
  313. package/dist/{TopBar-C810rP_B.js → TopBar-B4oz2FsN.js} +2 -2
  314. package/dist/{TopBar-C810rP_B.js.map → TopBar-B4oz2FsN.js.map} +1 -1
  315. package/dist/{TopBar-Ctzx7o2k.cjs → TopBar-lcB6jpd_.cjs} +2 -2
  316. package/dist/{TopBar-Ctzx7o2k.cjs.map → TopBar-lcB6jpd_.cjs.map} +1 -1
  317. package/dist/TsdbTab-Cv8GjpoJ.js +1164 -0
  318. package/dist/TsdbTab-Cv8GjpoJ.js.map +1 -0
  319. package/dist/TsdbTab-OOO451j0.cjs +5 -0
  320. package/dist/TsdbTab-OOO451j0.cjs.map +1 -0
  321. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js → UpgradeToEnterpriseDialog-BUuXsGPY.js} +2 -2
  322. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js.map → UpgradeToEnterpriseDialog-BUuXsGPY.js.map} +1 -1
  323. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs → UpgradeToEnterpriseDialog-DHLK6v6f.cjs} +2 -2
  324. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map → UpgradeToEnterpriseDialog-DHLK6v6f.cjs.map} +1 -1
  325. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs +1477 -0
  326. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs.map +1 -0
  327. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js +26306 -0
  328. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js.map +1 -0
  329. package/dist/VWidget-B6WHN0_z.cjs +2 -0
  330. package/dist/VWidget-B6WHN0_z.cjs.map +1 -0
  331. package/dist/{VWidget-CxnaMF0w.js → VWidget-BDy0211S.js} +17 -20
  332. package/dist/VWidget-BDy0211S.js.map +1 -0
  333. package/dist/{ValueWidget-BYgpXfDo.js → ValueWidget-DzOSy7lp.js} +7 -6
  334. package/dist/{ValueWidget-BYgpXfDo.js.map → ValueWidget-DzOSy7lp.js.map} +1 -1
  335. package/dist/ValueWidget-QWzoEFXc.cjs +2 -0
  336. package/dist/{ValueWidget-Bws1qOEI.cjs.map → ValueWidget-QWzoEFXc.cjs.map} +1 -1
  337. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs → ValuelimitsbarWidget-5AkAljK-.cjs} +2 -2
  338. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs.map → ValuelimitsbarWidget-5AkAljK-.cjs.map} +1 -1
  339. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js → ValuelimitsbarWidget-D5dSlW6D.js} +4 -4
  340. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js.map → ValuelimitsbarWidget-D5dSlW6D.js.map} +1 -1
  341. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js → ValuelimitscolumnWidget-7DXCsVW_.js} +4 -4
  342. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js.map → ValuelimitscolumnWidget-7DXCsVW_.js.map} +1 -1
  343. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs → ValuelimitscolumnWidget-zNx9i1v7.cjs} +2 -2
  344. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs.map → ValuelimitscolumnWidget-zNx9i1v7.cjs.map} +1 -1
  345. package/dist/{ValuerangebarWidget-DmhczZQb.js → ValuerangebarWidget-BWjnpmyy.js} +4 -4
  346. package/dist/{ValuerangebarWidget-DmhczZQb.js.map → ValuerangebarWidget-BWjnpmyy.js.map} +1 -1
  347. package/dist/{ValuerangebarWidget-Ips-beG6.cjs → ValuerangebarWidget-EsdIz4oP.cjs} +2 -2
  348. package/dist/{ValuerangebarWidget-Ips-beG6.cjs.map → ValuerangebarWidget-EsdIz4oP.cjs.map} +1 -1
  349. package/dist/{VerticalWidget-BvsVh0Ob.js → VerticalWidget-BOtXAhxt.js} +2 -2
  350. package/dist/{VerticalWidget-BvsVh0Ob.js.map → VerticalWidget-BOtXAhxt.js.map} +1 -1
  351. package/dist/{VerticalWidget-BVt7QPjO.cjs → VerticalWidget-DVskS6fx.cjs} +2 -2
  352. package/dist/{VerticalWidget-BVt7QPjO.cjs.map → VerticalWidget-DVskS6fx.cjs.map} +1 -1
  353. package/dist/{VerticalboxWidget-CNoXT3YW.cjs → VerticalboxWidget-Bu4oHN2K.cjs} +2 -2
  354. package/dist/{VerticalboxWidget-CNoXT3YW.cjs.map → VerticalboxWidget-Bu4oHN2K.cjs.map} +1 -1
  355. package/dist/{VerticalboxWidget-ClTCDCQN.js → VerticalboxWidget-RAsXfGdI.js} +5 -5
  356. package/dist/{VerticalboxWidget-ClTCDCQN.js.map → VerticalboxWidget-RAsXfGdI.js.map} +1 -1
  357. package/dist/{Widget-DRhVdCLP.js → Widget-BDsgRxuV.js} +37 -14
  358. package/dist/{Widget-DRhVdCLP.js.map → Widget-BDsgRxuV.js.map} +1 -1
  359. package/dist/Widget-Ddu_kuTL.cjs +2 -0
  360. package/dist/{Widget-CB_BtOFw.cjs.map → Widget-Ddu_kuTL.cjs.map} +1 -1
  361. package/dist/{addMonths-Zggd7y6j.js → addMonths-BiRF9eDT.js} +2 -2
  362. package/dist/{addMonths-Zggd7y6j.js.map → addMonths-BiRF9eDT.js.map} +1 -1
  363. package/dist/{addMonths-BhOW2mOW.cjs → addMonths-Ds2ObZwt.cjs} +2 -2
  364. package/dist/{addMonths-BhOW2mOW.cjs.map → addMonths-Ds2ObZwt.cjs.map} +1 -1
  365. package/dist/components.cjs +2 -2
  366. package/dist/components.js +28 -28
  367. package/dist/format-D2pYLAIF.js +5896 -0
  368. package/dist/format-D2pYLAIF.js.map +1 -0
  369. package/dist/format-qjtPogBb.cjs +13 -0
  370. package/dist/format-qjtPogBb.cjs.map +1 -0
  371. package/dist/getDefaultOptions-DSMQojSA.cjs +2 -0
  372. package/dist/{getDefaultOptions-Cek5kGzE.cjs.map → getDefaultOptions-DSMQojSA.cjs.map} +1 -1
  373. package/dist/getDefaultOptions-v3X-F5jM.js +8 -0
  374. package/dist/{getDefaultOptions-xjgn1r-_.js.map → getDefaultOptions-v3X-F5jM.js.map} +1 -1
  375. package/dist/{index-GYAZJDxn.js → index-BJCQaZ7q.js} +63 -62
  376. package/dist/{index-GYAZJDxn.js.map → index-BJCQaZ7q.js.map} +1 -1
  377. package/dist/{index-CJcL4_a4.js → index-BjcgyMLV.js} +691 -633
  378. package/dist/index-BjcgyMLV.js.map +1 -0
  379. package/dist/{index-3sXOEKCU.cjs → index-CctPeecq.cjs} +5 -5
  380. package/dist/{index-3sXOEKCU.cjs.map → index-CctPeecq.cjs.map} +1 -1
  381. package/dist/index-_a-NnvKv.cjs +10 -0
  382. package/dist/index-_a-NnvKv.cjs.map +1 -0
  383. package/dist/{parse-BKTTGw2p.js → parse-Br4M7sX4.js} +3 -3
  384. package/dist/{parse-BKTTGw2p.js.map → parse-Br4M7sX4.js.map} +1 -1
  385. package/dist/{parse-DgZTYocC.cjs → parse-D8syXcjd.cjs} +2 -2
  386. package/dist/{parse-DgZTYocC.cjs.map → parse-D8syXcjd.cjs.map} +1 -1
  387. package/dist/plugins.cjs +1 -1
  388. package/dist/plugins.cjs.map +1 -1
  389. package/dist/plugins.js +1 -1
  390. package/dist/plugins.js.map +1 -1
  391. package/dist/purify.es-CehoGjrR.cjs +3 -0
  392. package/dist/purify.es-CehoGjrR.cjs.map +1 -0
  393. package/dist/purify.es-exIQuqhb.js +596 -0
  394. package/dist/purify.es-exIQuqhb.js.map +1 -0
  395. package/dist/settings-CWvCIKI4.cjs +2 -0
  396. package/dist/{settings-B0AhztTk.cjs.map → settings-CWvCIKI4.cjs.map} +1 -1
  397. package/dist/{settings-C2auUQwX.js → settings-Dvmurty6.js} +2 -2
  398. package/dist/{settings-C2auUQwX.js.map → settings-Dvmurty6.js.map} +1 -1
  399. package/dist/settingsCache-CGgEjlw3.js +28 -0
  400. package/dist/settingsCache-CGgEjlw3.js.map +1 -0
  401. package/dist/settingsCache-Dg7OMDJK.cjs +2 -0
  402. package/dist/settingsCache-Dg7OMDJK.cjs.map +1 -0
  403. package/dist/{timeFilters-CRNRsUsb.cjs → timeFilters-BtN2a5-O.cjs} +2 -2
  404. package/dist/{timeFilters-CRNRsUsb.cjs.map → timeFilters-BtN2a5-O.cjs.map} +1 -1
  405. package/dist/{timeFilters-DTOZtBlG.js → timeFilters-C1beMtAQ.js} +3 -3
  406. package/dist/{timeFilters-DTOZtBlG.js.map → timeFilters-C1beMtAQ.js.map} +1 -1
  407. package/dist/tools/admin.cjs +1 -1
  408. package/dist/tools/admin.js +1 -1
  409. package/dist/tools/base.cjs +1 -1
  410. package/dist/tools/base.cjs.map +1 -1
  411. package/dist/tools/base.js +51 -51
  412. package/dist/tools/calendar.cjs +1 -1
  413. package/dist/tools/calendar.js +1 -1
  414. package/dist/tools/scriptrunner.cjs +8 -8
  415. package/dist/tools/scriptrunner.cjs.map +1 -1
  416. package/dist/tools/scriptrunner.js +17 -17
  417. package/dist/tools/scriptrunner.js.map +1 -1
  418. package/dist/util.cjs +1 -1
  419. package/dist/util.js +11 -7
  420. package/dist/util.js.map +1 -1
  421. package/dist/vue-common.css +1 -1
  422. package/dist/widgets.cjs +1 -1
  423. package/dist/widgets.js +64 -64
  424. package/package.json +7 -7
  425. package/dist/ArrayplotWidget-BHD-TGQO.cjs +0 -2
  426. package/dist/BarColumn-DmjMnw5l.js.map +0 -1
  427. package/dist/BarColumn-Ym4P8YHC.cjs +0 -2
  428. package/dist/BarColumn-Ym4P8YHC.cjs.map +0 -1
  429. package/dist/ButtonWidget-70hNWuEy.cjs +0 -3
  430. package/dist/ButtonWidget-70hNWuEy.cjs.map +0 -1
  431. package/dist/ButtonWidget-DZ4VCNWU.js.map +0 -1
  432. package/dist/ClassificationBanners-DjGCuH-4.cjs +0 -2
  433. package/dist/CriticalCmdDialog-eytxCQto.cjs +0 -2
  434. package/dist/DateWidget-Cle8FY8Q.cjs +0 -2
  435. package/dist/DetailsDialog-BcMaTfuQ.cjs +0 -2
  436. package/dist/EventListDialog-DjCQAwGl.js.map +0 -1
  437. package/dist/EventListDialog-EmC7YW60.cjs +0 -2
  438. package/dist/EventListDialog-EmC7YW60.cjs.map +0 -1
  439. package/dist/FilechecksumWidget-2ta-UvLp.cjs +0 -2
  440. package/dist/FiledisplayWidget-BUKXIQir.cjs +0 -2
  441. package/dist/Graph-CUFzx8Ti.js.map +0 -1
  442. package/dist/Graph-qxF4224c.cjs +0 -2
  443. package/dist/Graph-qxF4224c.cjs.map +0 -1
  444. package/dist/GraphWidget-BvCQHVxQ.cjs +0 -2
  445. package/dist/ImageLoader-BTEOukIw.cjs +0 -2
  446. package/dist/InterfacesTab-CM0CGFVS.cjs +0 -2
  447. package/dist/LabelvalueWidget-_1JPbK-K.js.map +0 -1
  448. package/dist/LabelvalueWidget-bYqqgIGE.cjs +0 -2
  449. package/dist/LabelvalueWidget-bYqqgIGE.cjs.map +0 -1
  450. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs +0 -2
  451. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs.map +0 -1
  452. package/dist/LabelvaluedescWidget-BgduSJJb.js +0 -59
  453. package/dist/LabelvaluedescWidget-BgduSJJb.js.map +0 -1
  454. package/dist/LedWidget-BaiKDozd.cjs +0 -2
  455. package/dist/LimitscolorWidget-veWQ4NXl.cjs +0 -2
  456. package/dist/LinegraphWidget-3E8L5CvM.cjs +0 -2
  457. package/dist/OpenC3TimePicker-DpkbfbgC.js.map +0 -1
  458. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs +0 -2
  459. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs.map +0 -1
  460. package/dist/Openc3Screen-D1RLlBgQ.cjs +0 -6
  461. package/dist/OutputDialog-ChPCaQAE.cjs +0 -2
  462. package/dist/PackagesTab-BgQsbXRo.cjs +0 -2
  463. package/dist/PluginsTab-BiiL622n.js.map +0 -1
  464. package/dist/PluginsTab-RgIMk-F7.cjs +0 -6
  465. package/dist/PluginsTab-RgIMk-F7.cjs.map +0 -1
  466. package/dist/RedisTab-7TbOXFA_.js +0 -171
  467. package/dist/RedisTab-7TbOXFA_.js.map +0 -1
  468. package/dist/RedisTab-DpWPY1P0.cjs +0 -2
  469. package/dist/RedisTab-DpWPY1P0.cjs.map +0 -1
  470. package/dist/RoutersTab-CAbnSGHy.cjs +0 -2
  471. package/dist/ScriptChooser-CggwstfT.cjs +0 -2
  472. package/dist/SecretsTab-Cn6-o85L.cjs +0 -2
  473. package/dist/SettingsTab-C6zIL2D6.cjs +0 -3
  474. package/dist/SparklineWidget-xdPgolp3.cjs +0 -2
  475. package/dist/TargetPacketItemChooser-BoBqvs3T.js.map +0 -1
  476. package/dist/TargetPacketItemChooser-C0Z90rss.cjs +0 -2
  477. package/dist/TargetPacketItemChooser-C0Z90rss.cjs.map +0 -1
  478. package/dist/TargetsTab-BMcWjrZ_.cjs +0 -2
  479. package/dist/TextboxWidget-CXA9rR02.cjs +0 -2
  480. package/dist/TimeWidget-CGk8Ze_I.cjs +0 -2
  481. package/dist/ToolsTab-DTHap-Nq.cjs +0 -2
  482. package/dist/TsdbTab-7F4mRKDo.js +0 -125
  483. package/dist/TsdbTab-7F4mRKDo.js.map +0 -1
  484. package/dist/TsdbTab-DVF6n9mq.cjs +0 -2
  485. package/dist/TsdbTab-DVF6n9mq.cjs.map +0 -1
  486. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js +0 -30891
  487. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js.map +0 -1
  488. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs +0 -1485
  489. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs.map +0 -1
  490. package/dist/VWidget-CxnaMF0w.js.map +0 -1
  491. package/dist/VWidget-dEHSEvZx.cjs +0 -2
  492. package/dist/VWidget-dEHSEvZx.cjs.map +0 -1
  493. package/dist/ValueWidget-Bws1qOEI.cjs +0 -2
  494. package/dist/Widget-CB_BtOFw.cjs +0 -2
  495. package/dist/format-CJYjW-xx.js +0 -1252
  496. package/dist/format-CJYjW-xx.js.map +0 -1
  497. package/dist/format-DOZQNf-X.cjs +0 -2
  498. package/dist/format-DOZQNf-X.cjs.map +0 -1
  499. package/dist/getDefaultOptions-Cek5kGzE.cjs +0 -2
  500. package/dist/getDefaultOptions-xjgn1r-_.js +0 -8
  501. package/dist/index-B34azWgs.cjs +0 -7
  502. package/dist/index-B34azWgs.cjs.map +0 -1
  503. package/dist/index-CJcL4_a4.js.map +0 -1
  504. package/dist/purify.es-4pyphLiB.cjs +0 -3
  505. package/dist/purify.es-4pyphLiB.cjs.map +0 -1
  506. package/dist/purify.es-BPDBzHtc.js +0 -553
  507. package/dist/purify.es-BPDBzHtc.js.map +0 -1
  508. package/dist/settings-B0AhztTk.cjs +0 -2
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenC3TimePicker-Yl1jVi7p.cjs","sources":["../src/components/OpenC3TimePicker.vue"],"sourcesContent":["<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-text-field\n v-model=\"inputValue\"\n :label=\"label\"\n :rules=\"computedRules\"\n :hide-details=\"hideDetails\"\n :variant=\"variant\"\n :density=\"density\"\n :style=\"computedStyle\"\n :class=\"textFieldClass\"\n :disabled=\"disabled\"\n :data-test=\"dataTest\"\n @blur=\"handleBlur\"\n @keydown.enter=\"handleBlur\"\n >\n <template #prepend-inner>\n <v-menu\n v-model=\"menu\"\n :close-on-content-click=\"false\"\n transition=\"scale-transition\"\n offset=\"16\"\n >\n <template #activator=\"{ props: menuProps }\">\n <v-icon v-bind=\"menuProps\" class=\"cursor-pointer\">\n mdi-clock-outline\n </v-icon>\n </template>\n <v-card class=\"time-picker-card\">\n <v-time-picker\n v-model=\"tempTime\"\n :format=\"timeFormat\"\n scrollable\n use-seconds\n hide-header\n />\n <v-card-actions>\n <v-spacer />\n <v-btn variant=\"text\" @click=\"cancel\">Cancel</v-btn>\n <v-btn color=\"primary\" variant=\"text\" @click=\"save\">OK</v-btn>\n </v-card-actions>\n </v-card>\n </v-menu>\n </template>\n </v-text-field>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n inheritAttrs: false,\n props: {\n modelValue: {\n type: String,\n default: '',\n },\n label: {\n type: String,\n default: 'Time',\n },\n rules: {\n type: Array,\n default: () => [],\n },\n hideDetails: {\n type: [Boolean, String],\n default: false,\n },\n variant: {\n type: String,\n default: 'filled',\n },\n density: {\n type: String,\n default: 'default',\n },\n style: {\n type: [String, Object],\n default: '',\n },\n textFieldClass: {\n type: String,\n default: '',\n },\n dataTest: {\n type: String,\n default: '',\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n menu: false,\n timeFormat: 'ampm',\n tempTime: null,\n inputValue: '',\n }\n },\n computed: {\n computedStyle() {\n if (typeof this.style === 'string') {\n return this.style\n }\n return this.style\n },\n computedRules() {\n // Wrap the passed rules to validate against the 24-hour modelValue\n return this.rules.map((rule) => {\n return () => {\n return rule(this.modelValue)\n }\n })\n },\n },\n watch: {\n modelValue: {\n immediate: true,\n handler(newVal) {\n // Update input display when modelValue changes externally\n if (!this.menu) {\n this.inputValue = this.formatForDisplay(newVal)\n }\n },\n },\n inputValue(newVal) {\n // Immediately emit empty value when input is cleared for instant validation\n if (newVal === '' && this.modelValue !== '') {\n this.$emit('update:modelValue', '')\n }\n },\n menu(newVal) {\n if (newVal) {\n // When menu opens, initialize tempTime with current value\n // Normalize to HH:mm:ss format (v-time-picker doesn't handle milliseconds)\n this.tempTime = this.normalizeTime(this.modelValue) || '00:00:00'\n }\n },\n tempTime(newVal) {\n // Update input display in real-time when using the time picker\n if (this.menu && newVal) {\n this.inputValue = this.formatForDisplay(newVal)\n }\n },\n },\n async created() {\n // Capture current display before async call\n const previousDisplay = this.inputValue\n await this.loadTimeFormat()\n // Only update display if it hasn't been changed externally during the await\n if (this.inputValue === previousDisplay) {\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n methods: {\n async loadTimeFormat() {\n try {\n const api = new OpenC3Api()\n const response = await api.get_setting('time_format')\n if (response) {\n this.timeFormat = response\n }\n } catch (error) {\n // Default to 'ampm' if setting is not found\n this.timeFormat = 'ampm'\n }\n },\n formatForDisplay(time24) {\n if (!time24) return ''\n if (this.timeFormat === '24hr') {\n return time24\n }\n return this.convertTo12Hour(time24)\n },\n handleBlur() {\n // Parse input and update modelValue\n const parsed = this.parseTimeInput(this.inputValue)\n if (parsed) {\n this.$emit('update:modelValue', parsed)\n this.inputValue = this.formatForDisplay(parsed)\n } else if (this.inputValue === '') {\n this.$emit('update:modelValue', '')\n } else {\n // Invalid input, revert to current modelValue display\n this.inputValue = this.formatForDisplay(this.modelValue)\n }\n },\n parseTimeInput(input) {\n if (!input || input.trim() === '') return ''\n\n // Try to parse 24-hour format: HH:mm:ss or HH:mm\n const time24Match = input.match(/^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?$/)\n if (time24Match) {\n const hours = Number.parseInt(time24Match[1], 10)\n const minutes = Number.parseInt(time24Match[2], 10)\n const seconds = time24Match[3] ? Number.parseInt(time24Match[3], 10) : 0\n if (\n hours >= 0 &&\n hours <= 23 &&\n minutes >= 0 &&\n minutes <= 59 &&\n seconds >= 0 &&\n seconds <= 59\n ) {\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n }\n }\n\n // Try to parse 12-hour format: HH:mm:ss AM/PM or HH:mm AM/PM\n const time12Match = input.match(\n /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM|am|pm)$/i,\n )\n if (time12Match) {\n let hours = Number.parseInt(time12Match[1], 10)\n const minutes = Number.parseInt(time12Match[2], 10)\n const seconds = time12Match[3] ? Number.parseInt(time12Match[3], 10) : 0\n const period = time12Match[4].toUpperCase()\n\n if (\n hours >= 1 &&\n hours <= 12 &&\n minutes >= 0 &&\n minutes <= 59 &&\n seconds >= 0 &&\n seconds <= 59\n ) {\n // Convert to 24-hour format\n if (period === 'AM') {\n if (hours === 12) hours = 0\n } else {\n if (hours !== 12) hours += 12\n }\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n }\n }\n\n return null // Invalid format\n },\n save() {\n this.$emit('update:modelValue', this.tempTime)\n this.inputValue = this.formatForDisplay(this.tempTime)\n this.menu = false\n },\n cancel() {\n this.tempTime = this.normalizeTime(this.modelValue) || '00:00:00'\n this.menu = false\n },\n // Normalize time to HH:mm:ss format (strips milliseconds if present)\n normalizeTime(time) {\n if (!time) return ''\n const parts = time.split(':')\n if (parts.length < 2) return time\n const hours = Number.parseInt(parts[0], 10)\n const minutes = Number.parseInt(parts[1], 10)\n // Strip milliseconds from seconds (e.g., \"45.123\" -> 45)\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0\n if (\n Number.isNaN(hours) ||\n Number.isNaN(minutes) ||\n Number.isNaN(seconds)\n ) {\n return ''\n }\n return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`\n },\n convertTo12Hour(time24) {\n if (!time24) return ''\n const parts = time24.split(':')\n if (parts.length < 2) return time24\n let hours = Number.parseInt(parts[0], 10)\n const minutes = Number.parseInt(parts[1], 10)\n // Strip milliseconds from seconds (e.g., \"45.123\" -> 45)\n const seconds = parts.length > 2 ? Number.parseInt(parts[2], 10) : 0\n // Validate all parts are valid numbers\n if (\n Number.isNaN(hours) ||\n Number.isNaN(minutes) ||\n Number.isNaN(seconds)\n ) {\n return time24 // Return original if parsing fails\n }\n const ampm = hours >= 12 ? 'PM' : 'AM'\n hours = hours % 12\n hours = hours ? hours : 12 // 0 should be 12\n const paddedHours = hours.toString().padStart(2, '0')\n const paddedMinutes = minutes.toString().padStart(2, '0')\n const paddedSeconds = seconds.toString().padStart(2, '0')\n return `${paddedHours}:${paddedMinutes}:${paddedSeconds} ${ampm}`\n },\n },\n}\n</script>\n\n<style scoped>\n.time-picker-card {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker) {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker-clock__container) {\n background-color: var(--color-background-surface-default);\n}\n.time-picker-card :deep(.v-time-picker-clock) {\n background-color: var(--color-background-base-default);\n}\n.time-picker-card :deep(.v-picker__header) {\n background-color: var(--color-background-surface-header);\n}\n.time-picker-card :deep(.v-picker-title) {\n background-color: var(--color-background-surface-header);\n}\n.cursor-pointer {\n cursor: pointer;\n}\n</style>\n"],"names":["_sfc_main","rule","newVal","previousDisplay","response","OpenC3Api","time24","parsed","input","time24Match","hours","minutes","seconds","time12Match","period","time","parts","ampm","paddedHours","paddedMinutes","paddedSeconds","_createBlock","_component_v_text_field","$data","$event","$props","$options","_createVNode","_component_v_menu","_withCtx","menuProps","_component_v_icon","_mergeProps","_cache","_component_v_card","_component_v_time_picker","_component_v_card_actions","_component_v_spacer","_component_v_btn"],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- "use strict";const p=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs"),e=require("vue"),C=require("./CustomIcon-8F08upeg.cjs"),D=require("./fileIcon-BduOQcTc.cjs"),V=require("./TopBar-Ctzx7o2k.cjs");class k{constructor(){p.Fr.get("/openc3-api/autocomplete/data/screen").then(n=>{this.autocompleteData=n.data}),this.api=new p.yi}async getCompletions(n,i,l,o,s){if(!this.autocompleteData)return s(null,[]);let u=i.getLine(l.row).slice(0,l.column).trimStart().split(/ (?![^<]*>)/),c=this.autocompleteData;u.length>1&&(c=c.find(y=>y.caption===u[0]));let v={},x=!0;if(c&&c.params){c.params.length==u.length-1&&(x=!1);let y=c.params[u.length-2];if(y["Target name"])c=(await this.api.get_target_names()).reduce((r,f)=>(r[f]=1,r),{});else if(y["Packet name"]){let d=u[u.length-2];c=(await this.api.get_all_tlm(d)).reduce((f,h)=>(f[h.packet_name]=h.description,f),{}),c.LATEST="LATEST values from all packets"}else if(y["Item name"]){let d=u[u.length-3],r=u[u.length-2];if(r==="LATEST"){let f=await this.api.get_all_tlm_item_names(d);c={},f.forEach(h=>{c[h]=`LATEST ${h}`})}else c=(await this.api.get_tlm(d,r)).items.reduce((h,g)=>(h[g.name]=g.description,h),{})}else c=y;v=Object.keys(c||{}).map(d=>{let r={value:d+(x?" ":""),command:x&&"startAutocomplete"};return typeof c[d]=="string"&&(r.meta=c[d]),r})}else v=c;s(null,v)}}const I={props:{modelValue:{type:String,default:""},keywords:{type:Array,default:()=>[]},height:{type:String,default:"45vh"},filename:{type:String,default:"screen.txt"}},emits:["update:modelValue"],data(){return{editor:null,file:null,loadedKeywords:[],docsKeyword:"",contextMenu:!1,menuX:0,menuY:0}},computed:{effectiveKeywords(){return this.keywords.length>0?this.keywords:this.loadedKeywords}},watch:{modelValue(t){this.editor&&this.editor.getValue()!==t&&(this.editor.setValue(t),this.editor.clearSelection())},effectiveKeywords(){if(this.editor){const t=this.buildScreenMode();this.editor.session.setMode(new t)}}},created(){this.keywords.length===0&&this.loadKeywords()},mounted(){this.initEditor()},beforeUnmount(){this.editor&&(this.editor.destroy(),this.editor.container.remove())},methods:{async loadKeywords(){try{const t=await p.Fr.get("/openc3-api/autocomplete/keywords/screen");this.loadedKeywords=t.data}catch(t){console.error("Error loading screen keywords:",t)}},initEditor(){this.editor=p.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");const t=this.buildScreenMode();this.editor.session.setMode(new t),this.editor.session.setTabSize(2),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setOption("enableBasicAutocompletion",!0),this.editor.setOption("enableLiveAutocompletion",!0),this.editor.completers=[new k],this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.modelValue),this.editor.clearSelection(),V.AceEditorUtils.applyVimModeIfEnabled(this.editor),this.editor.focus(),this.editor.session.on("change",()=>{this.$emit("update:modelValue",this.editor.getValue())})},getValue(){return this.editor?this.editor.getValue():this.modelValue},buildScreenMode(){let t=p.aceExports.require("ace/lib/oop"),n=p.aceExports.require("ace/mode/text_highlight_rules").TextHighlightRules,i=this.effectiveKeywords.join("|"),l=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant.numeric",regex:"\\b\\d+(?:\\.\\d+)?\\b"},{token:"keyword",regex:i?new RegExp(`^\\s*(${i})\\b`):/(?!)/}]},this.normalizeRules()};t.inherits(l,n);let o=function(){this.HighlightRules=l},s=p.aceExports.require("ace/mode/text").Mode;return t.inherits(o,s),(function(){this.$id="ace/mode/openc3"}).call(o.prototype),o},toggleVimMode(){V.AceEditorUtils.toggleVimMode(this.editor)},showContextMenu(t){this.menuX=t.pageX,this.menuY=t.pageY;let n=this.editor.getCursorPosition(),i=this.editor.session.getTokenAt(n.row,n.column);if(i){let l=i.value.trim();l.includes(" ")?this.docsKeyword=l.split(" ")[0]:this.docsKeyword=l,this.contextMenu=!0}},openDocumentation(){window.open(`${window.location.origin}/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,"_blank")},downloadContent(){const t=new Blob([this.editor.getValue()],{type:"text/plain"}),n=document.createElement("a");n.href=URL.createObjectURL(t),n.setAttribute("download",this.filename),n.click()},loadFile(){const t=new FileReader;t.readAsText(this.file);const n=this;t.onload=function(){n.editor.setValue(t.result),n.editor.clearSelection(),n.file=null}}}},B={class:"screen-editor-container"};function A(t,n,i,l,o,s){const a=e.resolveComponent("v-btn"),m=e.resolveComponent("v-file-input"),u=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-row"),v=e.resolveComponent("v-list-item-title"),x=e.resolveComponent("v-list-item"),y=e.resolveComponent("v-divider"),d=e.resolveComponent("v-list"),r=e.resolveComponent("v-menu");return e.openBlock(),e.createElementBlock("div",B,[e.createVNode(c,{"no-gutters":"",align:"center",class:"mb-2"},{default:e.withCtx(()=>[e.createVNode(a,{disabled:!o.file,color:"primary",size:"small",class:"mr-3","data-test":"screen-editor-load",onClick:s.loadFile},{default:e.withCtx(()=>[...n[3]||(n[3]=[e.createTextVNode(" Load ",-1)])]),_:1},8,["disabled","onClick"]),e.createVNode(m,{modelValue:o.file,"onUpdate:modelValue":n[0]||(n[0]=f=>o.file=f),"truncate-length":"15",accept:".txt",label:"Click to select .txt screen file.",density:"compact","hide-details":"",style:{"max-width":"300px"}},null,8,["modelValue"]),e.createVNode(u),e.createVNode(a,{icon:"mdi-download",variant:"text",density:"compact",title:"Download","data-test":"download-screen-icon",onClick:s.downloadContent},null,8,["onClick"])]),_:1}),e.createVNode(c,{"no-gutters":"",class:"mb-2"},{default:e.withCtx(()=>[e.createElementVNode("pre",{ref:"editor",class:"screen-editor",style:e.normalizeStyle({height:i.height,width:"100%"}),onContextmenu:n[1]||(n[1]=e.withModifiers((...f)=>s.showContextMenu&&s.showContextMenu(...f),["prevent"]))},null,36),e.createVNode(r,{modelValue:o.contextMenu,"onUpdate:modelValue":n[2]||(n[2]=f=>o.contextMenu=f),target:[o.menuX,o.menuY]},{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[e.createVNode(x,{link:"",onClick:s.openDocumentation},{default:e.withCtx(()=>[e.createVNode(v,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.docsKeyword)+" documentation ",1)]),_:1})]),_:1},8,["onClick"]),e.createVNode(y),e.createVNode(x,{title:"Toggle Vim mode","prepend-icon":"extras:vim",onClick:s.toggleVimMode},null,8,["onClick"])]),_:1})]),_:1},8,["modelValue","target"])]),_:1}),e.createVNode(c,{"no-gutters":""},{default:e.withCtx(()=>[...n[4]||(n[4]=[e.createElementVNode("span",{class:"text-caption text-grey"}," Ctrl-space brings up autocomplete. Right click keywords for documentation. ",-1)])]),_:1})])}const N=C._export_sfc(I,[["render",A],["__scopeId","data-v-f2442c42"]]),O={components:{ScreenEditor:N},props:{modelValue:Boolean,target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},errors:{type:Array,default:()=>[]}},emits:["cancel","delete","save","update:modelValue"],data(){return{editorContent:this.definition}},computed:{editErrors:function(){if(this.editorContent==="")return["Input can not be blank."];if(this.errors.length!==0){let t=new Set,n=[];const i=this.errors.toSorted((l,o)=>l.lineNumber-o.lineNumber);for(const l of i){let o=`At ${l.lineNumber}: (${l.line}) ${l.message}.`;l.usage&&(o+=` Usage: ${l.usage}`),n.push(o),t.add(l.message)}return n}return[]},show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},watch:{definition(t){this.editorContent=t}},methods:{deleteScreen:function(){this.$dialog.confirm("Are you sure you want to delete this screen?!",{okText:"Delete",cancelText:"Cancel"}).then(t=>{this.$emit("delete")})}}},F=["textContent"];function M(t,n,i,l,o,s){const a=e.resolveComponent("v-btn"),m=e.resolveComponent("v-spacer"),u=e.resolveComponent("v-toolbar"),c=e.resolveComponent("screen-editor"),v=e.resolveComponent("v-row"),x=e.resolveComponent("v-card-text"),y=e.resolveComponent("v-card"),d=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(d,{modelValue:s.show,"onUpdate:modelValue":n[3]||(n[3]=r=>s.show=r),persistent:"",width:"75vw",onKeydown:n[4]||(n[4]=e.withKeys(r=>t.$emit("cancel"),["esc"]))},{default:e.withCtx(()=>[e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(u,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a,{class:"mx-2",icon:"mdi-delete",variant:"text",density:"compact","data-test":"delete-screen-icon",onClick:s.deleteScreen},null,8,["onClick"]),e.createVNode(m),e.createElementVNode("span",null," Edit Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(m)]),_:1}),e.createVNode(x,{style:{"max-height":"90vh"}},{default:e.withCtx(()=>[e.createVNode(c,{ref:"screenEditor",modelValue:o.editorContent,"onUpdate:modelValue":n[0]||(n[0]=r=>o.editorContent=r),keywords:i.keywords,filename:`${i.screen.toLowerCase()}.txt`,height:"45vh"},null,8,["modelValue","keywords","filename"]),e.createVNode(v,{class:"ma-3",style:{"max-height":"120px","overflow-y":"auto"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.editErrors,(r,f)=>(e.openBlock(),e.createElementBlock("div",{key:f},[e.createElementVNode("span",{class:"text-red",textContent:e.toDisplayString(r)},null,8,F)]))),128))]),_:1}),e.createVNode(v,{class:"mt-3"},{default:e.withCtx(()=>[e.createVNode(m),e.createVNode(a,{class:"mx-2",variant:"outlined","data-test":"edit-screen-cancel",onClick:n[1]||(n[1]=r=>t.$emit("cancel"))},{default:e.withCtx(()=>[...n[5]||(n[5]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(a,{class:"mx-2",color:"primary","data-test":"edit-screen-save",onClick:n[2]||(n[2]=r=>t.$emit("save",o.editorContent))},{default:e.withCtx(()=>[...n[6]||(n[6]=[e.createTextVNode(" Save ",-1)])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const S=C._export_sfc(O,[["render",M]]),T=t=>p.Fr.get(`/openc3-api/autocomplete/keywords/${t}`),R=t=>p.Fr.get(`/openc3-api/autocomplete/data/${t}`),z=(t,n)=>t.reduce((i,l)=>{const o=n(l);return i[o]?i[o].push(l):i[o]=[l],i},{}),U=t=>{const n="(^|[{\\(\\s])",i=`[\\s\\(]f?['"]`,l="(\\S+\\s?){0,3}";return new RegExp(`${n}${t}${i}${l}$`)};class E{constructor(n,i=()=>{},l=()=>{}){this.keywordExpressions=[],this.autocompleteData=[],T(n).then(o=>{this.keywordExpressions=o.data.map(U),l()}),R(n).then(o=>{this.autocompleteData=o.data,i()})}getCompletions(n,i,l,o,s){let a=[];const m=i.doc.$lines[l.row].slice(0,l.column);this.keywordExpressions.some(u=>m.match(u))&&(a=this.autocompleteData),s(null,[...a])}}class L extends E{constructor(){super("cmd")}}class P extends E{constructor(){super("tlm",()=>{this.groupedPacketData=this.autocompleteData.reduce((n,i)=>{const l=i.caption.match(/\S+\s\S+/)[0],o=i.snippet.replace(`${l} `,""),s={caption:o,snippet:o,meta:"item"};return n[l]?n[l].push(s):n[l]=[s],n},{}),this.packets=Object.keys(this.groupedPacketData).map(n=>({caption:n,snippet:n,meta:"packet"}))})}getCompletions(n,i,l,o,s){let a=[];const m=i.doc.$lines[l.row].slice(0,l.column);if(this.keywordExpressions.some(u=>m.match(u))){const u=Object.keys(this.groupedPacketData).find(c=>m.includes(c));u?a=this.groupedPacketData[u]:a=this.packets}s(null,a)}}const W={props:{modelValue:Boolean},emits:["update:modelValue"],data(){return{alert:"",alertType:"success",showAlert:!1,search:"",key:"",keyValue:"",environment:[],headers:[{text:"Key",value:"key"},{text:"Value",value:"value"},{text:"Actions",value:"actions",align:"end",sortable:!1}]}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},mounted(){this.update()},methods:{alertHandler:function(t){this.alert=t.text,this.alertType=t.type,this.showAlert=!0},update:function(){p.Fr.get("/openc3-api/environment").then(t=>{this.environment=t.data}).catch(t=>{})},addEnvironment:function(){p.Fr.post("/openc3-api/environment",{data:{key:this.key.toUpperCase(),value:this.keyValue}}).then(t=>{`${t.data.name}`,this.update()}).catch(t=>{const n={text:`Failed to add environment variable: ${t}`,type:"error"};this.alertHandler(n)}),this.key="",this.keyValue=""},deleteEnvironment:function(t){this.$dialog.confirm(`Are you sure you want to delete: ${t.key}=${t.value}`,{okText:"Delete",cancelText:"Cancel"}).then(n=>p.Fr.delete(`/openc3-api/environment/${t.name}`)).then(n=>{const i={text:`Removed environment variable: ${t.name}`,type:"success"};this.alertHandler(i),this.update()}).catch(n=>{const i={text:`Failed to delete environment: ${n}`,type:"error"};this.alertHandler(i)})}}},$={class:"pa-3"};function K(t,n,i,l,o,s){const a=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-toolbar"),u=e.resolveComponent("v-text-field"),c=e.resolveComponent("v-row"),v=e.resolveComponent("v-btn"),x=e.resolveComponent("v-data-table"),y=e.resolveComponent("v-col"),d=e.resolveComponent("v-card-text"),r=e.resolveComponent("v-card"),f=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(f,{modelValue:s.show,"onUpdate:modelValue":n[4]||(n[4]=h=>s.show=h),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createElementVNode("form",{onSubmit:n[3]||(n[3]=e.withModifiers((...h)=>s.addEnvironment&&s.addEnvironment(...h),["prevent"]))},[e.createVNode(m,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),n[5]||(n[5]=e.createElementVNode("span",null,"Global Environment Variables",-1)),e.createVNode(a)]),_:1}),e.createVNode(d,null,{default:e.withCtx(()=>[e.createElementVNode("div",$,[e.createVNode(c,{dense:"",class:"mb-2"},{default:e.withCtx(()=>[e.createVNode(u,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=h=>o.search=h),label:"search",type:"text","data-test":"search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","clear-icon":"mdi-close-circle-outline",autofocus:"","single-line":"","hide-details":""},null,8,["modelValue"])]),_:1}),e.createVNode(x,{"item-key":"name","hide-default-header":"","data-test":"env-table",search:o.search,headers:o.headers,items:o.environment,"items-per-page":5,"items-per-page-options":[5]},{"item.actions":e.withCtx(({item:h})=>[e.createVNode(v,{icon:"mdi-delete",variant:"text",class:"mt-1","data-test":"item-delete","aria-label":"Delete Environment Variable",onClick:g=>s.deleteEnvironment(h)},null,8,["onClick"])]),_:1},8,["search","headers","items"]),e.createVNode(c,{dense:""},{default:e.withCtx(()=>[e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(u,{modelValue:o.key,"onUpdate:modelValue":n[1]||(n[1]=h=>o.key=h),label:"Key","data-test":"env-key"},null,8,["modelValue"])]),_:1}),e.createVNode(y,null,{default:e.withCtx(()=>[e.createVNode(u,{modelValue:o.keyValue,"onUpdate:modelValue":n[2]||(n[2]=h=>o.keyValue=h),label:"Value","data-test":"env-value"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(c,{dense:""},{default:e.withCtx(()=>[e.createVNode(v,{block:"",type:"submit",color:"primary","data-test":"add-env",disabled:!o.key||!o.keyValue,onClick:e.withModifiers(s.addEnvironment,["prevent"])},{default:e.withCtx(()=>[...n[6]||(n[6]=[e.createTextVNode(" Add ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const q=C._export_sfc(W,[["render",K]]),j={class:"tree-node"},H={class:"content-wrapper"},G=["tabindex"],X={key:1},Z={key:2,class:"children"},Y={__name:"TreeNode",props:{node:{type:Object,required:!0},search:{type:String,default:""},type:{type:String,default:"open"}},emits:["nodeToggled","request","delete"],setup(t,{emit:n}){const i=t,l=e.ref(i.node.isOpen||!1),o=e.computed(()=>{const d=r=>!i.search||r.path.toLowerCase().includes(i.search.toLowerCase())?!0:!!r.children?.some(d);return d(i.node)});e.watch(()=>i.node.isOpen,d=>{l.value=d}),e.watch(()=>i.search,d=>{d?i.node.isOpen||v():i.node.isOpen&&v()});const s=n,a=e.ref({show:!1,text:"",x:0,y:0}),m=(d,r)=>{if(!r||r.length<=50)return;const f=d.target.getBoundingClientRect(),h=f.left,g=f.top;a.value.text=r,a.value.x=h,a.value.y=g-40,a.value.show=!0},u=()=>{a.value.show=!1},c=d=>{d.children?(v(),i.type==="save"&&s("request",d)):s("request",d)},v=()=>{i.node.children&&(l.value=!l.value,i.node.isOpen=l.value,s("nodeToggled",i.node.id,l.value))},x=(d,r)=>{s("nodeToggled",d,r)},y=d=>{s("request",d)};return(d,r)=>{const f=e.resolveComponent("v-tooltip"),h=e.resolveComponent("v-icon"),g=e.resolveComponent("v-btn"),_=e.resolveComponent("tree-node",!0);return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(f,{modelValue:a.value.show,"onUpdate:modelValue":r[0]||(r[0]=w=>a.value.show=w),text:a.value.text,location:"top",style:e.normalizeStyle(`position: fixed; left: ${a.value.x}px; top: ${a.value.y}px; pointer-events: none;`)},null,8,["modelValue","text","style"]),e.createElementVNode("div",j,[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"node-content",onClick:r[4]||(r[4]=w=>c(t.node))},[e.createElementVNode("div",H,[t.node.children?(e.openBlock(),e.createBlock(h,{key:0,class:"toggle-icon",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.node.isOpen||t.search?"mdi-menu-down":"mdi-menu-right"),1)]),_:1})):e.createCommentVNode("",!0),t.node.children?(e.openBlock(),e.createBlock(h,{key:1,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[5]||(r[5]=[e.createTextVNode(e.toDisplayString("mdi-folder"),-1)])]),_:1})):t.node.title.includes(".rb")?(e.openBlock(),e.createBlock(h,{key:2,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[6]||(r[6]=[e.createTextVNode(e.toDisplayString("mdi-language-ruby"),-1)])]),_:1})):t.node.title.includes(".py")?(e.openBlock(),e.createBlock(h,{key:3,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[7]||(r[7]=[e.createTextVNode(e.toDisplayString("mdi-language-python"),-1)])]),_:1})):(e.openBlock(),e.createBlock(h,{key:4,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[...r[8]||(r[8]=[e.createTextVNode(e.toDisplayString("mdi-file-document"),-1)])]),_:1})),e.createElementVNode("span",{class:"text-h6",tabindex:t.node.children?-1:0,onKeyup:r[1]||(r[1]=e.withKeys(w=>c(t.node),["enter"])),onMouseenter:r[2]||(r[2]=w=>m(w,t.node.title)),onMouseleave:u},e.toDisplayString(t.node.title),41,G),t.node.title==="__TEMP__"?(e.openBlock(),e.createBlock(g,{key:5,icon:"mdi-delete",variant:"text",style:{"margin-left":"auto"},"aria-label":"Delete",onClick:r[3]||(r[3]=w=>s("delete"))})):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",X)),t.node.children&&(t.node.isOpen||t.search)?(e.openBlock(),e.createElementBlock("div",Z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.node.children,w=>(e.openBlock(),e.createBlock(_,{key:w.id,node:w,search:t.search,type:t.type,onNodeToggled:x,onRequest:y},null,8,["node","search","type"]))),128))])):e.createCommentVNode("",!0)])],64)}}},J=C._export_sfc(Y,[["__scopeId","data-v-83f7a088"]]),Q={components:{TreeNode:J},props:{type:{type:String,required:!0,validator:function(t){return["open","save"].indexOf(t)!==-1}},apiUrl:{type:String,default:null},requireTargetParentDir:Boolean,inputFilename:{type:String,default:null},modelValue:Boolean,customHelpText:{type:String,default:null}},emits:["update:modelValue","error","clear-temp","file","filename"],data(){return{tree:[],items:[],search:null,selectedFile:null,disableButtons:!0,targets:[],targetsRetrieved:[]}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},title:function(){return this.type==="open"?"File Open":"File Save As..."},submit:function(){return this.type==="open"?"OPEN":"SAVE"},helpText:function(){return this.customHelpText?this.customHelpText:this.type==="open"?"Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.":"Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results."},error:function(){if(this.selectedFile===""||this.selectedFile===null)return"No file selected must select a file";if(!this.selectedFile.match(this.validFilenameRegex)||this.selectedFile.match(/\.\.|\/\/|\.\/|\/\./)){let t=`${this.selectedFile} is not a valid filename. Must `;return this.requireTargetParentDir&&(t+="be in a target directory and "),t+=`only contain alphanumeric characters (including !-_.*) and a valid extension.
2
-
3
- For example: TGT1/procedures/test.py or TGT2/lib/inst.rb`,t}return this.type==="save"&&this.selectedFile.match(/\*$/)?`${this.selectedFile} is not a valid filename. Must not end in '*'.`:null},validFilenameRegex:function(){const t="0-9a-zA-Z";let i=`[${`${t}\\/\\!\\-\\_\\.\\*\\'\\(\\)`}]+\\.[${t}]+`;return this.requireTargetParentDir&&(i=`\\/?${`(${this.targets.join("|")})`}\\/${i}`),new RegExp(i)}},created(){p.Fr.get("/openc3-api/targets").then(t=>{this.targets=t.data,this.targets.push("__TEMP__");const n=this.targets.map(i=>(this.items.push({id:i,disabled:!0,title:i,children:[],path:i}),this.loadFiles(i)));Promise.all(n).then(()=>{this.disableButtons=!1})})},methods:{calcIcon:function(t){return D.fileIcon(t)},loadFiles:function(t){return p.Fr.get(this.apiUrl,{params:{target:t}}).then(n=>{if(n.data.length===0){this.items=this.items.filter(l=>l.id!==t);return}for(let l of n.data.sort())this.filepath=l,this.insertFile(this.items,2,l);this.inputFilename&&(this.selectedFile=this.inputFilename);const i=this.items.findIndex(l=>l.id===t);i!==-1&&(this.items[i].disabled=!1)}).catch(n=>{this.$emit("error",`Failed to connect to OpenC3. ${n}`)})},clear:function(){this.show=!1,this.overwrite=!1,this.disableButtons=!1},activeFile:function(t){t.length===0?this.selectedFile=null:(this.selectedFile=this.findItem(this.items,t.id),setTimeout(()=>{this.$refs.submitBtn.$el.focus()},100))},findItem:function(t,n){for(let i of t){if(i.id===n)return i.path;if(i.children){const l=this.findItem(i.children,n);if(l)return l}}return null},exists:function(t,n){let i=!1;for(let l of t){if(l.path===n||l.path.length>1&&l.path[l.path.length-1]==="*"&&l.path.slice(0,l.path.length-1)===n)return!0;l.children&&(i=i||this.exists(l.children,n))}return i},success:function(){this.selectedFile!==null&&this.error===null&&!this.disableButtons&&(this.type==="open"?this.openSuccess():this.saveSuccess())},deleteTemp:function(){this.$dialog.confirm("Are you sure you want to delete all the temporary files?",{okText:"Delete",cancelText:"Cancel"}).then(t=>p.Fr.delete("/script-api/scripts/temp_files")).then(t=>{this.$emit("clear-temp"),this.loadFiles("__TEMP__")}).catch(t=>{this.$notify.serious({title:"Error",body:`Failed to remove script temporary files due to ${t}`})})},openSuccess:function(){this.disableButtons=!0,p.Fr.get(`${this.apiUrl}/${this.selectedFile}`).then(t=>{const n={name:this.selectedFile,contents:t.data.contents};t.data.suites&&(n.suites=JSON.parse(t.data.suites)),t.data.error&&(n.error=t.data.error),t.data.success&&(n.success=t.data.success);const i=t.data.locked,l=t.data.breakpoints;this.$emit("file",{file:n,locked:i,breakpoints:l}),this.clear()}).catch(t=>{this.$emit("error",`Failed to open ${this.selectedFile}. ${t}`),this.clear()})},saveSuccess:function(){this.exists(this.items,this.selectedFile)?this.$dialog.confirm(`Are you sure you want to overwrite: ${this.selectedFile}`,{okText:"Overwrite",cancelText:"Cancel"}).then(n=>{this.$emit("filename",this.selectedFile),this.clear()}).catch(n=>{}):(this.$emit("filename",this.selectedFile),this.clear())},insertFile:function(t,n,i){let l=i.split("/");if(l.length===1){t.push({id:this.filepath,title:l[0],file:"ruby",path:this.filepath});return}const o=t.findIndex(s=>s.title===l[0]);o===-1?(t.push({id:this.filepath.split("/").slice(0,n-1).join("/"),title:l[0],children:[],path:this.filepath.split("/").slice(0,n-1).join("/")}),this.insertFile(t[t.length-1].children,n+1,l.slice(1).join("/"))):this.insertFile(t[o].children,n+1,l.slice(1).join("/"))}}},ee={class:"pa-3"},te={class:"overflow-y-auto tree-container"};function ne(t,n,i,l,o,s){const a=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-progress-linear"),u=e.resolveComponent("v-toolbar"),c=e.resolveComponent("v-row"),v=e.resolveComponent("v-text-field"),x=e.resolveComponent("tree-node"),y=e.resolveComponent("v-card-text"),d=e.resolveComponent("v-btn"),r=e.resolveComponent("v-card-actions"),f=e.resolveComponent("v-card"),h=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(h,{modelValue:s.show,"onUpdate:modelValue":n[4]||(n[4]=g=>s.show=g),persistent:"",width:"800",onKeydown:[n[5]||(n[5]=e.withKeys(g=>o.disableButtons?null:s.success(),["enter"])),n[6]||(n[6]=e.withKeys(g=>o.disableButtons?null:s.show=!1,["esc"]))]},{default:e.withCtx(()=>[e.createVNode(f,{class:"file-open-save-card d-flex flex-column"},{default:e.withCtx(()=>[e.createElementVNode("form",{class:"d-flex flex-column",onSubmit:n[3]||(n[3]=e.withModifiers((...g)=>s.success&&s.success(...g),["prevent"]))},[e.createVNode(u,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",null,e.toDisplayString(s.title),1),e.createVNode(a),e.createVNode(m,{active:o.disableButtons,indeterminate:"",location:"bottom",absolute:""},null,8,["active"])]),_:1}),e.createVNode(y,{class:"overflow-y-auto"},{default:e.withCtx(()=>[e.createElementVNode("div",ee,[e.createVNode(c,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.helpText),1)]),_:1}),e.createVNode(c,{dense:"",class:"mt-5"},{default:e.withCtx(()=>[e.createVNode(v,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=g=>o.search=g),flat:"",autofocus:"","hide-details":"",clearable:"",label:"Search","prepend-inner-icon":"mdi-magnify",density:"compact","data-test":"file-open-save-search"},null,8,["modelValue"])]),_:1}),e.createElementVNode("div",te,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.items,g=>(e.openBlock(),e.createBlock(x,{key:`${g.id}`,node:g,search:o.search,type:i.type,onRequest:s.activeFile,onDelete:s.deleteTemp},null,8,["node","search","type","onRequest","onDelete"]))),128))]),e.createVNode(c,{class:"my-2"},{default:e.withCtx(()=>[e.createVNode(v,{modelValue:o.selectedFile,"onUpdate:modelValue":n[1]||(n[1]=g=>o.selectedFile=g),"hide-details":"",label:"Filename","data-test":"file-open-save-filename",disabled:o.disableButtons||i.type==="open"},null,8,["modelValue","disabled"])]),_:1}),e.createVNode(c,{dense:""},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:"my-2 text-red overflow-y-auto error-container",style:{"white-space":"pre-line"}},e.toDisplayString(s.error),513),[[e.vShow,s.error]])]),_:1})])]),_:1}),e.createVNode(r,null,{default:e.withCtx(()=>[e.createVNode(a),e.createVNode(d,{variant:"outlined",class:"mx-2","data-test":"file-open-save-cancel-btn",disabled:o.disableButtons,onClick:n[2]||(n[2]=g=>s.show=!1)},{default:e.withCtx(()=>[...n[7]||(n[7]=[e.createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled"]),e.createVNode(d,{ref:"submitBtn",type:"submit",color:"primary",class:"mx-2","data-test":"file-open-save-submit-btn",disabled:o.disableButtons||!!s.error,onClick:e.withModifiers(s.success,["prevent"])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.submit),1)]),_:1},8,["disabled","onClick"])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const ie=C._export_sfc(Q,[["render",ne]]),b=20,oe={components:{EditScreenDialog:S},mixins:[p.WidgetComponents],props:{target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},initialFloated:{type:Boolean,default:!1},initialTop:{type:Number,default:0},initialLeft:{type:Number,default:0},initialZ:{type:Number,default:0},minZ:{type:Number,default:0},fixFloated:{type:Boolean,default:!1},count:{type:Number,default:0},showClose:{type:Boolean,default:!0},timeZone:{type:String,default:"local"},inline:{type:Boolean,default:!1},playbackMode:{type:String,default:"realtime"},playbackDateTime:{type:Date,default:null},frozen:{type:Boolean,default:!1},frozenValues:{type:Object,default:null}},emits:["close-screen","delete-screen","drag-screen","edit-screen","float-screen","min-max-screen","unfloat-screen"],data(){return{api:null,backup:"",currentDefinition:this.definition,editDialog:!1,expand:!0,configParser:null,currentLayout:null,layoutStack:[],namedWidgets:{},dynamicWidgets:[],width:null,height:null,staleTime:30,cacheTimeout:.1,globalSettings:[],substitute:!1,original_target_name:null,force_substitute:!1,pollingPeriod:1,errors:[],errorDialog:!1,screenKey:null,dragX:0,dragY:0,floated:this.initialFloated,top:this.initialTop,left:this.initialLeft,zIndex:this.initialZ,changeCounter:0,screenItems:[],actualScreenItems:[],screenValues:{},updateCounter:0,updater:null,screenId:p.lodashExports.uniqueId("openc3-screen_"),tlmAvailableTimeout:null}},computed:{error:function(){if(this.errorDialog&&this.errors.length>0){let t=new Set,n="";for(const i of this.errors){if(t.has(i.message))continue;let l=`${i.time}: (${i.type}) ${i.message}
4
- `;n+=l,t.add(i.message)}return n}return null},computedStyle(){let t={};const n=this.width||this.$refs.bar?.clientWidth;return this.floated&&(t.position="absolute",t.top=this.top+"px",t.left=this.left+"px",t.width=n+"px"),t}},watch:{count:{handler(t,n){this.currentDefinition=this.definition,this.rerender()}},playbackDateTime:{handler(t,n){this.playbackMode==="playback"&&t&&this.update()}},playbackMode:{handler(t,n){t==="realtime"?this.updateRefreshInterval():(clearInterval(this.updater),this.updater=null)}},frozen:{handler(t){t?this.updater&&(clearInterval(this.updater),this.updater=null):this.playbackMode==="realtime"&&this.updateRefreshInterval()}},frozenValues:{immediate:!0,handler(t){t&&this.frozen&&Object.assign(this.screenValues,t)}}},errorCaptured(t,n,i){return this.errors.length<b&&(t.usage?this.errors.push({type:"usage",message:t.message,usage:t.usage,line:t.line,lineNumber:t.lineNumber,time:new Date().getTime()}):this.errors.push({type:"error",message:t,time:new Date().getTime()})),!1},created(){this.api=new p.yi,this.configParser=new p._i,this.parseDefinition(),this.screenKey=Math.floor(Math.random()*1e6)},mounted(){this.playbackMode==="realtime"&&!this.frozen&&this.updateRefreshInterval(),this.frozen&&this.frozenValues&&this.$nextTick(()=>{Object.assign(this.screenValues,this.frozenValues)}),this.floated&&(this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex)},unmounted(){this.updater!=null&&(clearInterval(this.updater),this.updater=null),this.tlmAvailableTimeout!=null&&(clearTimeout(this.tlmAvailableTimeout),this.tlmAvailableTimeout=null)},methods:{open(t,n){this.$parent.showScreen(t,n)},close(t,n){this.$parent.closeScreenByName(t,n)},closeAll(){this.$parent.closeAll()},clearErrors:function(){this.errors=[]},updateRefreshInterval:function(){if(this.updater&&(clearInterval(this.updater),this.updater=null),this.pollingPeriod===0)return;let t=this.pollingPeriod*1e3;this.updater=setInterval(()=>{this.update()},t)},parseDefinition:function(){if(this.clearErrors(),this.screenItems=[],this.namedWidgets={},this.layoutStack=[],this.dynamicWidgets=[],this.layoutStack.push({type:"VerticalWidget",parameters:[],widgets:[]}),this.currentLayout=this.layoutStack[this.layoutStack.length-1],this.configParser.parse_string(this.currentDefinition,"",!1,!0,(t,n,i,l)=>{if(t)switch(t){case"SCREEN":{if(this.configParser.verify_num_parameters(3,4,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`),n[0].toUpperCase()==="AUTO")this.width=null;else if(Number.isFinite(Number.parseInt(n[0])))this.width=Number.parseInt(n[0]);else throw new p.yt(this.configParser,`SCREEN width must be a number or AUTO, got '${n[0]}'`,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`);if(n[1].toUpperCase()==="AUTO")this.height=null;else if(Number.isFinite(Number.parseInt(n[1])))this.height=Number.parseInt(n[1]);else throw new p.yt(this.configParser,`SCREEN height must be a number or AUTO, got '${n[1]}'`,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`);const o=Number.parseFloat(n[2]);if(Number.isNaN(o)||o<0||o>0&&o<.1)throw new p.yt(this.configParser,`SCREEN polling period must be a number 0 or >= 0.1, got '${n[2]}'`,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`);this.pollingPeriod=o;break}case"END":this.configParser.verify_num_parameters(0,0,`${t}`),this.layoutStack.pop(),this.currentLayout=this.layoutStack[this.layoutStack.length-1];break;case"STALE_TIME":if(this.configParser.verify_num_parameters(1,1,`${t} <Time (s)>`),this.staleTime=Number.parseInt(n[0]),Number.isNaN(this.staleTime))throw new p.yt(this.configParser,`SCREEN stale time must be a number, got '${n[0]}'`,`${t} <Time (s)>`);break;case"SUBSETTING":this.configParser.verify_num_parameters(3,null,`${t} <Index> <Widget Type> <Widget Settings...>`),n[1]==="RAW"&&(n[1]="RAW__"+n[2].toLowerCase());case"SETTING":{this.configParser.verify_num_parameters(2,null,`${t} <Widget Type> <Widget Settings...>`),n[0]==="RAW"&&(n[0]="RAW__"+n[1].toLowerCase()),(this.currentLayout.widgets[this.currentLayout.widgets.length-1]??this.currentLayout).settings.push(n);break}case"TOOLTIP":{this.configParser.verify_num_parameters(1,2,`${t} <Tooltip Text> <Delay (ms)>`);let o=600;if(n[1]!==void 0&&(o=Number.parseInt(n[1]),Number.isNaN(o)))throw new p.yt(this.configParser,`SCREEN tooltip delay must be a number, got '${n[1]}'`,`${t} <Tooltip Text> <Delay (ms)>`);(this.currentLayout.widgets[this.currentLayout.widgets.length-1]??this.currentLayout).settings.push(["TOOLTIP",n[0],o]);break}case"GLOBAL_SUBSETTING":this.configParser.verify_num_parameters(3,null,`${t} <Index> <Widget Type> <Widget Settings...>`),n[2]==="RAW"&&(n[2]="RAW__"+n[3].toLowerCase());case"GLOBAL_SETTING":this.configParser.verify_num_parameters(2,null,`${t} <Widget Type> <Widget Settings...>`),n[1]==="RAW"&&(n[1]="RAW__"+n[2].toLowerCase()),this.globalSettings.push(n);break;default:this.processWidget(t,n,i,l);break}}),typeof this.layoutStack[0]>"u"){let t=[],n=[];for(const i of this.dynamicWidgets)t.push(i.name),n.push(i.lineNumber);this.errors.length<b&&this.errors.push({type:"usage",message:`Unknown widget! Are these widgets: ${t.join(",")}?`,lineNumber:n.join(","),time:new Date().getTime()}),this.layoutStack[0]={type:"VerticalWidget",parameters:[],widgets:[]}}else this.applyGlobalSettings(this.layoutStack[0].widgets)},openEdit:function(){this.backup=this.currentDefinition.repeat(1),this.editDialog=!0},upScreen:function(){this.zIndex+=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},downScreen:function(){this.zIndex>this.minZ&&(this.zIndex-=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex]))},floatScreen:function(){if(this.floated)this.$refs.bar.onmousedown=null,this.$refs.bar.parentElement.parentElement.style="z-index: 0",this.floated=!1,this.$emit("unfloat-screen",[this.floated,this.top,this.left,this.zIndex]);else{let t=this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect(),n=this.$refs.bar.getBoundingClientRect();this.top=n.top-t.top-5,this.left=n.left-t.left-5,this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.floated=!0,this.$emit("float-screen",[this.floated,this.top,this.left,this.zIndex])}},dragMouseDown:function(t){t=t||window.event;const n=t.target;if(!n.closest(".v-toolbar"))return;const l=["INPUT","TEXTAREA","BUTTON","SELECT"],o=["button",".v-btn","input","textarea",".v-text-field",".v-select",".v-combobox",".v-autocomplete"];l.includes(n.tagName)||o.some(a=>n.closest(a))||(t.preventDefault(),this.dragX=t.clientX,this.dragY=t.clientY,document.onmouseup=this.closeDragElement,document.onmousemove=this.elementDrag)},elementDrag:function(t){t=t||window.event,t.preventDefault();let n=this.dragX-t.clientX,i=this.dragY-t.clientY;this.dragX=t.clientX,this.dragY=t.clientY,this.top=this.$refs.bar.offsetTop-i,this.left=this.$refs.bar.offsetLeft-n,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},closeDragElement:function(){document.onmouseup=null,document.onmousemove=null},rerender:function(){this.parseDefinition(),this.updateRefreshInterval(),this.screenKey=Math.floor(Math.random()*1e6),this.$nextTick(function(){this.clearErrors(),this.$emit("edit-screen")})},cancelEdit:function(){this.file=null,this.editDialog=!1,this.currentDefinition=this.backup,this.rerender()},saveEdit:function(t){this.editDialog=!1,this.currentDefinition=t,this.rerender(),this.$nextTick(function(){p.Fr.post("/openc3-api/screen/",{data:{scope:window.openc3Scope,target:this.target,screen:this.screen,text:this.currentDefinition}},0)})},deleteScreen:function(){this.editDialog=!1,p.Fr.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(t=>{this.$emit("delete-screen")})},minMaxTransition:function(){this.expand=!this.expand,this.$emit("min-max-screen")},processWidget:function(t,n,i,l){let o=null;t==="NAMED_WIDGET"&&(this.configParser.verify_num_parameters(2,null,`${t} <Widget Name> <Widget Type> <Widget Settings... (optional)>`),o=n[0].toUpperCase(),t=n[1].toUpperCase(),n=n.slice(2,n.length));const s=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()+"Widget";let a=[];if(a.push(["__SCREEN_ID__",this.screenId]),o!==null&&a.push(["NAMED_WIDGET",o]),t==="VERTICAL"||t==="VERTICALBOX"||t==="HORIZONTAL"||t==="HORIZONTALBOX"||t==="MATRIXBYCOLUMNS"||t==="TABBOOK"||t==="TABITEM"||t==="CANVAS"||t==="RADIOGROUP"||t==="SCROLLWINDOW"){const m={type:s,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,widgets:[]};this.layoutStack.push(m),this.currentLayout.widgets.push(m),this.currentLayout=m}else if(this.$options.components[s])this.currentLayout.widgets.push({type:s,target:this.target,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,line:i,lineNumber:l});else{let m={type:"DynamicWidget",target:this.target,parameters:n,settings:a,screenValues:this.screenValues,screenTimeZone:this.timeZone,name:s,line:i,lineNumber:l};this.currentLayout.widgets.push(m),this.dynamicWidgets.push(m)}},applyGlobalSettings:function(t){t.forEach(n=>{this.globalSettings.forEach(i=>{n.type.toLowerCase()===i[0].toLowerCase()+"widget"&&(n.settings.find(o=>o[0]===i[1])||n.settings.push(i.slice(1)))}),n.widgets&&this.applyGlobalSettings(n.widgets)})},update:function(){if(this.frozen)return;let t=this.playbackMode==="playback"?this.playbackDateTime:null;this.actualScreenItems.length!==0&&this.api.get_tlm_values(this.actualScreenItems,this.staleTime,this.cacheTimeout,t).then(n=>{n&&n.length>0&&(this.updateValues(n),this.errors=this.errors.filter(i=>!i.transient))}).catch(n=>{let i=JSON.stringify(n,null,2);this.errors.find(l=>l.message===i)||this.errors.length<b&&this.errors.push({type:"error",message:i,time:new Date().getTime(),transient:!0})})},updateValues:function(t){if(this.updateCounter+=1,t.length!=this.screenItems.length||t.length!=this.actualScreenItems.length)console.log(`get_tlm_values mismatch: data.length: ${t.length}, screenItems.length: ${this.screenItems.length}, actualScreenItems.length: ${this.actualScreenItems.length}`,JSON.stringify(t),JSON.stringify(this.screenItems),JSON.stringify(this.actualScreenItems));else for(let n=0;n<t.length;n++)t[n].push(this.updateCounter),this.screenValues[this.screenItems[n]]=t[n]},debouncedUpdateTlmAvailable:function(){this.frozen||(this.tlmAvailableTimeout!=null&&clearTimeout(this.tlmAvailableTimeout),this.tlmAvailableTimeout=setTimeout(()=>{this.api.get_tlm_available(this.screenItems).then(t=>{if(this.actualScreenItems=t,this.screenItems.length!=t.length)console.log("Error getting tlm available",this.screenItems,this.actualScreenItems);else for(let n=0;n<this.actualScreenItems.length;n++)if(this.actualScreenItems[n]===null){const i=this.screenItems[n].split("__"),l=this.currentDefinition.split(`
5
- `),o=l.findIndex(s=>s.includes(i[0])&&s.includes(i[1])&&s.includes(i[2]))+1;o>0?this.errors.push({type:"usage",message:`Null for ${i.join(" ")}! Does it exist?`,line:l[o-1],lineNumber:o,time:new Date().getTime()}):this.errors.push({type:"error",message:`Null for ${i.join(" ")}! Does it exist?`,time:new Date().getTime()})}}).catch(t=>{console.log("Error getting tlm available",t),this.actualScreenItems=this.screenItems}),this.tlmAvailableTimeout=null},100))},addItem:function(t){this.screenItems.push(t),this.frozen&&this.frozenValues&&this.frozenValues[t]?this.screenValues[t]=this.frozenValues[t]:this.screenValues[t]=[null,null,0],this.debouncedUpdateTlmAvailable()},deleteItem:function(t){let n=this.screenItems.indexOf(t);this.screenItems.splice(n,1),this.debouncedUpdateTlmAvailable()},getScreenValues:function(){return JSON.parse(JSON.stringify(this.screenValues))}}},le={ref:"screen",class:"pa-1",style:{position:"relative"}},se={key:1,class:"pa-1",style:{position:"relative"}};function re(t,n,i,l,o,s){const a=e.resolveComponent("v-btn"),m=e.resolveComponent("v-tooltip"),u=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-toolbar"),v=e.resolveComponent("v-overlay"),x=e.resolveComponent("vertical-widget"),y=e.resolveComponent("v-expand-transition"),d=e.resolveComponent("v-card"),r=e.resolveComponent("edit-screen-dialog"),f=e.resolveComponent("v-textarea"),h=e.resolveComponent("v-card-actions"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",{ref:"bar",style:e.normalizeStyle(s.computedStyle)},[i.inline?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(d,{key:0,"min-height":o.height,"min-width":o.width,style:{cursor:"default"}},{default:e.withCtx(()=>[e.createVNode(c,{height:"24",class:e.normalizeClass({"floated-toolbar":o.floated})},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[0]||(n[0]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),e.createVNode(a,{icon:"mdi-pencil",variant:"text",density:"compact","data-test":"edit-screen-icon","aria-label":"Edit Screen",onClick:s.openEdit},null,8,["onClick"]),i.fixFloated?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(m,{key:0,"open-delay":600,location:"top"},{activator:e.withCtx(({props:_})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(_)),[e.createVNode(a,{icon:o.floated?"mdi-balloon":"mdi-view-grid-outline",variant:"text",density:"compact","data-test":"float-screen-icon","aria-label":o.floated?"Unfloat Screen":"Float Screen",onClick:s.floatScreen},null,8,["icon","aria-label","onClick"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(o.floated?"Unfloat Screen":"Float Screen"),1)]),_:1})),o.floated?(e.openBlock(),e.createBlock(m,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:_})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(_)),[e.createVNode(a,{icon:"mdi-arrow-up",variant:"text",density:"compact","data-test":"up-screen-icon","aria-label":"Move Screen Up",onClick:s.upScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[6]||(n[6]=e.createElementVNode("span",null," Move Screen Up ",-1))]),_:1})):e.createCommentVNode("",!0),o.floated&&o.zIndex>i.minZ?(e.openBlock(),e.createBlock(m,{key:2,"open-delay":600,location:"top"},{activator:e.withCtx(({props:_})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(_)),[e.createVNode(a,{icon:"mdi-arrow-down",variant:"text",density:"compact","data-test":"down-screen-icon","aria-label":"Move Screen Down",onClick:s.downScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[7]||(n[7]=e.createElementVNode("span",null," Move Screen Down ",-1))]),_:1})):e.createCommentVNode("",!0),e.createVNode(u),e.createElementVNode("span",null,e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(u),o.expand?(e.openBlock(),e.createBlock(a,{key:3,icon:"mdi-window-minimize",variant:"text",density:"compact","data-test":"minimize-screen-icon","aria-label":"Minimize Screen",onClick:s.minMaxTransition},null,8,["onClick"])):(e.openBlock(),e.createBlock(a,{key:4,icon:"mdi-window-maximize",variant:"text",density:"compact","data-test":"maximize-screen-icon","aria-label":"Maximize Screen",onClick:s.minMaxTransition},null,8,["onClick"])),i.showClose?(e.openBlock(),e.createBlock(a,{key:5,icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-screen-icon","aria-label":"Close Screen",onClick:n[1]||(n[1]=_=>t.$emit("close-screen"))})):e.createCommentVNode("",!0)]),_:1},8,["class"]),o.editDialog?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(y,{key:0},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",le,[e.createVNode(v,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",contained:"","scroll-strategy":"none"},null,8,["model-value"]),(e.openBlock(),e.createBlock(x,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:s.addItem,onDeleteItem:s.deleteItem,onOpen:s.open,onClose:s.close,onCloseAll:s.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))],512),[[e.vShow,o.expand]])]),_:1}))]),_:1},8,["min-height","min-width"])),i.inline?(e.openBlock(),e.createElementBlock("div",se,[e.createVNode(v,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",contained:"","scroll-strategy":"none"},null,8,["model-value"]),e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[2]||(n[2]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),(e.openBlock(),e.createBlock(x,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:s.addItem,onDeleteItem:s.deleteItem,onOpen:s.open,onClose:s.close,onCloseAll:s.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))])):e.createCommentVNode("",!0),o.editDialog?(e.openBlock(),e.createBlock(r,{key:2,modelValue:o.editDialog,"onUpdate:modelValue":n[3]||(n[3]=_=>o.editDialog=_),target:i.target,screen:i.screen,definition:o.currentDefinition,keywords:i.keywords,errors:o.errors,onSave:s.saveEdit,onCancel:s.cancelEdit,onDelete:s.deleteScreen},null,8,["modelValue","target","screen","definition","keywords","errors","onSave","onCancel","onDelete"])):e.createCommentVNode("",!0),e.createVNode(g,{modelValue:o.errorDialog,"onUpdate:modelValue":n[5]||(n[5]=_=>o.errorDialog=_),width:"60vw"},{default:e.withCtx(()=>[e.createVNode(c,{height:"24"},{default:e.withCtx(()=>[e.createVNode(u),e.createElementVNode("span",null," Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen)+" Errors ",1),e.createVNode(u)]),_:1}),e.createVNode(d,null,{default:e.withCtx(()=>[e.createVNode(f,{class:"errors",readonly:"",rows:"13","model-value":s.error},null,8,["model-value"]),e.createVNode(h,{class:"pb-5"},{default:e.withCtx(()=>[e.createVNode(u),e.createVNode(a,{variant:"outlined",class:"mr-2",onClick:s.clearErrors},{default:e.withCtx(()=>[...n[8]||(n[8]=[e.createTextVNode(" Clear Errors ",-1)])]),_:1},8,["onClick"]),e.createVNode(a,{variant:"flat",class:"mr-2",onClick:n[4]||(n[4]=_=>o.errorDialog=!1)},{default:e.withCtx(()=>[...n[9]||(n[9]=[e.createTextVNode(" Close ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],4)}const ae=C._export_sfc(oe,[["render",re],["__scopeId","data-v-d702c86d"]]);exports.CmdCompleter=L;exports.EditScreenDialog=S;exports.EnvironmentDialog=q;exports.FileOpenSaveDialog=ie;exports.Openc3Screen=ae;exports.ScreenCompleter=k;exports.ScreenEditor=N;exports.TlmCompleter=P;exports.getKeywords=T;exports.groupBy=z;
6
- //# sourceMappingURL=Openc3Screen-D1RLlBgQ.cjs.map
@@ -1,2 +0,0 @@
1
- "use strict";const n=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs"),e=require("vue"),f=require("./CustomIcon-8F08upeg.cjs"),p={methods:{buildLanguageMode(o,t){let i=n.aceExports.require("ace/lib/oop"),a=Object.getOwnPropertyNames(n.yi.prototype).filter(s=>s!=="constructor").filter(s=>s!=="exec").concat(["check","check_raw","check_formatted","check_exception","check_tolerance","check_expression","wait","wait_tolerance","wait_expression","wait_check","wait_check_tolerance","wait_check_expression","wait_packet","wait_check_packet","disable_instrumentation","set_line_delay","get_line_delay","set_max_output","get_max_output"]),l=new RegExp(`(\\b${a.join("\\b|\\b")}\\b)`),r=function(){o.call(this);for(let s in this.$rules)this.$rules[s].unshift({regex:l,token:"support.function"})};i.inherits(r,o);let d=n.aceExports.require("ace/mode/matching_brace_outdent").MatchingBraceOutdent,c=n.aceExports.require("ace/mode/behaviour/cstyle").CstyleBehaviour;return[i,function(){this.HighlightRules=r,this.$outdent=new d,this.$behaviour=new c,this.foldingRules=new t,this.indentKeywords=this.foldingRules.indentKeywords}]},buildRubyMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/ruby_highlight_rules").RubyHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/ruby").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildPythonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/python_highlight_rules").PythonHighlightRules,n.aceExports.require("ace/mode/folding/pythonic").FoldMode);let i=n.aceExports.require("ace/mode/python").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildJsonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/json_highlight_rules").JsonHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/json").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildMarkdownMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/markdown_highlight_rules").MarkdownHighlightRules,n.aceExports.require("ace/mode/folding/markdown").FoldMode);let i=n.aceExports.require("ace/mode/markdown").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t}}},w={mixins:[p],props:{content:{type:String,required:!0},type:{type:String,default:null},name:{type:String,default:null},modelValue:Boolean,filename:{type:String,default:null}},emits:["update:modelValue"],data(){return{editor:null,mode:null}},computed:{show:{get(){return this.modelValue},set(o){this.$emit("update:modelValue",o)}},title:function(){return`${this.type}: ${this.name}`}},mounted(){this.editor=ace.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");let o=null;switch(this.filename?this.filename.split(".").pop():"txt"){case"json":const i=this.buildJsonMode();o=new i,this.editor.setOptions({useWorker:!1});break;case"py":case"pyi":const a=this.buildPythonMode();o=new a;break;case"md":const l=this.buildMarkdownMode();o=new l;break;default:const r=this.buildRubyMode();o=new r;break}this.editor.session.setMode(o),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.content),this.editor.clearSelection(),this.editor.focus(),this.editor.setReadOnly(!0)},beforeUnmount(){this.editor&&this.editor.destroy()},methods:{close:function(){this.show=!this.show},download:function(){const o=new Blob([this.editor.getValue()],{type:"text/plain"});let t=`${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`;this.filename&&(t=this.filename);const i=document.createElement("a");i.href=URL.createObjectURL(o),i.setAttribute("download",t),i.click()}}},b=["textContent"],y={class:"mx-2"},M={ref:"editor",class:"editor"};function x(o,t,i,a,l,r){const d=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-btn"),u=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-card-actions"),m=e.resolveComponent("v-card"),g=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(g,{modelValue:r.show,"onUpdate:modelValue":t[1]||(t[1]=h=>r.show=h),width:"85vw"},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(u,{height:"24"},{default:e.withCtx(()=>[e.createVNode(d),e.createElementVNode("span",{textContent:e.toDisplayString(r.title)},null,8,b),e.createVNode(d),e.createElementVNode("div",y,[e.createVNode(c,{icon:"mdi-download",variant:"text",density:"compact","data-test":"downloadIcon",onClick:r.download},null,8,["onClick"])])]),_:1}),e.createVNode(s,null,{default:e.withCtx(()=>[e.createElementVNode("pre",M,null,512)]),_:1}),e.createVNode(_,{class:"pr-6 pb-4 pt-0"},{default:e.withCtx(()=>[e.createVNode(d),e.createVNode(c,{variant:"flat",onClick:t[0]||(t[0]=h=>r.show=!r.show)},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const k=f._export_sfc(w,[["render",x],["__scopeId","data-v-a87eb5ef"]]);exports.AceEditorModes=p;exports.OutputDialog=k;
2
- //# sourceMappingURL=OutputDialog-ChPCaQAE.cjs.map
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs"),e=require("vue"),V=require("./CustomIcon-8F08upeg.cjs"),N=require("./timeFilters-CRNRsUsb.cjs");require("./store-CiS35N-w.cjs");require("single-spa");const y=require("./SimpleTextDialog-BJ50TbWh.cjs"),P=require("./index-3sXOEKCU.cjs"),D={components:{DownloadDialog:P.DownloadDialog,SimpleTextDialog:y.SimpleTextDialog},mixins:[N.TimeFilters],data(){return{showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",files:[],loadingPackage:!1,progress:0,gems:[],python:[],processes:{},timeZone:"local"}},created(){new c.yi().get_setting("time_zone").then(l=>{l&&(this.timeZone=l)}).catch(()=>{})},mounted(){this.update(),this.updateProcesses()},methods:{showOutput:function(l){this.processOutput=l.output,this.showProcessOutput=!0},update(){c.Fr.get("/openc3-api/packages").then(l=>{this.gems=l.data.ruby,this.python=l.data.python})},updateProcesses:function(){c.Fr.get("/openc3-api/process_status/package_?substr=true").then(l=>{this.processes=l.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},2500)})},selectFile(){this.progress=0,this.$refs.fileInput.click()},fileChange(l){const t=l.target.files;if(t.length>0){this.loadingPackage=!0;let g=this;const h=[...t].map(n=>{const a=new FormData;return a.append("package",n,n.name),c.Fr.post("/openc3-api/packages",{data:a,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(i){let s=Math.round(i.loaded*100/i.total);g.progress=s}})});Promise.all(h).then(n=>{this.$notify.normal({body:`Uploaded ${n.length} package${n.length>1?"s":""}`}),this.loadingPackage=!1,this.files=[],setTimeout(()=>{this.updateProcesses()},2500)}).catch(n=>{this.loadingPackage=!1})}},deletePackage(l){this.$dialog.confirm(`Are you sure you want to remove: ${l}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>c.Fr.delete(`/openc3-api/packages/${l}`)).then(t=>{this.$notify.normal({body:`Removed package ${l}`}),setTimeout(()=>{this.updateProcesses()},2500)}).catch(t=>{this.$notify.serious({body:`Failed to remove package ${l}`})})}}},b=["textContent"],T=["textContent"];function B(l,t,g,h,n,a){const i=e.resolveComponent("v-btn"),s=e.resolveComponent("v-col"),C=e.resolveComponent("rux-progress"),d=e.resolveComponent("v-row"),u=e.resolveComponent("v-list-item-title"),x=e.resolveComponent("v-list-item-subtitle"),v=e.resolveComponent("v-tooltip"),p=e.resolveComponent("v-list-item"),m=e.resolveComponent("v-divider"),_=e.resolveComponent("v-list"),w=e.resolveComponent("download-dialog"),k=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(d,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(i,{onClick:a.selectFile},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("Install Package",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...o)=>a.fileChange&&a.fileChange(...o))},null,544)]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(C,{value:n.progress},null,8,["value"])]),_:1})]),_:1}),Object.keys(n.processes).length>0?(e.openBlock(),e.createBlock(_,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(d,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode("Process List",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...t[5]||(t[5]=[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,o=>(e.openBlock(),e.createElementBlock("div",{key:o.name},[e.createVNode(p,null,e.createSlots({default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(o.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${o.process_type}: ${o.detail} - ${o.state}`)},null,10,b)]),_:2},1024),e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+l.formatNanoseconds(o.updated_at,n.timeZone))},null,8,T)]),_:2},1024)]),_:2},[o.state!=="Running"?{name:"append",fn:e.withCtx(()=>[e.createVNode(v,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:r})=>[e.createVNode(i,e.mergeProps({ref_for:!0},r,{icon:"mdi-eye",variant:"text","aria-label":"Show Output",onClick:f=>a.showOutput(o)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[6]||(t[6]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024)]),key:"0"}:void 0]),1024),e.createVNode(m)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,{class:"list","data-test":"packageList"},{default:e.withCtx(()=>[e.createVNode(d,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[7]||(t[7]=[e.createTextVNode("Ruby Gems",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.gems,(o,r)=>(e.openBlock(),e.createElementBlock("div",{key:r},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(i,{icon:"mdi-delete",variant:"text","aria-label":"Delete Ruby Gem",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128)),e.createVNode(d,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>[...t[8]||(t[8]=[e.createTextVNode("Python Packages",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.python,(o,r)=>(e.openBlock(),e.createElementBlock("div",{key:r},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(i,{icon:"mdi-delete",variant:"text","aria-label":"Delete Python Package",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128))]),_:1}),e.createVNode(w,{modelValue:n.showDownloadDialog,"onUpdate:modelValue":t[1]||(t[1]=o=>n.showDownloadDialog=o)},null,8,["modelValue"]),e.createVNode(k,{modelValue:n.showProcessOutput,"onUpdate:modelValue":t[2]||(t[2]=o=>n.showProcessOutput=o),title:"Process Output",text:n.processOutput},null,8,["modelValue","text"])])}const O=V._export_sfc(D,[["render",B],["__scopeId","data-v-e5f831d9"]]);exports.default=O;
2
- //# sourceMappingURL=PackagesTab-BgQsbXRo.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PluginsTab-BiiL622n.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 distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\nconst SETTING_NAME = 'store_url'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n author_extra: Object,\n description: String,\n keywords: Array,\n img_path: String, // Set for local plugins\n image_url: String, // Set for app store plugins\n licenses: Array,\n // rating: Number,\n // downloads: Number,\n homepage: String,\n repository: String,\n gem_url: String,\n minimum_cosmos_version: String,\n checksum: String,\n versions: Array,\n current_version_id: Number,\n access: String,\n entitled: Boolean,\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n imageContents: null,\n }\n },\n computed: {\n plugin: function () {\n return {\n id: this.id,\n name: this.name,\n title: this.title,\n // titleSlug: this.titleSlug,\n author: this.author,\n // authorSlug: this.authorSlug,\n author_extra: this.author_extra,\n description: this.description,\n keywords: this.keywords,\n img_path: this.img_path,\n image_url: this.image_url,\n licenses: this.licenses,\n // rating: this.rating,\n // downloads: this.downloads,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n minimum_cosmos_version: this.minimum_cosmos_version,\n checksum: this.checksum,\n versions: this.versions,\n current_version_id: this.current_version_id,\n access: this.access,\n entitled: this.entitled,\n }\n },\n imageContentsWithMimeType: function () {\n if (this.imageContents) {\n const magicNumbers = {\n 'image/bmp': [0x42, 0x4d],\n 'image/jpeg': [0xff, 0xd8, 0xff],\n 'image/png': [0x89, 0x50, 0x4e, 0x47],\n 'image/gif': [0x47, 0x49, 0x46, 0x38],\n 'image/webp': [0x52, 0x49, 0x46, 0x46],\n }\n const fileHead = new TextEncoder()\n .encode(globalThis.atob(this.imageContents.slice(0, 6))) // only atob as much as we need\n .slice(1) // second call to slice on the decoded data because base64 bytes aren't 1:1\n const found = Object.entries(magicNumbers).find(([_, magicNumber]) => {\n return magicNumber.every((byte, i) => byte === fileHead[i])\n })\n if (found) {\n const [mimeType] = found\n return `data:${mimeType};base64,${this.imageContents}`\n }\n }\n return undefined\n },\n _navigableStoreUrl: function () {\n return this._storeUrl.replace('host.docker.internal', 'localhost')\n },\n storeLink: function () {\n if (this.hasStoreListing && this._navigableStoreUrl) {\n return new URL(`/cosmos_plugins/${this.id}`, this._navigableStoreUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n hasDetails: function () {\n if (this.hasStoreListing) {\n return true\n }\n return !!this.title && !!this.description\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n accessTooltip: function () {\n if (this.entitled) {\n return null\n }\n if (localStorage.getItem('pluginStore.isApiKeySet') !== 'true') {\n return 'Please add your App Store API key using the settings cog icon.'\n }\n if (this.access === 'enterprise') {\n return 'A COSMOS Enterprise license is required for this plugin.'\n } else {\n return 'Please contact sales@openc3.com for access to this plugin.'\n }\n },\n },\n created: async function () {\n try {\n this._storeUrl =\n (await this._api.get_setting(SETTING_NAME)) || DEFAULT_STORE_URL\n } catch {\n this._storeUrl = DEFAULT_STORE_URL\n }\n if (this.img_path) {\n try {\n const params = new URLSearchParams({\n volume: 'OPENC3_GEMS_VOLUME',\n scope: globalThis.openc3Scope,\n })\n const { data } = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(this.img_path)}?${params}`,\n )\n this.imageContents = data.contents\n } catch {\n // Failed to get image, don't do anything\n }\n }\n },\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"versionTitle\" />\n <v-spacer />\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeLink\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n size=\"small\"\n variant=\"plain\"\n />\n </div>\n </template>\n <span> View at {{ formattedStoreLink }} </span>\n </v-tooltip>\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\n </v-toolbar>\n <v-card-subtitle\n class=\"d-flex align-center justify-space-between subtitle-with-version\"\n >\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <v-select\n v-if=\"hasVersions\"\n v-model=\"selectedVersionId\"\n :items=\"versionOptions\"\n item-title=\"title\"\n item-value=\"value\"\n label=\"Version\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n class=\"mt-1 version-select\"\n />\n </v-card-subtitle>\n <!--\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>\n <v-icon icon=\"mdi-cloud-download\" size=\"x-small\" />\n {{ downloads }} downloads\n </div>\n <v-spacer />\n <div class=\"d-flex align-center\">\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n </div>\n </v-card-subtitle>\n -->\n <v-card-text>\n <div class=\"plugin-image-backdrop\">\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n />\n <v-img v-else-if=\"versionImageUrl\" :src=\"versionImageUrl\" />\n </div>\n <div class=\"mt-3\" v-text=\"versionDescription\" />\n <div class=\"mt-3 text-caption font-italic\">\n Keywords:\n <template v-if=\"versionKeywords\">\n <v-chip\n v-for=\"keyword in versionKeywords\"\n :key=\"keyword\"\n variant=\"flat\"\n color=\"primary\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ keyword }}\n </v-chip>\n </template>\n <span v-else class=\"font-italic\"> none </span>\n </div>\n <div class=\"mt-3 text-caption font-italic\">\n Licenses:\n <v-chip\n v-for=\"license in versionLicenses\"\n :key=\"license\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ license }}\n </v-chip>\n </div>\n <div class=\"mt-3\">\n <span class=\"text-caption font-italic\">\n Minimum COSMOS version:\n </span>\n {{ versionMinimumCosmosVersion }}\n <v-tooltip\n v-if=\"versionsAreCompatible !== null\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <span v-bind=\"props\">\n <v-icon\n :icon=\"\n versionsAreCompatible ? 'mdi-check-circle' : 'mdi-alert'\n \"\n size=\"small\"\n />\n </span>\n </template>\n <span v-if=\"versionsAreCompatible\">\n Your version of COSMOS meets the requirements.\n </span>\n <span v-else>\n Your version of COSMOS is out of date. You can still install this\n plugin, but it might not work correctly.\n </span>\n </v-tooltip>\n </div>\n <v-text-field\n v-model=\"versionChecksum\"\n class=\"mt-3\"\n label=\"SHA256\"\n variant=\"solo\"\n density=\"compact\"\n hide-details\n readonly\n >\n <template #append>\n <v-tooltip\n v-model=\"showCopiedTooltip\"\n location=\"top\"\n :open-on-hover=\"false\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-content-copy\"\n variant=\"text\"\n density=\"compact\"\n @click=\"copyChecksum\"\n />\n </template>\n <span>Copied!</span>\n </v-tooltip>\n </template>\n </v-text-field>\n </v-card-text>\n\n <v-card-actions class=\"justify-start px-6\">\n <v-btn\n v-if=\"isPluginInstalled\"\n text=\"Uninstall\"\n append-icon=\"mdi-puzzle-remove\"\n variant=\"outlined\"\n color=\"red\"\n @click=\"uninstall\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"entitled ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!entitled\"\n @click=\"install\"\n />\n </span>\n </template>\n <span> {{ accessTooltip }} </span>\n </v-tooltip>\n <v-btn\n v-if=\"versionRepository\"\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionRepository\"\n target=\"_blank\"\n />\n <v-btn\n v-if=\"versionHomepage\"\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionHomepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport * as semver from 'semver'\nimport PluginProps from './PluginProps'\n\nexport default {\n mixins: [PluginProps],\n props: {\n modelValue: Boolean,\n },\n emits: ['triggerInstall', 'triggerUninstall', 'update:modelValue'],\n data() {\n return {\n showDialog: false,\n showCopiedTooltip: false,\n installedCosmosVersion: null,\n selectedVersionId: null,\n }\n },\n computed: {\n isDialogOpen: {\n get: function () {\n return this.modelValue || this.showDialog\n },\n set: function (val) {\n this.showDialog = val\n this.$emit('update:modelValue', val)\n },\n },\n hasVersions: function () {\n return this.versions && this.versions.length > 0\n },\n selectedVersion: function () {\n if (!this.hasVersions) {\n return null\n }\n const versionId = this.selectedVersionId || this.current_version_id\n return this.versions.find((v) => v.id === versionId) || this.versions[0]\n },\n versionOptions: function () {\n if (!this.hasVersions) {\n return []\n }\n return this.versions.map((v) => ({\n title: v.version_number,\n value: v.id,\n }))\n },\n versionTitle: function () {\n return this.selectedVersion?.title || this.title\n },\n versionDescription: function () {\n return this.selectedVersion?.description || this.description\n },\n versionKeywords: function () {\n return this.selectedVersion?.keywords || this.keywords\n },\n versionLicenses: function () {\n return this.selectedVersion?.licenses || this.licenses\n },\n versionHomepage: function () {\n return this.selectedVersion?.homepage || this.homepage\n },\n versionRepository: function () {\n return this.selectedVersion?.repository || this.repository\n },\n versionGemUrl: function () {\n return this.selectedVersion?.gem_url || this.gem_url\n },\n versionMinimumCosmosVersion: function () {\n return (\n this.selectedVersion?.minimum_cosmos_version ||\n this.minimum_cosmos_version\n )\n },\n versionChecksum: function () {\n return this.selectedVersion?.checksum || this.checksum\n },\n versionImageUrl: function () {\n return this.selectedVersion?.image_url || this.image_url\n },\n formattedStoreLink: function () {\n return this._navigableStoreUrl.split('://').at(-1)\n },\n versionsAreCompatible: function () {\n if (!this.installedCosmosVersion || !this.versionMinimumCosmosVersion) {\n return null\n }\n return semver.gte(\n this.installedCosmosVersion,\n this.versionMinimumCosmosVersion,\n )\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.installedCosmosVersion = data.version\n })\n },\n mounted: function () {\n this.selectedVersionId = this.current_version_id\n },\n methods: {\n openDialog: function () {\n this.isDialogOpen = true\n },\n closeDialog: function () {\n this.isDialogOpen = false\n },\n install: function () {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n uninstall: function () {\n this.$emit('triggerUninstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.versionChecksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n\n<style scoped>\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n\n.subtitle-with-version {\n width: 100%;\n min-height: 48px;\n}\n\n.version-select {\n max-width: 120px;\n min-width: 120px;\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card height=\"350\" class=\"d-flex flex-column\" @click=\"openDialog\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n </v-card-title>\n <v-card-subtitle class=\"d-flex align-center justify-content-space-between\">\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <!--\n <v-spacer />\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n -->\n </v-card-subtitle>\n <v-card-text>\n <div class=\"plugin-image-backdrop\">\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n </div>\n <div\n :class=\"{\n 'truncate-description': true,\n 'truncate-2': !!image_url,\n 'truncate-10': !image_url,\n }\"\n v-text=\"description\"\n />\n </v-card-text>\n <v-spacer />\n <v-card-actions class=\"flex-wrap\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"entitled ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!entitled\"\n @click.stop=\"install\"\n />\n </span>\n </template>\n <span> {{ accessTooltip }} </span>\n </v-tooltip>\n </v-card-actions>\n </v-card>\n <plugin-details-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n v-bind=\"plugin\"\n @trigger-install=\"install\"\n />\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\nimport PluginDetailsDialog from './PluginDetailsDialog.vue'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n emits: ['triggerInstall'],\n data() {\n return {\n showDialog: false,\n }\n },\n methods: {\n openDialog: function () {\n this.showDialog = true\n },\n install: function (event) {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: event?.version_id || this.current_version_id,\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.truncate-description {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate-2 {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n}\n\n.truncate-10 {\n line-clamp: 10;\n -webkit-line-clamp: 10;\n}\n\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"showDialog\" width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Plugin Store Settings</span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-alert v-model=\"errorLoading\" type=\"error\" closable density=\"compact\">\n Error loading previous configuration due to {{ errorText }}\n </v-alert>\n <v-alert v-model=\"errorSaving\" type=\"error\" closable density=\"compact\">\n Error saving due to {{ errorText }}\n </v-alert>\n <v-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n <v-text-field v-model=\"apiKey\" type=\"password\" label=\"API Key\" />\n </v-card-text>\n <v-card-actions>\n <v-btn\n color=\"success\"\n variant=\"text\"\n text=\"Save\"\n data-test=\"save-store-settings-btn\"\n @click=\"save\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"showApiKeyAlert\">\n <v-card class=\"pa-3\">\n <v-card-text class=\"pb-0\">\n You're using COSMOS Enterprise, but you haven't set an OpenC3 Store API\n key yet. You must set this to access Enterprise plugins.\n <br />\n <br />\n Visit the\n <a :href=\"accountSettingsUrl\" target=\"_blank\">\n OpenC3 Store account settings<v-icon\n icon=\"mdi-open-in-new\"\n size=\"x-small\"\n />\n </a>\n to generate an API key. Then, return here and open the Plugin Store\n settings with the\n <v-icon icon=\"mdi-cog\" size=\"small\" /> icon and paste your API key into\n the API key field.\n </v-card-text>\n <v-card-actions>\n <v-checkbox\n v-model=\"suppressApiKeyAlert\"\n class=\"px-3\"\n label=\"Don't show this message again\"\n hide-details\n />\n <v-btn variant=\"elevated\" text=\"OK\" @click=\"closeApiKeyAlert\" />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst URL_SETTING_NAME = 'store_url'\nconst API_KEY_SETTING_NAME = 'store_api_key'\nconst SETTING_SCOPE = 'DEFAULT'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n mixins: [Settings],\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue', 'update:storeUrl'],\n data() {\n return {\n showDialog: false,\n storeUrl: '',\n apiKey: null,\n isEnterprise: false,\n showApiKeyAlert: false,\n suppressApiKeyAlert: false,\n rules: {\n required: (value) => !!value || 'Required',\n url: (value) => {\n try {\n new URL(value)\n } catch (_) {\n return 'Not a valid URL'\n }\n return true\n },\n },\n }\n },\n computed: {\n accountSettingsUrl: function () {\n const navigableHost = this.storeUrl.replace(\n 'host.docker.internal',\n 'localhost',\n )\n return new URL('account', navigableHost)\n },\n },\n watch: {\n apiKey: function (val) {\n this.checkEnterpriseKey()\n localStorage.setItem('pluginStore.isApiKeySet', !!val)\n },\n isEnterprise: function (val) {\n this.checkEnterpriseKey()\n },\n suppressApiKeyAlert: function (val) {\n localStorage.setItem('pluginStore.suppressApiKeyAlert', val)\n },\n modelValue: function (val) {\n if (val) {\n this.showDialog = val\n }\n },\n showDialog: function (val) {\n if (!val) {\n this.$emit('update:modelValue', val)\n }\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = data.enterprise\n })\n this.loadSetting(URL_SETTING_NAME, { scope: SETTING_SCOPE })\n this.loadSetting(API_KEY_SETTING_NAME, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n },\n methods: {\n checkEnterpriseKey: function () {\n if (this.isEnterprise && this.apiKey === '') {\n this.openApiKeyAlert()\n }\n },\n openApiKeyAlert: function () {\n if (localStorage.getItem('pluginStore.suppressApiKeyAlert') !== 'true') {\n this.showApiKeyAlert = true\n }\n },\n closeApiKeyAlert: function () {\n this.showApiKeyAlert = false\n },\n save: function () {\n this.saveSetting(URL_SETTING_NAME, this.storeUrl, {\n scope: SETTING_SCOPE,\n })\n this.saveSetting(API_KEY_SETTING_NAME, this.apiKey, {\n scope: SETTING_SCOPE,\n })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response, { setting }) {\n switch (setting) {\n case URL_SETTING_NAME:\n this.storeUrl = response || DEFAULT_STORE_URL\n break\n case API_KEY_SETTING_NAME:\n this.apiKey = response || ''\n break\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-sheet class=\"pb-11 pt-8 px-8\" height=\"100%\">\n <div class=\"d-flex justify-content-space-between\">\n <div>\n <div class=\"text-h3 mb-3\">OpenC3 Plugin Store</div>\n <div class=\"text-subtitle-1\">\n Browse plugins made by OpenC3 and the COSMOS community\n </div>\n </div>\n <v-spacer />\n <v-btn icon=\"mdi-cog\" variant=\"text\" @click=\"openSettings\" />\n\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeUrl\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open {{ formattedStoreUrl }} </span>\n </v-tooltip>\n\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"close\" />\n </div>\n <div class=\"d-inline-flex align-center w-100\">\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n data-test=\"search-plugin-store\"\n />\n </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-alert\n v-if=\"storeError\"\n class=\"mt-6\"\n color=\"error\"\n :title=\"storeError.title\"\n :text=\"storeError.body\"\n />\n <v-container v-else>\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\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n components: {\n PluginCard,\n PluginStoreSettingsDialog,\n },\n emits: ['close', 'triggerInstall'],\n data() {\n return {\n api: new OpenC3Api(),\n search: '',\n showSettingsDialog: false,\n plugins: [],\n storeError: null,\n storeUrl: DEFAULT_STORE_URL,\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\n if (this.search.length) {\n filtered = filtered.filter((plugin) =>\n plugin.title.toLowerCase().includes(this.search.toLowerCase()),\n )\n }\n return filtered\n },\n formattedStoreUrl: function () {\n return this.storeUrl.split('://').at(-1)\n },\n },\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(({ data }) => {\n if (data.error) {\n const { title, body } = data\n this.storeError = { title, body }\n this.plugins = []\n } else {\n this.storeError = null\n this.plugins = data\n }\n })\n },\n close: function () {\n this.$emit('close')\n },\n install: function (plugin) {\n this.$emit('triggerInstall', plugin)\n this.close()\n },\n openSettings: function () {\n this.showSettingsDialog = true\n },\n updatePluginStore: function (storeUrl) {\n this.storeUrl = storeUrl\n this.api.update_plugin_store().then((response) => {\n this.fetchPluginStoreData()\n })\n },\n },\n}\n</script>\n\n<style>\n.v-sheet {\n background-color: var(--color-background-base-default);\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <tr :class=\"{ 'cursor-pointer': hasDetails }\" data-test=\"plugin-list-item\">\n <td>\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n max-height=\"56\"\n min-width=\"56\"\n />\n </td>\n <td>\n <div class=\"text-h6\" @click=\"openDetails\" v-text=\"displayTitle\" />\n <div class=\"text-subtitle-2 v-list-item-subtitle pl-0\">\n <!-- subtitle -->\n <template v-if=\"isModified\"> * </template>\n {{ name }}\n </div>\n <div v-if=\"targets?.length\">\n <!-- sub-subtitle -->\n <span v-for=\"(target, index) in targets\" :key=\"index\" class=\"mr-2\">\n <a\n v-if=\"target.modified\"\n style=\"cursor: pointer\"\n @click.prevent=\"downloadTarget(target.name)\"\n v-text=\"target.name\"\n />\n <span v-else v-text=\"target.name\" />\n </span>\n </div>\n </td>\n\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"plugin-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Download\"\n prepend-icon=\"mdi-download\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin\"\n />\n <v-list-item\n title=\"Edit Details\"\n prepend-icon=\"mdi-pencil\"\n data-test=\"edit-plugin\"\n @click=\"edit\"\n />\n <v-list-item\n title=\"Upgrade\"\n prepend-icon=\"mdi-update\"\n data-test=\"upgrade-plugin\"\n @click=\"upgrade\"\n />\n <v-list-item\n :title=\"`View Microservices (${microserviceCount})`\"\n prepend-icon=\"mdi-tab\"\n data-test=\"view-microservices\"\n @click=\"viewMicroservices\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n <plugin-details-dialog\n v-if=\"showCard\"\n v-model=\"showCard\"\n v-bind=\"plugin\"\n @trigger-uninstall=\"deletePrompt\"\n />\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n props: {\n targets: {\n type: Array,\n default: () => {\n return []\n },\n },\n isModified: Boolean,\n microservices: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showCard: false,\n }\n },\n computed: {\n displayTitle: function () {\n if (this.title) {\n return this.title\n }\n return this.name\n .replace(/^openc3-cosmos-/, '')\n .replace(/-?\\d+\\.\\d+\\.\\d+(?:\\.pre\\.beta\\d+\\.\\d+)?\\.gem(?:__\\d+)?$/, '') // '-6.6.1.pre.beta0.20250801182255.gem__20250801182444' or '6.6.1.gem'\n },\n getMicroservicesForPlugin: function () {\n const names = []\n for (const [microserviceName, microservice] of Object.entries(\n this.microservices,\n )) {\n if (microservice.plugin === this.name) {\n names.push(microserviceName)\n }\n }\n return names\n },\n microserviceCount: function () {\n return this.getMicroservicesForPlugin.length\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasDetails) {\n this.showCard = true\n }\n },\n downloadPlugin: function () {\n Api.post(`/openc3-api/packages/${this.name}/download`).then(\n (response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n },\n )\n },\n downloadTarget: function (name) {\n Api.post(`/openc3-api/targets/${name}/download`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n })\n },\n edit: function () {\n this.$emit('edit')\n },\n upgrade: function () {\n this.$emit('upgrade')\n },\n viewMicroservices: function () {\n const servicesParam = this.getMicroservicesForPlugin.join(',')\n this.$router.push({\n path: '/tools/admin/microservices',\n query: { services: servicesParam },\n })\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-data-table\n :headers=\"[]\"\n :items=\"shownPlugins\"\n density=\"compact\"\n class=\"list\"\n data-test=\"plugin-list\"\n >\n <template #item=\"{ item: plugin }\">\n <plugin-list-item\n :key=\"plugin.name\"\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n :microservices=\"microservices\"\n @edit=\"() => editPlugin(plugin.name)\"\n @upgrade=\"() => upgradePlugin(plugin.name)\"\n @delete=\"() => deletePrompt(plugin.name)\"\n />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\n microservices: {},\n }\n },\n computed: {\n shownPlugins() {\n const pluginsToShow = []\n const defaultPluginsToShow = []\n this.plugins.forEach((plugin) => {\n const pluginNameFirst = plugin.name.split('__')[0]\n const pluginNameSplit = pluginNameFirst.split('-').slice(0, -1)\n const pluginNameShort = pluginNameSplit.join('-')\n if (this.defaultPlugins.includes(pluginNameShort)) {\n defaultPluginsToShow.push(plugin)\n } else {\n pluginsToShow.push(plugin)\n }\n })\n pluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n if (this.showDefaultTools) {\n defaultPluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n return pluginsToShow.concat(defaultPluginsToShow)\n }\n return pluginsToShow\n },\n },\n mounted() {\n this.fetchMicroservices()\n },\n methods: {\n showDetails: function (plugin) {\n this.detailPlugin = plugin\n this.showPluginDetails = true\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n fetchMicroservices: function () {\n Api.get('/openc3-api/microservices/all').then((response) => {\n this.microservices = response.data\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.list :deep(tr:nth-child(even)) {\n background-color: rgba(var(--v-theme-on-surface), 0.05);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn append-icon=\"mdi-store\" @click=\"openStore\">\n Browse Plugins\n </v-btn>\n <v-btn append-icon=\"mdi-paperclip\" class=\"mx-2\" @click=\"selectFile\">\n Install From File\n </v-btn>\n <input\n ref=\"fileInput\"\n accept=\".gem\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n <br />\n <p class=\"mt-2\">\n Note: Use <v-icon> mdi-dots-horizontal </v-icon> in the Installed\n Plugins list to upgrade existing plugins\n </p>\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\" />\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col align=\"right\" class=\"mr-2\">\n <div>* indicates a modified plugin</div>\n <div>Click target link to download modifications</div>\n </v-col>\n </v-row>\n <v-divider />\n <!-- TODO This alert shows both success and failure. Make consistent with rest of OpenC3. -->\n <v-alert\n v-model=\"showAlert\"\n closable\n :type=\"alertType\"\n :text=\"alert\"\n data-test=\"plugin-alert\"\n />\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Process List </v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span\n v-text=\"\n ' Updated At: ' +\n formatNanoseconds(process.updated_at, timeZone)\n \"\n />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span> Show Output </span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Installed Plugins </v-col>\n <v-col class=\"v-col-auto\">\n <v-switch\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n density=\"compact\"\n hide-details\n data-test=\"show-default-tools\"\n />\n </v-col>\n </v-row>\n <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\n />\n <plugin-dialog\n v-if=\"showPluginDialog\"\n v-model=\"showPluginDialog\"\n :plugin-name=\"pluginName\"\n :variables=\"variables\"\n :plugin-txt=\"pluginTxt\"\n :existing-plugin-txt=\"existingPluginTxt\"\n :store-plugin-id=\"storePluginId\"\n :store-version-id=\"storeVersionId\"\n :min-cosmos-version=\"minCosmosVersion\"\n @callback=\"pluginCallback\"\n />\n <modified-plugin-dialog\n v-if=\"showModifiedPluginDialog\"\n v-model=\"showModifiedPluginDialog\"\n :plugin-name=\"currentPlugin\"\n :targets=\"pluginTargets(currentPlugin)\"\n :plugin-delete=\"pluginDelete\"\n @submit=\"modifiedSubmit\"\n />\n <!-- <download-dialog v-model=\"showDownloadDialog\" /> -->\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n <v-bottom-sheet v-model=\"showPluginStore\" fullscreen>\n <plugin-store\n @close=\"() => (showPluginStore = false)\"\n @trigger-install=\"(storeData) => upload(null, storeData)\"\n />\n </v-bottom-sheet>\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\nimport { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n // Control state\n pluginName: null,\n variables: {},\n storePluginId: null,\n storeVersionId: null,\n minCosmosVersion: null,\n pluginTxt: '',\n file: null,\n currentPlugin: null,\n pluginHashTmp: null,\n existingPluginTxt: null,\n progress: 0,\n pluginDelete: false,\n\n api: new OpenC3Api(),\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n timeZone: 'local',\n // When updating update local_mode.rb, local_mode.py, plugins.p.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdqueue', // Enterprise only\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-cosmos-tool-notebooks', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n watch: {\n // watcher to reset the file input when the dialog is closed\n showPluginDialog: function (newValue, oldValue) {\n if (newValue === false) {\n this.file = null\n this.$refs.fileInput.value = null\n }\n },\n },\n created() {\n this.api.update_plugin_store()\n this.api\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updateProcesses()\n\n // Handle going \"back\" from the plugin store\n // (idk why v-bottom-sheet's close-on-back prop isn't working)\n const that = this\n window.onpopstate = function () {\n if (that.showPluginStore) {\n that.showPluginStore = false\n history.go(1)\n }\n }\n },\n methods: {\n resetControlState: function () {\n this.pluginName = null\n this.variables = {}\n this.storePluginId = null\n this.storeVersionId = null\n this.minCosmosVersion = null\n this.pluginTxt = ''\n this.file = null\n this.currentPlugin = null\n this.pluginHashTmp = null\n this.existingPluginTxt = null\n this.progress = 0\n this.pluginDelete = false\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n upload: function (existing = null, storeData = null) {\n const method = existing ? 'put' : 'post'\n const path = existing\n ? `/openc3-api/plugins/${existing}`\n : '/openc3-api/plugins'\n const formData = new FormData()\n if (storeData === null) {\n formData.append('plugin', this.file, this.file.name)\n } else {\n formData.append('store_plugin_id', storeData.id)\n formData.append('store_version_id', storeData.version_id)\n }\n let self = this\n const promise = Api[method](path, {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n promise\n .then((response) => {\n this.progress = 100\n this.alert = 'Uploaded file'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt =\n response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.storePluginId = response.data.store_plugin_id\n this.storeVersionId = response.data.store_version_id\n this.minCosmosVersion = response.data.minimum_cosmos_version\n this.pluginTxt = pluginTxt\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n this.file = undefined\n })\n .catch((error) => {\n this.currentPlugin = null\n this.file = undefined\n })\n },\n pluginCallback: function (pluginHash) {\n this.showPluginDialog = false\n if (this.currentPlugin !== null) {\n pluginHash['name'] = this.currentPlugin\n }\n this.pluginHashTmp = pluginHash\n if (this.isModified(this.currentPlugin)) {\n this.pluginDelete = false\n this.showModifiedPluginDialog = true\n } else {\n this.pluginInstall()\n }\n },\n modifiedSubmit: async function (deleteModified) {\n if (deleteModified === true) {\n for (let target of this.pluginTargets(this.currentPlugin)) {\n if (target.modified == true) {\n await Api.post(`/openc3-api/targets/${target.name}/delete_modified`)\n }\n }\n }\n if (this.pluginDelete) {\n this.deletePlugin(this.currentPlugin)\n } else {\n this.pluginInstall()\n }\n },\n pluginInstall: function () {\n Api.post(`/openc3-api/plugins/install/${this.pluginName}`, {\n data: {\n plugin_hash: JSON.stringify(this.pluginHashTmp),\n },\n }).then((response) => {\n this.alert = `Started installing plugin ${this.pluginName} ...`\n this.alertType = 'success'\n this.showAlert = true\n this.currentPlugin = null\n this.file = undefined\n this.variables = {}\n this.pluginTxt = ''\n this.existingPluginTxt = null\n this.storePluginId = null\n this.storeVersionId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n this.resetControlState()\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.resetControlState()\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.resetControlState()\n this.currentPlugin = plugin\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.resetControlState()\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n openStore() {\n this.resetControlState()\n this.showPluginStore = true\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n</style>\n"],"names":["SETTING_NAME","DEFAULT_STORE_URL","PluginProps","OpenC3Api","magicNumbers","fileHead","found","_","magicNumber","byte","i","mimeType","params","data","Api","_sfc_main","val","versionId","v","semver.gte","_hoisted_3","_hoisted_5","_hoisted_7","_hoisted_8","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_ctx","_component_v_card_subtitle","_openBlock","_createElementBlock","_hoisted_2","_component_v_icon","_component_v_select","$data","_component_v_card_text","_component_v_img","_Fragment","_renderList","keyword","_component_v_chip","_hoisted_6","license","_cache","_component_v_text_field","_mergeProps","_component_v_card_actions","_normalizeProps","_guardReactiveProps","PluginDetailsDialog","event","_component_v_card_title","_hoisted_1","_normalizeClass","_component_plugin_details_dialog","URL_SETTING_NAME","API_KEY_SETTING_NAME","SETTING_SCOPE","Settings","value","navigableHost","response","setting","_component_v_alert","_createTextVNode","_component_v_checkbox","PluginCard","PluginStoreSettingsDialog","filtered","plugin","title","body","storeUrl","_component_v_sheet","_component_v_container","_component_v_row","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","names","microserviceName","microservice","decodedData","uInt8Array","blob","link","name","servicesParam","args","$props","target","index","_withModifiers","_component_v_menu","_component_v_list","_component_v_list_item","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","a","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","TimeFilters","newValue","oldValue","that","process","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_progress_circular","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_switch","_component_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}