@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.
- package/dist/{ArrayWidget-BHjh3qLF.cjs → ArrayWidget-CQCphADm.cjs} +3 -3
- package/dist/{ArrayWidget-BHjh3qLF.cjs.map → ArrayWidget-CQCphADm.cjs.map} +1 -1
- package/dist/{ArrayWidget-Dh6zDiC7.js → ArrayWidget-CcQFJGCA.js} +7 -6
- package/dist/{ArrayWidget-Dh6zDiC7.js.map → ArrayWidget-CcQFJGCA.js.map} +1 -1
- package/dist/{ArrayplotWidget-CSc_TqNm.js → ArrayplotWidget-DGJEXAY0.js} +6 -5
- package/dist/{ArrayplotWidget-CSc_TqNm.js.map → ArrayplotWidget-DGJEXAY0.js.map} +1 -1
- package/dist/ArrayplotWidget-J0xWFYsb.cjs +2 -0
- package/dist/{ArrayplotWidget-BHD-TGQO.cjs.map → ArrayplotWidget-J0xWFYsb.cjs.map} +1 -1
- package/dist/BarColumn-DrvHLEts.cjs +2 -0
- package/dist/BarColumn-DrvHLEts.cjs.map +1 -0
- package/dist/{BarColumn-DmjMnw5l.js → BarColumn-DwZmAe8g.js} +11 -9
- package/dist/BarColumn-DwZmAe8g.js.map +1 -0
- package/dist/{BlockWidget-BdR_HCVc.js → BlockWidget-BHtugveV.js} +14 -13
- package/dist/{BlockWidget-BdR_HCVc.js.map → BlockWidget-BHtugveV.js.map} +1 -1
- package/dist/{BlockWidget-Bi1PfS1k.cjs → BlockWidget-_HTXwzGu.cjs} +2 -2
- package/dist/{BlockWidget-Bi1PfS1k.cjs.map → BlockWidget-_HTXwzGu.cjs.map} +1 -1
- package/dist/ButtonWidget-C_4jUjbD.cjs +3 -0
- package/dist/ButtonWidget-C_4jUjbD.cjs.map +1 -0
- package/dist/{ButtonWidget-DZ4VCNWU.js → ButtonWidget-Cc9cYsg8.js} +7 -6
- package/dist/ButtonWidget-Cc9cYsg8.js.map +1 -0
- package/dist/{CanvasWidget-DTEx-DpZ.cjs → CanvasWidget-98hvMkWl.cjs} +2 -2
- package/dist/{CanvasWidget-DTEx-DpZ.cjs.map → CanvasWidget-98hvMkWl.cjs.map} +1 -1
- package/dist/{CanvasWidget-DuXOo3jG.js → CanvasWidget-Bn70gBcc.js} +2 -2
- package/dist/{CanvasWidget-DuXOo3jG.js.map → CanvasWidget-Bn70gBcc.js.map} +1 -1
- package/dist/{CanvasdotWidget-bbOquK8B.cjs → CanvasdotWidget-6s1Kzzoj.cjs} +2 -2
- package/dist/{CanvasdotWidget-bbOquK8B.cjs.map → CanvasdotWidget-6s1Kzzoj.cjs.map} +1 -1
- package/dist/{CanvasdotWidget-WoLpxI1u.js → CanvasdotWidget-CMROfW3O.js} +2 -2
- package/dist/{CanvasdotWidget-WoLpxI1u.js.map → CanvasdotWidget-CMROfW3O.js.map} +1 -1
- package/dist/{CanvasimageWidget-tWpK5rsv.js → CanvasimageWidget-BpM05v_m.js} +3 -3
- package/dist/{CanvasimageWidget-tWpK5rsv.js.map → CanvasimageWidget-BpM05v_m.js.map} +1 -1
- package/dist/{CanvasimageWidget-D2EqsK7w.cjs → CanvasimageWidget-Du_TULyr.cjs} +2 -2
- package/dist/{CanvasimageWidget-D2EqsK7w.cjs.map → CanvasimageWidget-Du_TULyr.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs → CanvasimagevalueWidget-DUiZEzwq.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs.map → CanvasimagevalueWidget-DUiZEzwq.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-BVzJYz3l.js → CanvasimagevalueWidget-E6G93iGc.js} +3 -3
- package/dist/{CanvasimagevalueWidget-BVzJYz3l.js.map → CanvasimagevalueWidget-E6G93iGc.js.map} +1 -1
- package/dist/{CanvaslabelWidget-CDFf8Vll.js → CanvaslabelWidget-C074R2Fy.js} +2 -2
- package/dist/{CanvaslabelWidget-CDFf8Vll.js.map → CanvaslabelWidget-C074R2Fy.js.map} +1 -1
- package/dist/{CanvaslabelWidget-DiPxyXoX.cjs → CanvaslabelWidget-C7K2dtNN.cjs} +2 -2
- package/dist/{CanvaslabelWidget-DiPxyXoX.cjs.map → CanvaslabelWidget-C7K2dtNN.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js → CanvaslabelvalueWidget-B0nJeS4X.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js.map → CanvaslabelvalueWidget-B0nJeS4X.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs → CanvaslabelvalueWidget-BuayHPZu.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs.map → CanvaslabelvalueWidget-BuayHPZu.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-BttTXCZq.js → CanvaslineWidget-CxnNAqOX.js} +2 -2
- package/dist/{CanvaslineWidget-BttTXCZq.js.map → CanvaslineWidget-CxnNAqOX.js.map} +1 -1
- package/dist/{CanvaslineWidget-BECtKTPL.cjs → CanvaslineWidget-DaBwCmSV.cjs} +2 -2
- package/dist/{CanvaslineWidget-BECtKTPL.cjs.map → CanvaslineWidget-DaBwCmSV.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js → CanvaslinevalueWidget-BwfFyCwH.js} +2 -2
- package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js.map → CanvaslinevalueWidget-BwfFyCwH.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs → CanvaslinevalueWidget-xSHdgNCO.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs.map → CanvaslinevalueWidget-xSHdgNCO.cjs.map} +1 -1
- package/dist/{CheckbuttonWidget-CTMObPhX.cjs → CheckbuttonWidget-Bey7tHx-.cjs} +2 -2
- package/dist/{CheckbuttonWidget-CTMObPhX.cjs.map → CheckbuttonWidget-Bey7tHx-.cjs.map} +1 -1
- package/dist/{CheckbuttonWidget-18jtf7sh.js → CheckbuttonWidget-yAm10oX0.js} +2 -2
- package/dist/{CheckbuttonWidget-18jtf7sh.js.map → CheckbuttonWidget-yAm10oX0.js.map} +1 -1
- package/dist/{ClassificationBanners-BmnQODLn.js → ClassificationBanners-DxpE_iPX.js} +2 -2
- package/dist/{ClassificationBanners-BmnQODLn.js.map → ClassificationBanners-DxpE_iPX.js.map} +1 -1
- package/dist/ClassificationBanners-xG4DOlqJ.cjs +2 -0
- package/dist/{ClassificationBanners-DjGCuH-4.cjs.map → ClassificationBanners-xG4DOlqJ.cjs.map} +1 -1
- package/dist/{ComboboxWidget-BjaVFbD4.js → ComboboxWidget-BnWksnnp.js} +2 -2
- package/dist/{ComboboxWidget-BjaVFbD4.js.map → ComboboxWidget-BnWksnnp.js.map} +1 -1
- package/dist/{ComboboxWidget-Cc0Acq9q.cjs → ComboboxWidget-Mh6axKMv.cjs} +2 -2
- package/dist/{ComboboxWidget-Cc0Acq9q.cjs.map → ComboboxWidget-Mh6axKMv.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-CO-nvphS.js → CriticalCmdDialog-D0fIp8Tq.js} +24 -23
- package/dist/{CriticalCmdDialog-CO-nvphS.js.map → CriticalCmdDialog-D0fIp8Tq.js.map} +1 -1
- package/dist/CriticalCmdDialog-DJ3FWL0_.cjs +2 -0
- package/dist/{CriticalCmdDialog-eytxCQto.cjs.map → CriticalCmdDialog-DJ3FWL0_.cjs.map} +1 -1
- package/dist/{DateWidget-DkFAFlc8.js → DateWidget-CAiG2FIl.js} +9 -8
- package/dist/{DateWidget-DkFAFlc8.js.map → DateWidget-CAiG2FIl.js.map} +1 -1
- package/dist/DateWidget-DUYYp-Yx.cjs +2 -0
- package/dist/{DateWidget-Cle8FY8Q.cjs.map → DateWidget-DUYYp-Yx.cjs.map} +1 -1
- package/dist/DetailsDialog-D3iPUi8b.cjs +2 -0
- package/dist/{DetailsDialog-BcMaTfuQ.cjs.map → DetailsDialog-D3iPUi8b.cjs.map} +1 -1
- package/dist/{DetailsDialog-sqja4Lzq.js → DetailsDialog-q5SDzw3R.js} +72 -71
- package/dist/{DetailsDialog-sqja4Lzq.js.map → DetailsDialog-q5SDzw3R.js.map} +1 -1
- package/dist/EventListDialog-1RsuuLHZ.cjs +2 -0
- package/dist/EventListDialog-1RsuuLHZ.cjs.map +1 -0
- package/dist/{EventListDialog-DjCQAwGl.js → EventListDialog-HuEtOu3k.js} +61 -58
- package/dist/EventListDialog-HuEtOu3k.js.map +1 -0
- package/dist/FilechecksumWidget-ByVrYgzI.cjs +2 -0
- package/dist/{FilechecksumWidget-2ta-UvLp.cjs.map → FilechecksumWidget-ByVrYgzI.cjs.map} +1 -1
- package/dist/{FilechecksumWidget-DqJ_hvN4.js → FilechecksumWidget-DeW9wy5d.js} +9 -9
- package/dist/{FilechecksumWidget-DqJ_hvN4.js.map → FilechecksumWidget-DeW9wy5d.js.map} +1 -1
- package/dist/{FiledisplayWidget-CYznG_tf.js → FiledisplayWidget-C_zPFu2E.js} +7 -6
- package/dist/{FiledisplayWidget-CYznG_tf.js.map → FiledisplayWidget-C_zPFu2E.js.map} +1 -1
- package/dist/FiledisplayWidget-hYmg981k.cjs +2 -0
- package/dist/{FiledisplayWidget-BUKXIQir.cjs.map → FiledisplayWidget-hYmg981k.cjs.map} +1 -1
- package/dist/{FormatvalueWidget-BpFXnA_U.cjs → FormatvalueWidget-7VD_kwxB.cjs} +2 -2
- package/dist/{FormatvalueWidget-BpFXnA_U.cjs.map → FormatvalueWidget-7VD_kwxB.cjs.map} +1 -1
- package/dist/{FormatvalueWidget-BnVu4YGx.js → FormatvalueWidget-BrvPWwfN.js} +3 -3
- package/dist/{FormatvalueWidget-BnVu4YGx.js.map → FormatvalueWidget-BrvPWwfN.js.map} +1 -1
- package/dist/{Graph-CUFzx8Ti.js → Graph-BCvaO4yI.js} +45 -38
- package/dist/Graph-BCvaO4yI.js.map +1 -0
- package/dist/Graph-BUqdz6gu.cjs +2 -0
- package/dist/Graph-BUqdz6gu.cjs.map +1 -0
- package/dist/GraphWidget-BdP0xM_P.cjs +2 -0
- package/dist/{GraphWidget-BvCQHVxQ.cjs.map → GraphWidget-BdP0xM_P.cjs.map} +1 -1
- package/dist/{GraphWidget-DO5XbOGy.js → GraphWidget-QS-VJoes.js} +26 -31
- package/dist/{GraphWidget-DO5XbOGy.js.map → GraphWidget-QS-VJoes.js.map} +1 -1
- package/dist/{HorizontalWidget-BBQE-dP-.cjs → HorizontalWidget-B9j7DG2Q.cjs} +2 -2
- package/dist/{HorizontalWidget-BBQE-dP-.cjs.map → HorizontalWidget-B9j7DG2Q.cjs.map} +1 -1
- package/dist/{HorizontalWidget-BA9PiP3d.js → HorizontalWidget-cFSsdChw.js} +2 -2
- package/dist/{HorizontalWidget-BA9PiP3d.js.map → HorizontalWidget-cFSsdChw.js.map} +1 -1
- package/dist/{HorizontalboxWidget-CX7J8RdA.cjs → HorizontalboxWidget-C3zHRO9h.cjs} +2 -2
- package/dist/{HorizontalboxWidget-CX7J8RdA.cjs.map → HorizontalboxWidget-C3zHRO9h.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-B-7HOqgl.js → HorizontalboxWidget-CKA7rLGd.js} +5 -5
- package/dist/{HorizontalboxWidget-B-7HOqgl.js.map → HorizontalboxWidget-CKA7rLGd.js.map} +1 -1
- package/dist/{HorizontallineWidget-D-o9MGo0.js → HorizontallineWidget-BqbLK0zc.js} +2 -2
- package/dist/{HorizontallineWidget-D-o9MGo0.js.map → HorizontallineWidget-BqbLK0zc.js.map} +1 -1
- package/dist/{HorizontallineWidget-odTFoB8u.cjs → HorizontallineWidget-GGNFIo1N.cjs} +2 -2
- package/dist/{HorizontallineWidget-odTFoB8u.cjs.map → HorizontallineWidget-GGNFIo1N.cjs.map} +1 -1
- package/dist/{IframeWidget-BzOka-fX.js → IframeWidget-CITX8Es1.js} +2 -2
- package/dist/{IframeWidget-BzOka-fX.js.map → IframeWidget-CITX8Es1.js.map} +1 -1
- package/dist/{IframeWidget-cTHu_Rmp.cjs → IframeWidget-lK6Cw1Pp.cjs} +2 -2
- package/dist/{IframeWidget-cTHu_Rmp.cjs.map → IframeWidget-lK6Cw1Pp.cjs.map} +1 -1
- package/dist/ImageLoader-CkTaGfCC.cjs +2 -0
- package/dist/{ImageLoader-BTEOukIw.cjs.map → ImageLoader-CkTaGfCC.cjs.map} +1 -1
- package/dist/{ImageLoader-CstmWFM4.js → ImageLoader-DQV_11Vd.js} +2 -2
- package/dist/{ImageLoader-CstmWFM4.js.map → ImageLoader-DQV_11Vd.js.map} +1 -1
- package/dist/{ImageviewerWidget-BA9uOM1q.js → ImageviewerWidget-BIsSA7KD.js} +2 -2
- package/dist/{ImageviewerWidget-BA9uOM1q.js.map → ImageviewerWidget-BIsSA7KD.js.map} +1 -1
- package/dist/{ImageviewerWidget-CLAFwmaB.cjs → ImageviewerWidget-CvbsaXCd.cjs} +2 -2
- package/dist/{ImageviewerWidget-CLAFwmaB.cjs.map → ImageviewerWidget-CvbsaXCd.cjs.map} +1 -1
- package/dist/InterfacesTab-Cfvks-ms.cjs +2 -0
- package/dist/{InterfacesTab-CM0CGFVS.cjs.map → InterfacesTab-Cfvks-ms.cjs.map} +1 -1
- package/dist/{InterfacesTab-C3mDLkGC.js → InterfacesTab-twne_Qp4.js} +11 -10
- package/dist/{InterfacesTab-C3mDLkGC.js.map → InterfacesTab-twne_Qp4.js.map} +1 -1
- package/dist/{LabelWidget-CMmVq1mx.cjs → LabelWidget-BFWd6Vgh.cjs} +2 -2
- package/dist/{LabelWidget-CMmVq1mx.cjs.map → LabelWidget-BFWd6Vgh.cjs.map} +1 -1
- package/dist/{LabelWidget-Da2howZF.js → LabelWidget-FQI-cH_A.js} +2 -2
- package/dist/{LabelWidget-Da2howZF.js.map → LabelWidget-FQI-cH_A.js.map} +1 -1
- package/dist/{LabelledWidget-CAqH0oWs.cjs → LabelledWidget-AZifUp-f.cjs} +2 -2
- package/dist/{LabelledWidget-CAqH0oWs.cjs.map → LabelledWidget-AZifUp-f.cjs.map} +1 -1
- package/dist/{LabelledWidget-BH8y3OXT.js → LabelledWidget-KGXtQ4Zb.js} +4 -4
- package/dist/{LabelledWidget-BH8y3OXT.js.map → LabelledWidget-KGXtQ4Zb.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-Brl24F4c.js → LabelprogressbarWidget-72WyzD_Q.js} +4 -4
- package/dist/{LabelprogressbarWidget-Brl24F4c.js.map → LabelprogressbarWidget-72WyzD_Q.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs → LabelprogressbarWidget-Bd2E9G7V.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs.map → LabelprogressbarWidget-Bd2E9G7V.cjs.map} +1 -1
- package/dist/{LabelsparklineWidget-D22MB7-4.js → LabelsparklineWidget-DtWNf4mK.js} +4 -4
- package/dist/{LabelsparklineWidget-D22MB7-4.js.map → LabelsparklineWidget-DtWNf4mK.js.map} +1 -1
- package/dist/{LabelsparklineWidget-BUXOpBeB.cjs → LabelsparklineWidget-__3CB0T-.cjs} +2 -2
- package/dist/{LabelsparklineWidget-BUXOpBeB.cjs.map → LabelsparklineWidget-__3CB0T-.cjs.map} +1 -1
- package/dist/LabelvalueWidget-B681T0uR.cjs +2 -0
- package/dist/LabelvalueWidget-B681T0uR.cjs.map +1 -0
- package/dist/{LabelvalueWidget-_1JPbK-K.js → LabelvalueWidget-D_JLdY7r.js} +11 -12
- package/dist/LabelvalueWidget-D_JLdY7r.js.map +1 -0
- package/dist/LabelvaluedescWidget-BppM5vGp.js +64 -0
- package/dist/LabelvaluedescWidget-BppM5vGp.js.map +1 -0
- package/dist/LabelvaluedescWidget-CiGIPdMG.cjs +2 -0
- package/dist/LabelvaluedescWidget-CiGIPdMG.cjs.map +1 -0
- package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js → LabelvaluelimitsbarWidget-B69ogLif.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js.map → LabelvaluelimitsbarWidget-B69ogLif.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs.map → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs → LabelvaluelimitscolumnWidget-BXdmh9So.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs.map → LabelvaluelimitscolumnWidget-BXdmh9So.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js → LabelvaluelimitscolumnWidget-DPYwFdgq.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js.map → LabelvaluelimitscolumnWidget-DPYwFdgq.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js → LabelvaluerangebarWidget-BT0BcOoK.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js.map → LabelvaluerangebarWidget-BT0BcOoK.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs → LabelvaluerangebarWidget-cavgscEk.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs.map → LabelvaluerangebarWidget-cavgscEk.cjs.map} +1 -1
- package/dist/{Layout-DwWEea79.cjs → Layout-D1ukrMwN.cjs} +2 -2
- package/dist/{Layout-DwWEea79.cjs.map → Layout-D1ukrMwN.cjs.map} +1 -1
- package/dist/{Layout-D7RGn0Fe.js → Layout-d-vb0okO.js} +2 -2
- package/dist/{Layout-D7RGn0Fe.js.map → Layout-d-vb0okO.js.map} +1 -1
- package/dist/{LedWidget-DgMtvsiv.js → LedWidget-Cmr6eVG2.js} +7 -6
- package/dist/{LedWidget-DgMtvsiv.js.map → LedWidget-Cmr6eVG2.js.map} +1 -1
- package/dist/LedWidget-Dwrm6hTX.cjs +2 -0
- package/dist/{LedWidget-BaiKDozd.cjs.map → LedWidget-Dwrm6hTX.cjs.map} +1 -1
- package/dist/{LimitsBar-BFM38vQL.cjs → LimitsBar-Dz1lZ_81.cjs} +2 -2
- package/dist/{LimitsBar-BFM38vQL.cjs.map → LimitsBar-Dz1lZ_81.cjs.map} +1 -1
- package/dist/{LimitsBar-CcOaAw0C.js → LimitsBar-qMynDHYT.js} +2 -2
- package/dist/{LimitsBar-CcOaAw0C.js.map → LimitsBar-qMynDHYT.js.map} +1 -1
- package/dist/{LimitsbarWidget-DpmJn1Lo.js → LimitsbarWidget-CMvcwa-m.js} +3 -3
- package/dist/{LimitsbarWidget-DpmJn1Lo.js.map → LimitsbarWidget-CMvcwa-m.js.map} +1 -1
- package/dist/{LimitsbarWidget-ConP3qI5.cjs → LimitsbarWidget-vIP9AUk4.cjs} +2 -2
- package/dist/{LimitsbarWidget-ConP3qI5.cjs.map → LimitsbarWidget-vIP9AUk4.cjs.map} +1 -1
- package/dist/LimitscolorWidget-CPuknJPk.cjs +2 -0
- package/dist/{LimitscolorWidget-veWQ4NXl.cjs.map → LimitscolorWidget-CPuknJPk.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-BMXiEaDm.js → LimitscolorWidget-CZ9wMtcI.js} +7 -6
- package/dist/{LimitscolorWidget-BMXiEaDm.js.map → LimitscolorWidget-CZ9wMtcI.js.map} +1 -1
- package/dist/{LimitscolumnWidget-CJABAor8.cjs → LimitscolumnWidget-r-nOETY5.cjs} +2 -2
- package/dist/{LimitscolumnWidget-CJABAor8.cjs.map → LimitscolumnWidget-r-nOETY5.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-ufFMz6R-.js → LimitscolumnWidget-r84KJGU-.js} +2 -2
- package/dist/{LimitscolumnWidget-ufFMz6R-.js.map → LimitscolumnWidget-r84KJGU-.js.map} +1 -1
- package/dist/LinegraphWidget-BMUI8q6Q.cjs +2 -0
- package/dist/{LinegraphWidget-3E8L5CvM.cjs.map → LinegraphWidget-BMUI8q6Q.cjs.map} +1 -1
- package/dist/{LinegraphWidget-BC2wVOny.js → LinegraphWidget-COGBGOjF.js} +10 -9
- package/dist/{LinegraphWidget-BC2wVOny.js.map → LinegraphWidget-COGBGOjF.js.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs → MatrixbycolumnsWidget-BoNbbrEi.cjs} +2 -2
- package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs.map → MatrixbycolumnsWidget-BoNbbrEi.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js → MatrixbycolumnsWidget-Dx2iz0YF.js} +3 -3
- package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js.map → MatrixbycolumnsWidget-Dx2iz0YF.js.map} +1 -1
- package/dist/{MicroservicesTab-B0SZVty3.js → MicroservicesTab-Bhsf1soi.js} +12 -11
- package/dist/{MicroservicesTab-B0SZVty3.js.map → MicroservicesTab-Bhsf1soi.js.map} +1 -1
- package/dist/{MicroservicesTab-snXJDoYq.cjs → MicroservicesTab-Cuj56g8-.cjs} +3 -3
- package/dist/{MicroservicesTab-snXJDoYq.cjs.map → MicroservicesTab-Cuj56g8-.cjs.map} +1 -1
- package/dist/{OpenC3TimePicker-DpkbfbgC.js → OpenC3TimePicker-C3vCnk72.js} +20 -24
- package/dist/OpenC3TimePicker-C3vCnk72.js.map +1 -0
- package/dist/OpenC3TimePicker-CVUV2cK4.cjs +2 -0
- package/dist/OpenC3TimePicker-CVUV2cK4.cjs.map +1 -0
- package/dist/Openc3Screen-Bi6NOEQM.cjs +6 -0
- package/dist/{Openc3Screen-D1RLlBgQ.cjs.map → Openc3Screen-Bi6NOEQM.cjs.map} +1 -1
- package/dist/{Openc3Screen-DbUvz-3B.js → Openc3Screen-DkhDra2o.js} +67 -66
- package/dist/{Openc3Screen-DbUvz-3B.js.map → Openc3Screen-DkhDra2o.js.map} +1 -1
- package/dist/{OutputDialog-Ds-GdGyI.js → OutputDialog-D0ifesTw.js} +11 -10
- package/dist/{OutputDialog-Ds-GdGyI.js.map → OutputDialog-D0ifesTw.js.map} +1 -1
- package/dist/OutputDialog-DR9cJem2.cjs +2 -0
- package/dist/{OutputDialog-ChPCaQAE.cjs.map → OutputDialog-DR9cJem2.cjs.map} +1 -1
- package/dist/PackagesTab-B4sG5tHo.cjs +2 -0
- package/dist/{PackagesTab-BgQsbXRo.cjs.map → PackagesTab-B4sG5tHo.cjs.map} +1 -1
- package/dist/{PackagesTab-CWplBp_I.js → PackagesTab-Bb221-aM.js} +19 -18
- package/dist/{PackagesTab-CWplBp_I.js.map → PackagesTab-Bb221-aM.js.map} +1 -1
- package/dist/PluginsTab-Cbi_R9jL.cjs +6 -0
- package/dist/PluginsTab-Cbi_R9jL.cjs.map +1 -0
- package/dist/{PluginsTab-BiiL622n.js → PluginsTab-nWngR5kY.js} +275 -234
- package/dist/PluginsTab-nWngR5kY.js.map +1 -0
- package/dist/{ProgressbarWidget-D3ndYnq_.js → ProgressbarWidget-DPbAVjdC.js} +2 -2
- package/dist/{ProgressbarWidget-D3ndYnq_.js.map → ProgressbarWidget-DPbAVjdC.js.map} +1 -1
- package/dist/{ProgressbarWidget-DludJVUf.cjs → ProgressbarWidget-cPr3o6Nv.cjs} +2 -2
- package/dist/{ProgressbarWidget-DludJVUf.cjs.map → ProgressbarWidget-cPr3o6Nv.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-DX4h94p1.cjs → RadiobuttonWidget-BQZkRFa-.cjs} +2 -2
- package/dist/{RadiobuttonWidget-DX4h94p1.cjs.map → RadiobuttonWidget-BQZkRFa-.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-CP0S9nWW.js → RadiobuttonWidget-iXI9yCDk.js} +2 -2
- package/dist/{RadiobuttonWidget-CP0S9nWW.js.map → RadiobuttonWidget-iXI9yCDk.js.map} +1 -1
- package/dist/{RadiogroupWidget-BXHfA21T.js → RadiogroupWidget-CMM_p1eA.js} +2 -2
- package/dist/{RadiogroupWidget-BXHfA21T.js.map → RadiogroupWidget-CMM_p1eA.js.map} +1 -1
- package/dist/{RadiogroupWidget-NqjBNUH6.cjs → RadiogroupWidget-D2iIQ5RU.cjs} +2 -2
- package/dist/{RadiogroupWidget-NqjBNUH6.cjs.map → RadiogroupWidget-D2iIQ5RU.cjs.map} +1 -1
- package/dist/{RangebarWidget-Bv2DqkPo.js → RangebarWidget-DJXGUHAc.js} +2 -2
- package/dist/{RangebarWidget-Bv2DqkPo.js.map → RangebarWidget-DJXGUHAc.js.map} +1 -1
- package/dist/{RangebarWidget-CRq2zpvw.cjs → RangebarWidget-DsphX-jB.cjs} +2 -2
- package/dist/{RangebarWidget-CRq2zpvw.cjs.map → RangebarWidget-DsphX-jB.cjs.map} +1 -1
- package/dist/RedisTab-BZtfqEcP.js +186 -0
- package/dist/RedisTab-BZtfqEcP.js.map +1 -0
- package/dist/RedisTab-KhsG2CCO.cjs +2 -0
- package/dist/RedisTab-KhsG2CCO.cjs.map +1 -0
- package/dist/{RollupWidget-o_huYU0x.js → RollupWidget-BbWLSsTT.js} +2 -2
- package/dist/{RollupWidget-o_huYU0x.js.map → RollupWidget-BbWLSsTT.js.map} +1 -1
- package/dist/{RollupWidget-B7_Q_boi.cjs → RollupWidget-w-SF3f-X.cjs} +2 -2
- package/dist/{RollupWidget-B7_Q_boi.cjs.map → RollupWidget-w-SF3f-X.cjs.map} +1 -1
- package/dist/{RoutersTab-DN17iBBi.js → RoutersTab-CLKIJ5cm.js} +13 -12
- package/dist/{RoutersTab-DN17iBBi.js.map → RoutersTab-CLKIJ5cm.js.map} +1 -1
- package/dist/RoutersTab-DUvOfNhU.cjs +2 -0
- package/dist/{RoutersTab-CAbnSGHy.cjs.map → RoutersTab-DUvOfNhU.cjs.map} +1 -1
- package/dist/{ScriptChooser-CzzUJ1Zj.js → ScriptChooser-BxTJKTVu.js} +20 -19
- package/dist/{ScriptChooser-CzzUJ1Zj.js.map → ScriptChooser-BxTJKTVu.js.map} +1 -1
- package/dist/ScriptChooser-YC_FfCLd.cjs +2 -0
- package/dist/{ScriptChooser-CggwstfT.cjs.map → ScriptChooser-YC_FfCLd.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-kS5QjP-v.cjs → ScrollwindowWidget-D1mtHFMa.cjs} +2 -2
- package/dist/{ScrollwindowWidget-kS5QjP-v.cjs.map → ScrollwindowWidget-D1mtHFMa.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-DdjaML6D.js → ScrollwindowWidget-Dxhp7yKn.js} +2 -2
- package/dist/{ScrollwindowWidget-DdjaML6D.js.map → ScrollwindowWidget-Dxhp7yKn.js.map} +1 -1
- package/dist/SecretsTab-B7oZb354.cjs +2 -0
- package/dist/{SecretsTab-Cn6-o85L.cjs.map → SecretsTab-B7oZb354.cjs.map} +1 -1
- package/dist/{SecretsTab-Cu3sx2OA.js → SecretsTab-BoBmTh63.js} +5 -5
- package/dist/{SecretsTab-Cu3sx2OA.js.map → SecretsTab-BoBmTh63.js.map} +1 -1
- package/dist/SettingsTab-2EMyS-3_.cjs +3 -0
- package/dist/{SettingsTab-C6zIL2D6.cjs.map → SettingsTab-2EMyS-3_.cjs.map} +1 -1
- package/dist/{SettingsTab-B_vvSLvt.js → SettingsTab-BL7gkaO9.js} +7 -6
- package/dist/{SettingsTab-B_vvSLvt.js.map → SettingsTab-BL7gkaO9.js.map} +1 -1
- package/dist/{SignalWidget-Dd54y28I.js → SignalWidget-65q0tiuo.js} +2 -2
- package/dist/{SignalWidget-Dd54y28I.js.map → SignalWidget-65q0tiuo.js.map} +1 -1
- package/dist/{SignalWidget-BagcB92r.cjs → SignalWidget-Cld2lVyc.cjs} +2 -2
- package/dist/{SignalWidget-BagcB92r.cjs.map → SignalWidget-Cld2lVyc.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-DZv9n_kJ.js → SimpleTextDialog-ChmFtdVw.js} +2 -2
- package/dist/{SimpleTextDialog-DZv9n_kJ.js.map → SimpleTextDialog-ChmFtdVw.js.map} +1 -1
- package/dist/{SimpleTextDialog-BJ50TbWh.cjs → SimpleTextDialog-DVlqwD8O.cjs} +2 -2
- package/dist/{SimpleTextDialog-BJ50TbWh.cjs.map → SimpleTextDialog-DVlqwD8O.cjs.map} +1 -1
- package/dist/{SpacerWidget-GPFYtIG1.js → SpacerWidget-DFzbojmX.js} +2 -2
- package/dist/{SpacerWidget-GPFYtIG1.js.map → SpacerWidget-DFzbojmX.js.map} +1 -1
- package/dist/{SpacerWidget-DWjBns9r.cjs → SpacerWidget-DV0-ZfEm.cjs} +2 -2
- package/dist/{SpacerWidget-DWjBns9r.cjs.map → SpacerWidget-DV0-ZfEm.cjs.map} +1 -1
- package/dist/SparklineWidget-B1RfTxEp.cjs +2 -0
- package/dist/{SparklineWidget-xdPgolp3.cjs.map → SparklineWidget-B1RfTxEp.cjs.map} +1 -1
- package/dist/{SparklineWidget-f11nrlLS.js → SparklineWidget-Bu4I8zY0.js} +10 -9
- package/dist/{SparklineWidget-f11nrlLS.js.map → SparklineWidget-Bu4I8zY0.js.map} +1 -1
- package/dist/{TabbookWidget-DeaC27yC.js → TabbookWidget-CELMWyx7.js} +2 -2
- package/dist/{TabbookWidget-DeaC27yC.js.map → TabbookWidget-CELMWyx7.js.map} +1 -1
- package/dist/{TabbookWidget-CUIYWHRH.cjs → TabbookWidget-CLpx5e5Q.cjs} +2 -2
- package/dist/{TabbookWidget-CUIYWHRH.cjs.map → TabbookWidget-CLpx5e5Q.cjs.map} +1 -1
- package/dist/{TargetPacketItemChooser-BoBqvs3T.js → TargetPacketItemChooser-BOdVLVbe.js} +177 -153
- package/dist/TargetPacketItemChooser-BOdVLVbe.js.map +1 -0
- package/dist/TargetPacketItemChooser-xoRA3b9K.cjs +2 -0
- package/dist/TargetPacketItemChooser-xoRA3b9K.cjs.map +1 -0
- package/dist/{TargetsTab-CjVaBN9O.js → TargetsTab-BJZEtKY4.js} +11 -10
- package/dist/{TargetsTab-CjVaBN9O.js.map → TargetsTab-BJZEtKY4.js.map} +1 -1
- package/dist/TargetsTab-Dkp4VoK6.cjs +2 -0
- package/dist/{TargetsTab-BMcWjrZ_.cjs.map → TargetsTab-Dkp4VoK6.cjs.map} +1 -1
- package/dist/{TextboxWidget-tL41zWUX.js → TextboxWidget-DYsqXntS.js} +7 -6
- package/dist/{TextboxWidget-tL41zWUX.js.map → TextboxWidget-DYsqXntS.js.map} +1 -1
- package/dist/TextboxWidget-DuNmhz89.cjs +2 -0
- package/dist/{TextboxWidget-CXA9rR02.cjs.map → TextboxWidget-DuNmhz89.cjs.map} +1 -1
- package/dist/{TextfieldWidget-D1qj14Qi.js → TextfieldWidget-BIUgV9Q4.js} +2 -2
- package/dist/{TextfieldWidget-D1qj14Qi.js.map → TextfieldWidget-BIUgV9Q4.js.map} +1 -1
- package/dist/{TextfieldWidget-D-H2fOZG.cjs → TextfieldWidget-BlW-rSVv.cjs} +2 -2
- package/dist/{TextfieldWidget-D-H2fOZG.cjs.map → TextfieldWidget-BlW-rSVv.cjs.map} +1 -1
- package/dist/{TimeWidget-CSVGNong.js → TimeWidget-BPXcY1Wy.js} +7 -6
- package/dist/{TimeWidget-CSVGNong.js.map → TimeWidget-BPXcY1Wy.js.map} +1 -1
- package/dist/TimeWidget-BddmbQgt.cjs +2 -0
- package/dist/{TimeWidget-CGk8Ze_I.cjs.map → TimeWidget-BddmbQgt.cjs.map} +1 -1
- package/dist/{TitleWidget-ClhWhUf3.cjs → TitleWidget-CPqwZKUx.cjs} +2 -2
- package/dist/{TitleWidget-ClhWhUf3.cjs.map → TitleWidget-CPqwZKUx.cjs.map} +1 -1
- package/dist/{TitleWidget-CLx-tuYT.js → TitleWidget-DJ9mHRLE.js} +2 -2
- package/dist/{TitleWidget-CLx-tuYT.js.map → TitleWidget-DJ9mHRLE.js.map} +1 -1
- package/dist/ToolsTab-B4CURni4.cjs +2 -0
- package/dist/{ToolsTab-DTHap-Nq.cjs.map → ToolsTab-B4CURni4.cjs.map} +1 -1
- package/dist/{ToolsTab-lBB_KhmA.js → ToolsTab-VSCWDywf.js} +62 -61
- package/dist/{ToolsTab-lBB_KhmA.js.map → ToolsTab-VSCWDywf.js.map} +1 -1
- package/dist/{TopBar-C810rP_B.js → TopBar-B4oz2FsN.js} +2 -2
- package/dist/{TopBar-C810rP_B.js.map → TopBar-B4oz2FsN.js.map} +1 -1
- package/dist/{TopBar-Ctzx7o2k.cjs → TopBar-lcB6jpd_.cjs} +2 -2
- package/dist/{TopBar-Ctzx7o2k.cjs.map → TopBar-lcB6jpd_.cjs.map} +1 -1
- package/dist/TsdbTab-Cv8GjpoJ.js +1164 -0
- package/dist/TsdbTab-Cv8GjpoJ.js.map +1 -0
- package/dist/TsdbTab-OOO451j0.cjs +5 -0
- package/dist/TsdbTab-OOO451j0.cjs.map +1 -0
- package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js → UpgradeToEnterpriseDialog-BUuXsGPY.js} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js.map → UpgradeToEnterpriseDialog-BUuXsGPY.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs → UpgradeToEnterpriseDialog-DHLK6v6f.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map → UpgradeToEnterpriseDialog-DHLK6v6f.cjs.map} +1 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs +1477 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js +26306 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js.map +1 -0
- package/dist/VWidget-B6WHN0_z.cjs +2 -0
- package/dist/VWidget-B6WHN0_z.cjs.map +1 -0
- package/dist/{VWidget-CxnaMF0w.js → VWidget-BDy0211S.js} +17 -20
- package/dist/VWidget-BDy0211S.js.map +1 -0
- package/dist/{ValueWidget-BYgpXfDo.js → ValueWidget-DzOSy7lp.js} +7 -6
- package/dist/{ValueWidget-BYgpXfDo.js.map → ValueWidget-DzOSy7lp.js.map} +1 -1
- package/dist/ValueWidget-QWzoEFXc.cjs +2 -0
- package/dist/{ValueWidget-Bws1qOEI.cjs.map → ValueWidget-QWzoEFXc.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs → ValuelimitsbarWidget-5AkAljK-.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs.map → ValuelimitsbarWidget-5AkAljK-.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js → ValuelimitsbarWidget-D5dSlW6D.js} +4 -4
- package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js.map → ValuelimitsbarWidget-D5dSlW6D.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js → ValuelimitscolumnWidget-7DXCsVW_.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js.map → ValuelimitscolumnWidget-7DXCsVW_.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs → ValuelimitscolumnWidget-zNx9i1v7.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs.map → ValuelimitscolumnWidget-zNx9i1v7.cjs.map} +1 -1
- package/dist/{ValuerangebarWidget-DmhczZQb.js → ValuerangebarWidget-BWjnpmyy.js} +4 -4
- package/dist/{ValuerangebarWidget-DmhczZQb.js.map → ValuerangebarWidget-BWjnpmyy.js.map} +1 -1
- package/dist/{ValuerangebarWidget-Ips-beG6.cjs → ValuerangebarWidget-EsdIz4oP.cjs} +2 -2
- package/dist/{ValuerangebarWidget-Ips-beG6.cjs.map → ValuerangebarWidget-EsdIz4oP.cjs.map} +1 -1
- package/dist/{VerticalWidget-BvsVh0Ob.js → VerticalWidget-BOtXAhxt.js} +2 -2
- package/dist/{VerticalWidget-BvsVh0Ob.js.map → VerticalWidget-BOtXAhxt.js.map} +1 -1
- package/dist/{VerticalWidget-BVt7QPjO.cjs → VerticalWidget-DVskS6fx.cjs} +2 -2
- package/dist/{VerticalWidget-BVt7QPjO.cjs.map → VerticalWidget-DVskS6fx.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-CNoXT3YW.cjs → VerticalboxWidget-Bu4oHN2K.cjs} +2 -2
- package/dist/{VerticalboxWidget-CNoXT3YW.cjs.map → VerticalboxWidget-Bu4oHN2K.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-ClTCDCQN.js → VerticalboxWidget-RAsXfGdI.js} +5 -5
- package/dist/{VerticalboxWidget-ClTCDCQN.js.map → VerticalboxWidget-RAsXfGdI.js.map} +1 -1
- package/dist/{Widget-DRhVdCLP.js → Widget-BDsgRxuV.js} +37 -14
- package/dist/{Widget-DRhVdCLP.js.map → Widget-BDsgRxuV.js.map} +1 -1
- package/dist/Widget-Ddu_kuTL.cjs +2 -0
- package/dist/{Widget-CB_BtOFw.cjs.map → Widget-Ddu_kuTL.cjs.map} +1 -1
- package/dist/{addMonths-Zggd7y6j.js → addMonths-BiRF9eDT.js} +2 -2
- package/dist/{addMonths-Zggd7y6j.js.map → addMonths-BiRF9eDT.js.map} +1 -1
- package/dist/{addMonths-BhOW2mOW.cjs → addMonths-Ds2ObZwt.cjs} +2 -2
- package/dist/{addMonths-BhOW2mOW.cjs.map → addMonths-Ds2ObZwt.cjs.map} +1 -1
- package/dist/components.cjs +2 -2
- package/dist/components.js +28 -28
- package/dist/format-D2pYLAIF.js +5896 -0
- package/dist/format-D2pYLAIF.js.map +1 -0
- package/dist/format-qjtPogBb.cjs +13 -0
- package/dist/format-qjtPogBb.cjs.map +1 -0
- package/dist/getDefaultOptions-DSMQojSA.cjs +2 -0
- package/dist/{getDefaultOptions-Cek5kGzE.cjs.map → getDefaultOptions-DSMQojSA.cjs.map} +1 -1
- package/dist/getDefaultOptions-v3X-F5jM.js +8 -0
- package/dist/{getDefaultOptions-xjgn1r-_.js.map → getDefaultOptions-v3X-F5jM.js.map} +1 -1
- package/dist/{index-GYAZJDxn.js → index-BJCQaZ7q.js} +63 -62
- package/dist/{index-GYAZJDxn.js.map → index-BJCQaZ7q.js.map} +1 -1
- package/dist/{index-CJcL4_a4.js → index-BjcgyMLV.js} +691 -633
- package/dist/index-BjcgyMLV.js.map +1 -0
- package/dist/{index-3sXOEKCU.cjs → index-CctPeecq.cjs} +5 -5
- package/dist/{index-3sXOEKCU.cjs.map → index-CctPeecq.cjs.map} +1 -1
- package/dist/index-_a-NnvKv.cjs +10 -0
- package/dist/index-_a-NnvKv.cjs.map +1 -0
- package/dist/{parse-BKTTGw2p.js → parse-Br4M7sX4.js} +3 -3
- package/dist/{parse-BKTTGw2p.js.map → parse-Br4M7sX4.js.map} +1 -1
- package/dist/{parse-DgZTYocC.cjs → parse-D8syXcjd.cjs} +2 -2
- package/dist/{parse-DgZTYocC.cjs.map → parse-D8syXcjd.cjs.map} +1 -1
- package/dist/plugins.cjs +1 -1
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/purify.es-CehoGjrR.cjs +3 -0
- package/dist/purify.es-CehoGjrR.cjs.map +1 -0
- package/dist/purify.es-exIQuqhb.js +596 -0
- package/dist/purify.es-exIQuqhb.js.map +1 -0
- package/dist/settings-CWvCIKI4.cjs +2 -0
- package/dist/{settings-B0AhztTk.cjs.map → settings-CWvCIKI4.cjs.map} +1 -1
- package/dist/{settings-C2auUQwX.js → settings-Dvmurty6.js} +2 -2
- package/dist/{settings-C2auUQwX.js.map → settings-Dvmurty6.js.map} +1 -1
- package/dist/settingsCache-CGgEjlw3.js +28 -0
- package/dist/settingsCache-CGgEjlw3.js.map +1 -0
- package/dist/settingsCache-Dg7OMDJK.cjs +2 -0
- package/dist/settingsCache-Dg7OMDJK.cjs.map +1 -0
- package/dist/{timeFilters-CRNRsUsb.cjs → timeFilters-BtN2a5-O.cjs} +2 -2
- package/dist/{timeFilters-CRNRsUsb.cjs.map → timeFilters-BtN2a5-O.cjs.map} +1 -1
- package/dist/{timeFilters-DTOZtBlG.js → timeFilters-C1beMtAQ.js} +3 -3
- package/dist/{timeFilters-DTOZtBlG.js.map → timeFilters-C1beMtAQ.js.map} +1 -1
- package/dist/tools/admin.cjs +1 -1
- package/dist/tools/admin.js +1 -1
- package/dist/tools/base.cjs +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.js +51 -51
- package/dist/tools/calendar.cjs +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/scriptrunner.cjs +8 -8
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +17 -17
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/util.cjs +1 -1
- package/dist/util.js +11 -7
- package/dist/util.js.map +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +64 -64
- package/package.json +7 -7
- package/dist/ArrayplotWidget-BHD-TGQO.cjs +0 -2
- package/dist/BarColumn-DmjMnw5l.js.map +0 -1
- package/dist/BarColumn-Ym4P8YHC.cjs +0 -2
- package/dist/BarColumn-Ym4P8YHC.cjs.map +0 -1
- package/dist/ButtonWidget-70hNWuEy.cjs +0 -3
- package/dist/ButtonWidget-70hNWuEy.cjs.map +0 -1
- package/dist/ButtonWidget-DZ4VCNWU.js.map +0 -1
- package/dist/ClassificationBanners-DjGCuH-4.cjs +0 -2
- package/dist/CriticalCmdDialog-eytxCQto.cjs +0 -2
- package/dist/DateWidget-Cle8FY8Q.cjs +0 -2
- package/dist/DetailsDialog-BcMaTfuQ.cjs +0 -2
- package/dist/EventListDialog-DjCQAwGl.js.map +0 -1
- package/dist/EventListDialog-EmC7YW60.cjs +0 -2
- package/dist/EventListDialog-EmC7YW60.cjs.map +0 -1
- package/dist/FilechecksumWidget-2ta-UvLp.cjs +0 -2
- package/dist/FiledisplayWidget-BUKXIQir.cjs +0 -2
- package/dist/Graph-CUFzx8Ti.js.map +0 -1
- package/dist/Graph-qxF4224c.cjs +0 -2
- package/dist/Graph-qxF4224c.cjs.map +0 -1
- package/dist/GraphWidget-BvCQHVxQ.cjs +0 -2
- package/dist/ImageLoader-BTEOukIw.cjs +0 -2
- package/dist/InterfacesTab-CM0CGFVS.cjs +0 -2
- package/dist/LabelvalueWidget-_1JPbK-K.js.map +0 -1
- package/dist/LabelvalueWidget-bYqqgIGE.cjs +0 -2
- package/dist/LabelvalueWidget-bYqqgIGE.cjs.map +0 -1
- package/dist/LabelvaluedescWidget-B2dFZoDE.cjs +0 -2
- package/dist/LabelvaluedescWidget-B2dFZoDE.cjs.map +0 -1
- package/dist/LabelvaluedescWidget-BgduSJJb.js +0 -59
- package/dist/LabelvaluedescWidget-BgduSJJb.js.map +0 -1
- package/dist/LedWidget-BaiKDozd.cjs +0 -2
- package/dist/LimitscolorWidget-veWQ4NXl.cjs +0 -2
- package/dist/LinegraphWidget-3E8L5CvM.cjs +0 -2
- package/dist/OpenC3TimePicker-DpkbfbgC.js.map +0 -1
- package/dist/OpenC3TimePicker-Yl1jVi7p.cjs +0 -2
- package/dist/OpenC3TimePicker-Yl1jVi7p.cjs.map +0 -1
- package/dist/Openc3Screen-D1RLlBgQ.cjs +0 -6
- package/dist/OutputDialog-ChPCaQAE.cjs +0 -2
- package/dist/PackagesTab-BgQsbXRo.cjs +0 -2
- package/dist/PluginsTab-BiiL622n.js.map +0 -1
- package/dist/PluginsTab-RgIMk-F7.cjs +0 -6
- package/dist/PluginsTab-RgIMk-F7.cjs.map +0 -1
- package/dist/RedisTab-7TbOXFA_.js +0 -171
- package/dist/RedisTab-7TbOXFA_.js.map +0 -1
- package/dist/RedisTab-DpWPY1P0.cjs +0 -2
- package/dist/RedisTab-DpWPY1P0.cjs.map +0 -1
- package/dist/RoutersTab-CAbnSGHy.cjs +0 -2
- package/dist/ScriptChooser-CggwstfT.cjs +0 -2
- package/dist/SecretsTab-Cn6-o85L.cjs +0 -2
- package/dist/SettingsTab-C6zIL2D6.cjs +0 -3
- package/dist/SparklineWidget-xdPgolp3.cjs +0 -2
- package/dist/TargetPacketItemChooser-BoBqvs3T.js.map +0 -1
- package/dist/TargetPacketItemChooser-C0Z90rss.cjs +0 -2
- package/dist/TargetPacketItemChooser-C0Z90rss.cjs.map +0 -1
- package/dist/TargetsTab-BMcWjrZ_.cjs +0 -2
- package/dist/TextboxWidget-CXA9rR02.cjs +0 -2
- package/dist/TimeWidget-CGk8Ze_I.cjs +0 -2
- package/dist/ToolsTab-DTHap-Nq.cjs +0 -2
- package/dist/TsdbTab-7F4mRKDo.js +0 -125
- package/dist/TsdbTab-7F4mRKDo.js.map +0 -1
- package/dist/TsdbTab-DVF6n9mq.cjs +0 -2
- package/dist/TsdbTab-DVF6n9mq.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js +0 -30891
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs +0 -1485
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs.map +0 -1
- package/dist/VWidget-CxnaMF0w.js.map +0 -1
- package/dist/VWidget-dEHSEvZx.cjs +0 -2
- package/dist/VWidget-dEHSEvZx.cjs.map +0 -1
- package/dist/ValueWidget-Bws1qOEI.cjs +0 -2
- package/dist/Widget-CB_BtOFw.cjs +0 -2
- package/dist/format-CJYjW-xx.js +0 -1252
- package/dist/format-CJYjW-xx.js.map +0 -1
- package/dist/format-DOZQNf-X.cjs +0 -2
- package/dist/format-DOZQNf-X.cjs.map +0 -1
- package/dist/getDefaultOptions-Cek5kGzE.cjs +0 -2
- package/dist/getDefaultOptions-xjgn1r-_.js +0 -8
- package/dist/index-B34azWgs.cjs +0 -7
- package/dist/index-B34azWgs.cjs.map +0 -1
- package/dist/index-CJcL4_a4.js.map +0 -1
- package/dist/purify.es-4pyphLiB.cjs +0 -3
- package/dist/purify.es-4pyphLiB.cjs.map +0 -1
- package/dist/purify.es-BPDBzHtc.js +0 -553
- package/dist/purify.es-BPDBzHtc.js.map +0 -1
- package/dist/settings-B0AhztTk.cjs +0 -2
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("./format-qjtPogBb.cjs");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs");const e=require("vue"),k=require("./CustomIcon-8F08upeg.cjs"),L=require("./timeFilters-BtN2a5-O.cjs");require("./store-CiS35N-w.cjs");require("single-spa");const K=require("./SimpleTextDialog-DVlqwD8O.cjs"),S=require("./index-CctPeecq.cjs"),R=require("./settings-CWvCIKI4.cjs"),j="store_url",B="https://store.openc3.com",T={props:{id:Number,name:String,title:String,author:String,author_extra:Object,description:String,keywords:Array,img_path:String,image_url:String,licenses:Array,homepage:String,repository:String,gem_url:String,minimum_cosmos_version:String,checksum:String,versions:Array,current_version_id:Number,access:String,entitled:Boolean,installAllowed:{type:Boolean,default:!0}},data:function(){return{_api:new g.Ri,_storeUrl:"",imageContents:null}},computed:{plugin:function(){return{id:this.id,name:this.name,title:this.title,author:this.author,author_extra:this.author_extra,description:this.description,keywords:this.keywords,img_path:this.img_path,image_url:this.image_url,licenses:this.licenses,homepage:this.homepage,repository:this.repository,gem_url:this.gem_url,minimum_cosmos_version:this.minimum_cosmos_version,checksum:this.checksum,versions:this.versions,current_version_id:this.current_version_id,access:this.access,entitled:this.entitled,installAllowed:this.installAllowed}},canInstall:function(){return this.entitled&&this.installAllowed},installTooltip:function(){return this.installAllowed?this.accessTooltip:"Only admin users can install plugins."},imageContentsWithMimeType:function(){if(this.imageContents){const t={"image/bmp":[66,77],"image/jpeg":[255,216,255],"image/png":[137,80,78,71],"image/gif":[71,73,70,56],"image/webp":[82,73,70,70]},o=new TextEncoder().encode(globalThis.atob(this.imageContents.slice(0,6))).slice(1),l=Object.entries(t).find(([c,i])=>i.every((n,a)=>n===o[a]));if(l){const[c]=l;return`data:${c};base64,${this.imageContents}`}}},_navigableStoreUrl:function(){return this._storeUrl.replace("host.docker.internal","localhost")},storeLink:function(){return this.hasStoreListing&&this._navigableStoreUrl?new URL(`/cosmos_plugins/${this.id}`,this._navigableStoreUrl):null},hasStoreListing:function(){return!!this.id},hasDetails:function(){return this.hasStoreListing?!0:!!this.title&&!!this.description},isPluginInstalled:function(){return!!this.name},accessTooltip:function(){return this.entitled?"":localStorage.getItem("pluginStore.isApiKeySet")!=="true"?"Please add your App Store API key using the settings cog icon.":this.access==="enterprise"?"A COSMOS Enterprise license is required for this plugin.":"Please contact sales@openc3.com for access to this plugin."}},created:async function(){try{this._storeUrl=await this._api.get_setting(j)||B}catch{this._storeUrl=B}if(this.img_path)try{const t=new URLSearchParams({volume:"OPENC3_GEMS_VOLUME",scope:globalThis.openc3Scope}),{data:o}=await g.Br.get(`/openc3-api/storage/download_file/${encodeURIComponent(this.img_path)}?${t}`);this.imageContents=o.contents}catch{}}},z={mixins:[T],props:{modelValue:Boolean},emits:["triggerInstall","triggerUninstall","update:modelValue"],data(){return{showDialog:!1,showCopiedTooltip:!1,installedCosmosVersion:null,selectedVersionId:null}},computed:{isDialogOpen:{get:function(){return this.modelValue||this.showDialog},set:function(t){this.showDialog=t,this.$emit("update:modelValue",t)}},hasVersions:function(){return this.versions&&this.versions.length>0},selectedVersion:function(){if(!this.hasVersions)return null;const t=this.selectedVersionId||this.current_version_id;return this.versions.find(o=>o.id===t)||this.versions[0]},versionOptions:function(){return this.hasVersions?this.versions.map(t=>({title:t.version_number,value:t.id})):[]},versionTitle:function(){return this.selectedVersion?.title||this.title},versionDescription:function(){return this.selectedVersion?.description||this.description},versionKeywords:function(){return this.selectedVersion?.keywords||this.keywords},versionLicenses:function(){return this.selectedVersion?.licenses||this.licenses},versionHomepage:function(){return this.selectedVersion?.homepage||this.homepage},versionRepository:function(){return this.selectedVersion?.repository||this.repository},versionGemUrl:function(){return this.selectedVersion?.gem_url||this.gem_url},versionMinimumCosmosVersion:function(){return this.selectedVersion?.minimum_cosmos_version||this.minimum_cosmos_version},versionChecksum:function(){return this.selectedVersion?.checksum||this.checksum},versionImageUrl:function(){return this.selectedVersion?.image_url||this.image_url},formattedStoreLink:function(){return this._navigableStoreUrl.split("://").at(-1)},versionsAreCompatible:function(){return!this.installedCosmosVersion||!this.versionMinimumCosmosVersion?null:S.semverExports.gte(this.installedCosmosVersion,this.versionMinimumCosmosVersion)}},created:function(){g.Br.get("/openc3-api/info").then(({data:t})=>{this.installedCosmosVersion=t.version})},mounted:function(){this.selectedVersionId=this.current_version_id},methods:{openDialog:function(){this.isDialogOpen=!0},closeDialog:function(){this.isDialogOpen=!1},install:function(){this.$emit("triggerInstall",{id:this.id,version_id:this.selectedVersionId||this.current_version_id})},uninstall:function(){this.$emit("triggerUninstall",{id:this.id,version_id:this.selectedVersionId||this.current_version_id})},copyChecksum:function(){navigator.clipboard.writeText(this.versionChecksum),this.showCopiedTooltip=!0,setTimeout(()=>{this.showCopiedTooltip=!1},1e3)}}},F=["textContent"],q={key:0,class:"ml-1 font-italic"},H={class:"plugin-image-backdrop"},G=["textContent"],Y={class:"mt-3 text-caption font-italic"},W={key:1,class:"font-italic"},Z={class:"mt-3 text-caption font-italic"},J={class:"mt-3"},Q={key:0},X={key:1};function $(t,o,l,c,i,n){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-toolbar"),h=e.resolveComponent("v-icon"),_=e.resolveComponent("v-select"),m=e.resolveComponent("v-card-subtitle"),v=e.resolveComponent("v-img"),C=e.resolveComponent("v-chip"),w=e.resolveComponent("v-text-field"),x=e.resolveComponent("v-card-text"),d=e.resolveComponent("v-card-actions"),V=e.resolveComponent("v-card"),N=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(N,{modelValue:n.isDialogOpen,"onUpdate:modelValue":o[3]||(o[3]=p=>n.isDialogOpen=p),"max-width":"500"},{default:e.withCtx(()=>[e.createVNode(V,null,{default:e.withCtx(()=>[e.createVNode(f,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),e.createElementVNode("span",{textContent:e.toDisplayString(n.versionTitle)},null,8,F),e.createVNode(a),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:p})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(p)),[e.createVNode(r,{href:t.storeLink,target:"_blank",icon:"mdi-open-in-new",size:"small",variant:"plain"},null,8,["href"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null," View at "+e.toDisplayString(n.formattedStoreLink),1)]),_:1}),e.createVNode(r,{icon:"mdi-close-box",variant:"text",density:"compact",onClick:n.closeDialog},null,8,["onClick"])]),_:1}),e.createVNode(m,{class:"d-flex align-center justify-space-between subtitle-with-version"},{default:e.withCtx(()=>[e.createElementVNode("div",null,[o[4]||(o[4]=e.createTextVNode(" By ",-1)),e.createElementVNode("strong",null,e.toDisplayString(t.author),1),t.author_extra?.badge_text?(e.openBlock(),e.createElementBlock("span",q,e.toDisplayString(t.author_extra.badge_text),1)):e.createCommentVNode("",!0),t.author_extra?.badge_icon?(e.openBlock(),e.createBlock(h,{key:1,icon:t.author_extra.badge_icon,size:18,class:"ml-1"},null,8,["icon"])):e.createCommentVNode("",!0)]),n.hasVersions?(e.openBlock(),e.createBlock(_,{key:0,modelValue:i.selectedVersionId,"onUpdate:modelValue":o[0]||(o[0]=p=>i.selectedVersionId=p),items:n.versionOptions,"item-title":"title","item-value":"value",label:"Version",density:"compact",variant:"outlined","hide-details":"",class:"mt-1 version-select"},null,8,["modelValue","items"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("div",H,[t.imageContentsWithMimeType?(e.openBlock(),e.createBlock(v,{key:0,src:t.imageContentsWithMimeType},null,8,["src"])):n.versionImageUrl?(e.openBlock(),e.createBlock(v,{key:1,src:n.versionImageUrl},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"mt-3",textContent:e.toDisplayString(n.versionDescription)},null,8,G),e.createElementVNode("div",Y,[o[5]||(o[5]=e.createTextVNode(" Keywords: ",-1)),n.versionKeywords?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(n.versionKeywords,p=>(e.openBlock(),e.createBlock(C,{key:p,variant:"flat",color:"primary",size:"x-small",class:"ml-1"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p),1)]),_:2},1024))),128)):(e.openBlock(),e.createElementBlock("span",W," none "))]),e.createElementVNode("div",Z,[o[6]||(o[6]=e.createTextVNode(" Licenses: ",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.versionLicenses,p=>(e.openBlock(),e.createBlock(C,{key:p,size:"x-small",class:"ml-1"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(p),1)]),_:2},1024))),128))]),e.createElementVNode("div",J,[o[7]||(o[7]=e.createElementVNode("span",{class:"text-caption font-italic"}," Minimum COSMOS version: ",-1)),e.createTextVNode(" "+e.toDisplayString(n.versionMinimumCosmosVersion)+" ",1),n.versionsAreCompatible!==null?(e.openBlock(),e.createBlock(s,{key:0,"open-delay":600,location:"top"},{activator:e.withCtx(({props:p})=>[e.createElementVNode("span",e.normalizeProps(e.guardReactiveProps(p)),[e.createVNode(h,{icon:n.versionsAreCompatible?"mdi-check-circle":"mdi-alert",size:"small"},null,8,["icon"])],16)]),default:e.withCtx(()=>[n.versionsAreCompatible?(e.openBlock(),e.createElementBlock("span",Q," Your version of COSMOS meets the requirements. ")):(e.openBlock(),e.createElementBlock("span",X," Your version of COSMOS is out of date. You can still install this plugin, but it might not work correctly. "))]),_:1})):e.createCommentVNode("",!0)]),e.createVNode(w,{modelValue:n.versionChecksum,"onUpdate:modelValue":o[2]||(o[2]=p=>n.versionChecksum=p),class:"mt-3",label:"SHA256",variant:"solo",density:"compact","hide-details":"",readonly:""},{append:e.withCtx(()=>[e.createVNode(s,{modelValue:i.showCopiedTooltip,"onUpdate:modelValue":o[1]||(o[1]=p=>i.showCopiedTooltip=p),location:"top","open-on-hover":!1},{activator:e.withCtx(({props:p})=>[e.createVNode(r,e.mergeProps(p,{icon:"mdi-content-copy",variant:"text",density:"compact",onClick:n.copyChecksum}),null,16,["onClick"])]),default:e.withCtx(()=>[o[8]||(o[8]=e.createElementVNode("span",null,"Copied!",-1))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])]),_:1}),e.createVNode(d,{class:"justify-start px-6"},{default:e.withCtx(()=>[t.isPluginInstalled?(e.openBlock(),e.createBlock(r,{key:0,text:"Uninstall","append-icon":"mdi-puzzle-remove",variant:"outlined",color:"red",onClick:n.uninstall},null,8,["onClick"])):(e.openBlock(),e.createBlock(s,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:p})=>[e.createElementVNode("span",e.normalizeProps(e.guardReactiveProps(t.canInstall?null:p)),[e.createVNode(r,{text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",disabled:!t.canInstall,onClick:n.install},null,8,["disabled","onClick"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(t.installTooltip),1)]),_:1})),n.versionRepository?(e.openBlock(),e.createBlock(r,{key:2,text:"Repository","append-icon":"mdi-open-in-new",variant:"outlined",href:n.versionRepository,target:"_blank"},null,8,["href"])):e.createCommentVNode("",!0),n.versionHomepage?(e.openBlock(),e.createBlock(r,{key:3,text:"Homepage","append-icon":"mdi-open-in-new",variant:"outlined",href:n.versionHomepage,target:"_blank"},null,8,["href"])):e.createCommentVNode("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"])}const E=k._export_sfc(z,[["render",$],["__scopeId","data-v-ac4e664f"]]),ee={components:{PluginDetailsDialog:E},mixins:[T],emits:["triggerInstall"],data(){return{showDialog:!1}},methods:{openDialog:function(){this.showDialog=!0},install:function(t){this.$emit("triggerInstall",{id:this.id,version_id:t?.version_id||this.current_version_id})}}},te={key:0,class:"ml-1 font-italic"},oe={class:"plugin-image-backdrop"},ne=["textContent"];function ie(t,o,l,c,i,n){const a=e.resolveComponent("v-card-title"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-card-subtitle"),f=e.resolveComponent("v-img"),h=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-btn"),v=e.resolveComponent("v-tooltip"),C=e.resolveComponent("v-card-actions"),w=e.resolveComponent("v-card"),x=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(w,{height:"350",class:"d-flex flex-column",onClick:n.openDialog},{default:e.withCtx(()=>[e.createVNode(a,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.title),1)]),_:1}),e.createVNode(s,{class:"d-flex align-center justify-content-space-between"},{default:e.withCtx(()=>[e.createElementVNode("div",null,[o[1]||(o[1]=e.createTextVNode(" By ",-1)),e.createElementVNode("strong",null,e.toDisplayString(t.author),1),t.author_extra?.badge_text?(e.openBlock(),e.createElementBlock("span",te,e.toDisplayString(t.author_extra.badge_text),1)):e.createCommentVNode("",!0),t.author_extra?.badge_icon?(e.openBlock(),e.createBlock(r,{key:1,icon:t.author_extra.badge_icon,size:18,class:"ml-1"},null,8,["icon"])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[e.createElementVNode("div",oe,[t.image_url?(e.openBlock(),e.createBlock(f,{key:0,src:t.image_url,"max-height":"160"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:e.normalizeClass({"truncate-description":!0,"truncate-2":!!t.image_url,"truncate-10":!t.image_url}),textContent:e.toDisplayString(t.description)},null,10,ne)]),_:1}),e.createVNode(_),e.createVNode(C,{class:"flex-wrap"},{default:e.withCtx(()=>[e.createVNode(v,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:d})=>[e.createElementVNode("span",e.normalizeProps(e.guardReactiveProps(t.canInstall?null:d)),[e.createVNode(m,{text:"Install","append-icon":"mdi-puzzle-plus",variant:"elevated",disabled:!t.canInstall,onClick:e.withModifiers(n.install,["stop"])},null,8,["disabled","onClick"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(t.installTooltip),1)]),_:1})]),_:1})]),_:1},8,["onClick"]),i.showDialog?(e.openBlock(),e.createBlock(x,e.mergeProps({key:0,modelValue:i.showDialog,"onUpdate:modelValue":o[0]||(o[0]=d=>i.showDialog=d)},t.plugin,{onTriggerInstall:n.install}),null,16,["modelValue","onTriggerInstall"])):e.createCommentVNode("",!0)],64)}const le=k._export_sfc(ee,[["render",ie],["__scopeId","data-v-825f4373"]]),P="store_url",b="store_api_key",y="DEFAULT",se="https://store.openc3.com",re={mixins:[R.Settings],props:{modelValue:Boolean},emits:["update:modelValue","update:storeUrl"],data(){return{showDialog:!1,storeUrl:"",apiKey:null,isEnterprise:!1,showApiKeyAlert:!1,suppressApiKeyAlert:!1,rules:{required:t=>!!t||"Required",url:t=>{try{new URL(t)}catch{return"Not a valid URL"}return!0}}}},computed:{accountSettingsUrl:function(){const t=this.storeUrl.replace("host.docker.internal","localhost");return new URL("account",t)}},watch:{apiKey:function(t){this.checkEnterpriseKey(),localStorage.setItem("pluginStore.isApiKeySet",!!t)},isEnterprise:function(t){this.checkEnterpriseKey()},suppressApiKeyAlert:function(t){localStorage.setItem("pluginStore.suppressApiKeyAlert",t)},modelValue:function(t){t&&(this.showDialog=t)},showDialog:function(t){t||this.$emit("update:modelValue",t)}},created:function(){g.Br.get("/openc3-api/info").then(({data:t})=>{this.isEnterprise=t.enterprise}),this.loadSetting(P,{scope:y}),this.loadSetting(b,{scope:y}),this.$emit("update:storeUrl",this.storeUrl)},methods:{checkEnterpriseKey:function(){this.isEnterprise&&this.apiKey===""&&this.openApiKeyAlert()},openApiKeyAlert:function(){localStorage.getItem("pluginStore.suppressApiKeyAlert")!=="true"&&(this.showApiKeyAlert=!0)},closeApiKeyAlert:function(){this.showApiKeyAlert=!1},save:function(){this.saveSetting(P,this.storeUrl,{scope:y}),this.saveSetting(b,this.apiKey,{scope:y}),this.$emit("update:storeUrl",this.storeUrl),this.showDialog=!1},parseSetting:function(t,{setting:o}){switch(o){case P:this.storeUrl=t||se;break;case b:this.apiKey=t||"";break}}}},ae=["href"];function ce(t,o,l,c,i,n){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-toolbar"),s=e.resolveComponent("v-alert"),f=e.resolveComponent("v-text-field"),h=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),m=e.resolveComponent("v-card-actions"),v=e.resolveComponent("v-card"),C=e.resolveComponent("v-dialog"),w=e.resolveComponent("v-icon"),x=e.resolveComponent("v-checkbox");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(C,{modelValue:i.showDialog,"onUpdate:modelValue":o[4]||(o[4]=d=>i.showDialog=d),width:"600"},{default:e.withCtx(()=>[e.createVNode(r,{height:"24"},{default:e.withCtx(()=>[e.createVNode(a),o[7]||(o[7]=e.createElementVNode("span",null,"Plugin Store Settings",-1)),e.createVNode(a)]),_:1}),e.createVNode(v,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(s,{modelValue:t.errorLoading,"onUpdate:modelValue":o[0]||(o[0]=d=>t.errorLoading=d),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error loading previous configuration due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(s,{modelValue:t.errorSaving,"onUpdate:modelValue":o[1]||(o[1]=d=>t.errorSaving=d),type:"error",closable:"",density:"compact"},{default:e.withCtx(()=>[e.createTextVNode(" Error saving due to "+e.toDisplayString(t.errorText),1)]),_:1},8,["modelValue"]),e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(f,{modelValue:i.storeUrl,"onUpdate:modelValue":o[2]||(o[2]=d=>i.storeUrl=d),label:"Store URL",rules:[i.rules.required,i.rules.url]},null,8,["modelValue","rules"]),e.createVNode(f,{modelValue:i.apiKey,"onUpdate:modelValue":o[3]||(o[3]=d=>i.apiKey=d),type:"password",label:"API Key"},null,8,["modelValue"])]),_:1}),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(_,{color:"success",variant:"text",text:"Save","data-test":"save-store-settings-btn",onClick:n.save},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),e.createVNode(C,{modelValue:i.showApiKeyAlert,"onUpdate:modelValue":o[6]||(o[6]=d=>i.showApiKeyAlert=d)},{default:e.withCtx(()=>[e.createVNode(v,{class:"pa-3"},{default:e.withCtx(()=>[e.createVNode(h,{class:"pb-0"},{default:e.withCtx(()=>[o[9]||(o[9]=e.createTextVNode(" You're using COSMOS Enterprise, but you haven't set an OpenC3 Store API key yet. You must set this to access Enterprise plugins. ",-1)),o[10]||(o[10]=e.createElementVNode("br",null,null,-1)),o[11]||(o[11]=e.createElementVNode("br",null,null,-1)),o[12]||(o[12]=e.createTextVNode(" Visit the ",-1)),e.createElementVNode("a",{href:n.accountSettingsUrl,target:"_blank"},[o[8]||(o[8]=e.createTextVNode(" OpenC3 Store account settings",-1)),e.createVNode(w,{icon:"mdi-open-in-new",size:"x-small"})],8,ae),o[13]||(o[13]=e.createTextVNode(" to generate an API key. Then, return here and open the Plugin Store settings with the ",-1)),e.createVNode(w,{icon:"mdi-cog",size:"small"}),o[14]||(o[14]=e.createTextVNode(" icon and paste your API key into the API key field. ",-1))]),_:1}),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(x,{modelValue:i.suppressApiKeyAlert,"onUpdate:modelValue":o[5]||(o[5]=d=>i.suppressApiKeyAlert=d),class:"px-3",label:"Don't show this message again","hide-details":""},null,8,["modelValue"]),e.createVNode(_,{variant:"elevated",text:"OK",onClick:n.closeApiKeyAlert},null,8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])],64)}const ue=k._export_sfc(re,[["render",ce]]),de="https://store.openc3.com",pe={components:{PluginCard:le,PluginStoreSettingsDialog:ue},emits:["close","triggerInstall"],data(){return{api:new g.Ri,search:"",showSettingsDialog:!1,plugins:[],storeError:null,storeUrl:de,isEnterprise:!1,isAdmin:!0,loading:!1}},computed:{filteredPlugins:function(){let t=this.plugins;return this.search.length&&(t=t.filter(o=>o.title.toLowerCase().includes(this.search.toLowerCase()))),t},formattedStoreUrl:function(){return this.storeUrl.split("://").at(-1)},installAllowed:function(){return!this.isEnterprise||this.isAdmin}},mounted:function(){this.fetchPluginStoreData(),this.fetchUserContext()},methods:{fetchPluginStoreData:function(){this.loading=!0,g.Br.get("/openc3-api/pluginstore").then(({data:t})=>{if(t.error){const{title:o,body:l}=t;this.storeError={title:o,body:l},this.plugins=[]}else this.storeError=null,this.plugins=t}).finally(()=>{this.loading=!1})},fetchUserContext:function(){g.Br.get("/openc3-api/info").then(({data:o})=>{this.isEnterprise=!!o.enterprise});const t=OpenC3Auth.userroles()||[];this.isAdmin=t.includes("admin")},close:function(){this.$emit("close")},install:function(t){this.$emit("triggerInstall",t),this.close()},openSettings:function(){this.showSettingsDialog=!0},updatePluginStore:function(t){this.storeUrl=t,this.loading=!0,this.api.update_plugin_store().then(o=>{this.fetchPluginStoreData()})}}},me={class:"d-flex justify-content-space-between"},ge={class:"d-inline-flex align-center w-100"},he={key:1,class:"d-flex justify-center align-center py-12","data-test":"plugin-store-loading"};function fe(t,o,l,c,i,n){const a=e.resolveComponent("v-spacer"),r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-text-field"),h=e.resolveComponent("v-alert"),_=e.resolveComponent("v-progress-circular"),m=e.resolveComponent("plugin-card"),v=e.resolveComponent("v-col"),C=e.resolveComponent("v-row"),w=e.resolveComponent("v-container"),x=e.resolveComponent("v-sheet"),d=e.resolveComponent("plugin-store-settings-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(x,{class:"pb-11 pt-8 px-8",height:"100%"},{default:e.withCtx(()=>[e.createElementVNode("div",me,[o[2]||(o[2]=e.createElementVNode("div",null,[e.createElementVNode("div",{class:"text-h3 mb-3"},"OpenC3 Plugin Store"),e.createElementVNode("div",{class:"text-subtitle-1"}," Browse plugins made by OpenC3 and the COSMOS community ")],-1)),e.createVNode(a),e.createVNode(r,{icon:"mdi-cog",variant:"text",onClick:n.openSettings},null,8,["onClick"]),e.createVNode(s,{location:"top"},{activator:e.withCtx(({props:V})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(V)),[e.createVNode(r,{href:i.storeUrl,target:"_blank",icon:"mdi-open-in-new",variant:"text",class:"mx-2"},null,8,["href"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null," Open "+e.toDisplayString(n.formattedStoreUrl),1)]),_:1}),e.createVNode(r,{icon:"mdi-close",variant:"text",onClick:n.close},null,8,["onClick"])]),e.createElementVNode("div",ge,[e.createVNode(f,{modelValue:i.search,"onUpdate:modelValue":o[0]||(o[0]=V=>i.search=V),label:"Search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","single-line":"","hide-details":"","data-test":"search-plugin-store"},null,8,["modelValue"])]),e.createVNode(a),o[4]||(o[4]=e.createElementVNode("span",{class:""}," Click on a plugin to see more information about it ",-1)),i.storeError?(e.openBlock(),e.createBlock(h,{key:0,class:"mt-6",color:"error",title:i.storeError.title,text:i.storeError.body},null,8,["title","text"])):i.loading?(e.openBlock(),e.createElementBlock("div",he,[e.createVNode(_,{indeterminate:"",color:"primary",size:"48"}),o[3]||(o[3]=e.createElementVNode("span",{class:"ml-4 text-subtitle-1"},"Loading plugins...",-1))])):(e.openBlock(),e.createBlock(w,{key:2},{default:e.withCtx(()=>[e.createVNode(C,null,{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.filteredPlugins,V=>(e.openBlock(),e.createBlock(v,{key:V.id,cols:"4"},{default:e.withCtx(()=>[e.createVNode(m,e.mergeProps({ref_for:!0},V,{"install-allowed":n.installAllowed,onTriggerInstall:n.install}),null,16,["install-allowed","onTriggerInstall"])]),_:2},1024))),128))]),_:1})]),_:1}))]),_:1}),e.createVNode(d,{modelValue:i.showSettingsDialog,"onUpdate:modelValue":o[1]||(o[1]=V=>i.showSettingsDialog=V),"onUpdate:storeUrl":n.updatePluginStore},null,8,["modelValue","onUpdate:storeUrl"])],64)}const _e=k._export_sfc(pe,[["render",fe]]),ve={components:{PluginDetailsDialog:E},mixins:[T],props:{targets:{type:Array,default:()=>[]},isModified:Boolean,microservices:{type:Object,default:()=>({})}},emits:["edit","delete","upgrade"],data(){return{showCard:!1}},computed:{displayTitle:function(){return this.title?this.title:this.name.replace(/^openc3-cosmos-/,"").replace(/-?\d+\.\d+\.\d+(?:\.pre\.beta\d+\.\d+)?\.gem(?:__\d+)?$/,"")},getMicroservicesForPlugin:function(){const t=[];for(const[o,l]of Object.entries(this.microservices))l.plugin===this.name&&t.push(o);return t},microserviceCount:function(){return this.getMicroservicesForPlugin.length}},methods:{openDetails:function(){this.hasDetails&&(this.showCard=!0)},downloadPlugin:function(){g.Br.post(`/openc3-api/packages/${this.name}/download`).then(t=>{const o=window.atob(t.data.contents),l=new Uint8Array(o.length);for(let n=0;n<o.length;++n)l[n]=o.charCodeAt(n);const c=new Blob([l],{type:"application/zip"}),i=document.createElement("a");i.href=URL.createObjectURL(c),i.setAttribute("download",t.data.filename),i.click()})},downloadTarget:function(t){g.Br.post(`/openc3-api/targets/${t}/download`).then(o=>{const l=window.atob(o.data.contents),c=new Uint8Array(l.length);for(let a=0;a<l.length;++a)c[a]=l.charCodeAt(a);const i=new Blob([c],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(i),n.setAttribute("download",o.data.filename),n.click()})},edit:function(){this.$emit("edit")},upgrade:function(){this.$emit("upgrade")},viewMicroservices:function(){const t=this.getMicroservicesForPlugin.join(",");this.$router.push({path:"/tools/admin/microservices",query:{services:t}})},deletePrompt:function(){this.showCard=!1,this.$emit("delete")}}},Ce=["textContent"],Ve={class:"text-subtitle-2 v-list-item-subtitle pl-0"},we={key:0},xe=["onClick","textContent"],ke=["textContent"];function ye(t,o,l,c,i,n){const a=e.resolveComponent("v-img"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-list-item"),f=e.resolveComponent("v-list"),h=e.resolveComponent("v-menu"),_=e.resolveComponent("plugin-details-dialog");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("tr",{class:e.normalizeClass({"cursor-pointer":t.hasDetails}),"data-test":"plugin-list-item"},[e.createElementVNode("td",null,[t.imageContentsWithMimeType?(e.openBlock(),e.createBlock(a,{key:0,src:t.imageContentsWithMimeType,"max-height":"56","min-width":"56"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createElementVNode("div",{class:"text-h6",onClick:o[0]||(o[0]=(...m)=>n.openDetails&&n.openDetails(...m)),textContent:e.toDisplayString(n.displayTitle)},null,8,Ce),e.createElementVNode("div",Ve,[l.isModified?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" * ")],64)):e.createCommentVNode("",!0),e.createTextVNode(" "+e.toDisplayString(t.name),1)]),l.targets?.length?(e.openBlock(),e.createElementBlock("div",we,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.targets,(m,v)=>(e.openBlock(),e.createElementBlock("span",{key:v,class:"mr-2"},[m.modified?(e.openBlock(),e.createElementBlock("a",{key:0,style:{cursor:"pointer"},onClick:e.withModifiers(C=>n.downloadTarget(m.name),["prevent"]),textContent:e.toDisplayString(m.name)},null,8,xe)):(e.openBlock(),e.createElementBlock("span",{key:1,textContent:e.toDisplayString(m.name)},null,8,ke))]))),128))])):e.createCommentVNode("",!0)]),e.createElementVNode("td",null,[e.createVNode(h,null,{activator:e.withCtx(({props:m})=>[e.createVNode(r,e.mergeProps(m,{icon:"mdi-dots-horizontal","data-test":"plugin-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(s,{title:"Download","prepend-icon":"mdi-download","data-test":"download-plugin",onClick:n.downloadPlugin},null,8,["onClick"]),e.createVNode(s,{title:"Edit Details","prepend-icon":"mdi-pencil","data-test":"edit-plugin",onClick:n.edit},null,8,["onClick"]),e.createVNode(s,{title:"Upgrade","prepend-icon":"mdi-update","data-test":"upgrade-plugin",onClick:n.upgrade},null,8,["onClick"]),e.createVNode(s,{title:`View Microservices (${n.microserviceCount})`,"prepend-icon":"mdi-tab","data-test":"view-microservices",onClick:n.viewMicroservices},null,8,["title","onClick"]),e.createVNode(s,{title:"Delete","prepend-icon":"mdi-delete","data-test":"delete-plugin",onClick:n.deletePrompt},null,8,["onClick"])]),_:1})]),_:1})])],2),i.showCard?(e.openBlock(),e.createBlock(_,e.mergeProps({key:0,modelValue:i.showCard,"onUpdate:modelValue":o[1]||(o[1]=m=>i.showCard=m)},t.plugin,{onTriggerUninstall:n.deletePrompt}),null,16,["modelValue","onTriggerUninstall"])):e.createCommentVNode("",!0)],64)}const Ne=k._export_sfc(ve,[["render",ye]]),Pe={components:{PluginListItem:Ne},props:{plugins:{type:Array,required:!0},targets:{type:Object,required:!0},showDefaultTools:{type:Boolean,default:!1},defaultPlugins:{type:Array,required:!0}},emits:["edit","delete","upgrade"],data(){return{showPluginDetails:!1,detailPlugin:null,microservices:{}}},computed:{shownPlugins(){const t=[],o=[];return this.plugins.forEach(l=>{const n=l.name.split("__")[0].split("-").slice(0,-1).join("-");this.defaultPlugins.includes(n)?o.push(l):t.push(l)}),t.sort((l,c)=>l.name<c.name?-1:l.name>c.name?1:0),this.showDefaultTools?(o.sort((l,c)=>l.name<c.name?-1:l.name>c.name?1:0),t.concat(o)):t}},mounted(){this.fetchMicroservices()},methods:{showDetails:function(t){this.detailPlugin=t,this.showPluginDetails=!0},pluginTargets:function(t){let o=[];for(const l in this.targets)this.targets[l].plugin===t&&o.push(this.targets[l]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,l])=>l.plugin===t&&l.modified===!0)},editPlugin:function(t){this.$emit("edit",t)},upgradePlugin(t){this.$emit("upgrade",t)},deletePrompt:function(t){this.$emit("delete",t)},fetchMicroservices:function(){g.Br.get("/openc3-api/microservices/all").then(t=>{this.microservices=t.data})}}};function be(t,o,l,c,i,n){const a=e.resolveComponent("plugin-list-item"),r=e.resolveComponent("v-data-table");return e.openBlock(),e.createBlock(r,{headers:[],items:n.shownPlugins,density:"compact",class:"list","data-test":"plugin-list"},{item:e.withCtx(({item:s})=>[(e.openBlock(),e.createBlock(a,e.mergeProps({key:s.name},s,{targets:n.pluginTargets(s.name),"is-modified":n.isModified(s.name),microservices:i.microservices,onEdit:()=>n.editPlugin(s.name),onUpgrade:()=>n.upgradePlugin(s.name),onDelete:()=>n.deletePrompt(s.name)}),null,16,["targets","is-modified","microservices","onEdit","onUpgrade","onDelete"]))]),_:1},8,["items"])}const Se=k._export_sfc(Pe,[["render",be],["__scopeId","data-v-16a76865"]]),Te={components:{PluginDialog:S.PluginDialog,PluginList:Se,PluginStore:_e,ModifiedPluginDialog:S.ModifiedPluginDialog,SimpleTextDialog:K.SimpleTextDialog},mixins:[L.TimeFilters],data(){return{pluginName:null,variables:{},storePluginId:null,storeVersionId:null,minCosmosVersion:null,pluginTxt:"",file:null,currentPlugin:null,pluginHashTmp:null,existingPluginTxt:null,progress:0,pluginDelete:!1,api:new g.Ri,plugins:[],targets:{},processes:{},alert:"",alertType:"success",showAlert:!1,showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",showPluginStore:!1,showPluginDialog:!1,showModifiedPluginDialog:!1,showDefaultTools:!1,timeZone:"local",defaultPlugins:["openc3-cosmos-tool-admin","openc3-cosmos-tool-bucketexplorer","openc3-cosmos-tool-cmdsender","openc3-cosmos-tool-cmdqueue","openc3-cosmos-tool-cmdhistory","openc3-cosmos-tool-cmdtlmserver","openc3-cosmos-tool-dataextractor","openc3-cosmos-tool-dataviewer","openc3-cosmos-tool-docs","openc3-cosmos-tool-handbooks","openc3-cosmos-tool-iframe","openc3-cosmos-tool-limitsmonitor","openc3-cosmos-tool-packetviewer","openc3-cosmos-tool-scriptrunner","openc3-cosmos-tool-tablemanager","openc3-cosmos-tool-tlmgrapher","openc3-cosmos-tool-tlmviewer","openc3-cosmos-enterprise-tool-admin","openc3-cosmos-tool-autonomic","openc3-cosmos-tool-calendar","openc3-cosmos-tool-grafana","openc3-cosmos-tool-logexplorer","openc3-cosmos-tool-notebooks","openc3-cosmos-tool-systemhealth","openc3-enterprise-tool-base","openc3-tool-base"]}},watch:{showPluginDialog:function(t,o){t===!1&&(this.file=null,this.$refs.fileInput.value=null)}},created(){this.api.update_plugin_store(),this.api.get_setting("time_zone").then(t=>{t&&(this.timeZone=t)}).catch(()=>{})},mounted(){this.update(),this.updateProcesses();const t=this;window.onpopstate=function(){t.showPluginStore&&(t.showPluginStore=!1,history.go(1))}},methods:{resetControlState:function(){this.pluginName=null,this.variables={},this.storePluginId=null,this.storeVersionId=null,this.minCosmosVersion=null,this.pluginTxt="",this.file=null,this.currentPlugin=null,this.pluginHashTmp=null,this.existingPluginTxt=null,this.progress=0,this.pluginDelete=!1},pluginTargets:function(t){let o=[];for(const l in this.targets)this.targets[l].plugin===t&&o.push(this.targets[l]);return o},isModified:function(t){return Object.entries(this.targets).some(([o,l])=>l.plugin===t&&l.modified===!0)},showOutput:function(t){this.processOutput=t.output,this.showProcessOutput=!0},update:function(){g.Br.get("/openc3-api/plugins/all").then(t=>{this.plugins=Object.entries(t.data).map(([o,l])=>l)}),g.Br.get("/openc3-api/targets_modified").then(t=>{this.targets=t.data})},updateProcesses:function(){g.Br.get("openc3-api/process_status/plugin_?substr=true").then(t=>{this.processes=t.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},upload:function(t=null,o=null){const l=t?"put":"post",c=t?`/openc3-api/plugins/${t}`:"/openc3-api/plugins",i=new FormData;o===null?i.append("plugin",this.file,this.file.name):(i.append("store_plugin_id",o.id),i.append("store_version_id",o.version_id));let n=this;g.Br[l](c,{data:i,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);n.progress=s}}).then(r=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let s=null;r.data.existing_plugin_txt_lines!==void 0&&(s=r.data.existing_plugin_txt_lines.join(`
|
|
2
|
+
`));let f=r.data.plugin_txt_lines.join(`
|
|
3
|
+
`);this.pluginName=r.data.name,this.variables=r.data.variables,this.storePluginId=r.data.store_plugin_id,this.storeVersionId=r.data.store_version_id,this.minCosmosVersion=r.data.minimum_cosmos_version,this.pluginTxt=f,this.existingPluginTxt=s,this.showPluginDialog=!0,this.file=void 0}).catch(r=>{this.currentPlugin=null,this.file=void 0})},pluginCallback:function(t){this.showPluginDialog=!1,this.currentPlugin!==null&&(t.name=this.currentPlugin),this.pluginHashTmp=t,this.isModified(this.currentPlugin)?(this.pluginDelete=!1,this.showModifiedPluginDialog=!0):this.pluginInstall()},modifiedSubmit:async function(t){if(t===!0)for(let o of this.pluginTargets(this.currentPlugin))o.modified==!0&&await g.Br.post(`/openc3-api/targets/${o.name}/delete_modified`);this.pluginDelete?this.deletePlugin(this.currentPlugin):this.pluginInstall()},pluginInstall:function(){g.Br.post(`/openc3-api/plugins/install/${this.pluginName}`,{data:{plugin_hash:JSON.stringify(this.pluginHashTmp)}}).then(t=>{this.alert=`Started installing plugin ${this.pluginName} ...`,this.alertType="success",this.showAlert=!0,this.currentPlugin=null,this.file=void 0,this.variables={},this.pluginTxt="",this.existingPluginTxt=null,this.storePluginId=null,this.storeVersionId=null,setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3),this.update()})},editPlugin:function(t){this.resetControlState(),g.Br.get(`/openc3-api/plugins/${t}`).then(o=>{let l=null;o.data.existing_plugin_txt_lines!==void 0&&(l=o.data.existing_plugin_txt_lines.join(`
|
|
4
|
+
`)),this.pluginName=o.data.name,this.variables=o.data.variables,this.pluginTxt=o.data.plugin_txt_lines.join(`
|
|
5
|
+
`),this.existingPluginTxt=l,this.showPluginDialog=!0})},deletePrompt:function(t){this.resetControlState(),this.$dialog.confirm(`Are you sure you want to remove: ${t}`,{okText:"Delete",cancelText:"Cancel"}).then(o=>{this.isModified(t)?(this.currentPlugin=t,this.pluginDelete=!0,this.showModifiedPluginDialog=!0):this.deletePlugin(t)})},deletePlugin:function(t){this.alert=`Removing plugin ${t} ...`,this.alertType="success",this.showAlert=!0,g.Br.delete(`/openc3-api/plugins/${t}`).then(o=>{setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3)}),this.update()},upgradePlugin(t){this.resetControlState(),this.currentPlugin=t,this.$refs.fileInput.click()},selectFile(){this.resetControlState(),this.$refs.fileInput.click()},fileChange(t){const o=t.target.files;if(o.length>0)if(this.file=o[0],this.currentPlugin!==null)if(this.file.name.split(".gem")[0]==this.currentPlugin.split(".gem")[0])this.$dialog.confirm(`The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}).catch(l=>{});else{let l=this.file.name.split("-"),c=l.findIndex(a=>a.includes(".")),i=l.slice(0,c).join("-");l=this.currentPlugin.split("-"),c=l.findIndex(a=>a.includes("."));let n=l.slice(0,c).join("-");i!==n?this.$dialog.confirm(`The new gem base name ${i} doesn't match the existing ${n}. Install?`,{okText:"Ok",cancelText:"Cancel"}).then(()=>{this.upload(this.currentPlugin)}):this.upload(this.currentPlugin)}else this.upload();else this.$refs.fileInput.value=null},openStore(){this.resetControlState(),this.showPluginStore=!0}}},Be={class:"mt-2"},Ee=["textContent"],De=["textContent"];function Ue(t,o,l,c,i,n){const a=e.resolveComponent("v-btn"),r=e.resolveComponent("v-icon"),s=e.resolveComponent("v-col"),f=e.resolveComponent("rux-progress"),h=e.resolveComponent("v-row"),_=e.resolveComponent("v-divider"),m=e.resolveComponent("v-alert"),v=e.resolveComponent("v-list-item-title"),C=e.resolveComponent("v-list-item-subtitle"),w=e.resolveComponent("v-progress-circular"),x=e.resolveComponent("v-tooltip"),d=e.resolveComponent("v-list-item"),V=e.resolveComponent("v-list"),N=e.resolveComponent("v-switch"),p=e.resolveComponent("plugin-list"),D=e.resolveComponent("plugin-dialog"),U=e.resolveComponent("modified-plugin-dialog"),A=e.resolveComponent("simple-text-dialog"),I=e.resolveComponent("plugin-store"),O=e.resolveComponent("v-bottom-sheet");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(h,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(a,{"append-icon":"mdi-store",onClick:n.openStore},{default:e.withCtx(()=>[...o[9]||(o[9]=[e.createTextVNode(" Browse Plugins ",-1)])]),_:1},8,["onClick"]),e.createVNode(a,{"append-icon":"mdi-paperclip",class:"mx-2",onClick:n.selectFile},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode(" Install From File ",-1)])]),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",accept:".gem",style:{display:"none"},type:"file",onChange:o[0]||(o[0]=(...u)=>n.fileChange&&n.fileChange(...u))},null,544),o[14]||(o[14]=e.createElementVNode("br",null,null,-1)),e.createElementVNode("p",Be,[o[12]||(o[12]=e.createTextVNode(" Note: Use ",-1)),e.createVNode(r,null,{default:e.withCtx(()=>[...o[11]||(o[11]=[e.createTextVNode(" mdi-dots-horizontal ",-1)])]),_:1}),o[13]||(o[13]=e.createTextVNode(" in the Installed Plugins list to upgrade existing plugins ",-1))])]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(f,{value:i.progress},null,8,["value"])]),_:1})]),_:1}),e.createVNode(h,{"no-gutters":"",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{align:"right",class:"mr-2"},{default:e.withCtx(()=>[...o[15]||(o[15]=[e.createElementVNode("div",null,"* indicates a modified plugin",-1),e.createElementVNode("div",null,"Click target link to download modifications",-1)])]),_:1})]),_:1}),e.createVNode(_),e.createVNode(m,{modelValue:i.showAlert,"onUpdate:modelValue":o[1]||(o[1]=u=>i.showAlert=u),closable:"",type:i.alertType,text:i.alert,"data-test":"plugin-alert"},null,8,["modelValue","type","text"]),Object.keys(i.processes).length>0?(e.openBlock(),e.createBlock(V,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(h,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[16]||(o[16]=[e.createTextVNode(" Process List ",-1)])]),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>[...o[17]||(o[17]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])]),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.processes,u=>(e.openBlock(),e.createElementBlock("div",{key:u.name},[e.createVNode(d,null,{append:e.withCtx(()=>[u.state==="Running"?(e.openBlock(),e.createBlock(w,{key:0,indeterminate:"",color:"primary"})):(e.openBlock(),e.createBlock(x,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:M})=>[e.createVNode(a,e.mergeProps({ref_for:!0},M,{icon:"mdi-eye",variant:"text","aria-label":"Show Output","data-test":"show-output",onClick:Ie=>n.showOutput(u)}),null,16,["onClick"])]),default:e.withCtx(()=>[o[18]||(o[18]=e.createElementVNode("span",null," Show Output ",-1))]),_:2},1024))]),default:e.withCtx(()=>[e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(u.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${u.process_type}: ${u.detail} - ${u.state}`)},null,10,Ee)]),_:2},1024),e.createVNode(C,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+t.formatNanoseconds(u.updated_at,i.timeZone))},null,8,De)]),_:2},1024)]),_:2},1024),e.createVNode(_)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(h,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h5"},{default:e.withCtx(()=>[...o[19]||(o[19]=[e.createTextVNode(" Installed Plugins ",-1)])]),_:1}),e.createVNode(s,{class:"v-col-auto"},{default:e.withCtx(()=>[e.createVNode(N,{modelValue:i.showDefaultTools,"onUpdate:modelValue":o[2]||(o[2]=u=>i.showDefaultTools=u),label:"Show Default Tools",density:"compact","hide-details":"","data-test":"show-default-tools"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(p,{plugins:i.plugins,targets:i.targets,"show-default-tools":i.showDefaultTools,"default-plugins":i.defaultPlugins,onEdit:n.editPlugin,onUpgrade:n.upgradePlugin,onDelete:n.deletePrompt},null,8,["plugins","targets","show-default-tools","default-plugins","onEdit","onUpgrade","onDelete"]),i.showPluginDialog?(e.openBlock(),e.createBlock(D,{key:1,modelValue:i.showPluginDialog,"onUpdate:modelValue":o[3]||(o[3]=u=>i.showPluginDialog=u),"plugin-name":i.pluginName,variables:i.variables,"plugin-txt":i.pluginTxt,"existing-plugin-txt":i.existingPluginTxt,"store-plugin-id":i.storePluginId,"store-version-id":i.storeVersionId,"min-cosmos-version":i.minCosmosVersion,onCallback:n.pluginCallback},null,8,["modelValue","plugin-name","variables","plugin-txt","existing-plugin-txt","store-plugin-id","store-version-id","min-cosmos-version","onCallback"])):e.createCommentVNode("",!0),i.showModifiedPluginDialog?(e.openBlock(),e.createBlock(U,{key:2,modelValue:i.showModifiedPluginDialog,"onUpdate:modelValue":o[4]||(o[4]=u=>i.showModifiedPluginDialog=u),"plugin-name":i.currentPlugin,targets:n.pluginTargets(i.currentPlugin),"plugin-delete":i.pluginDelete,onSubmit:n.modifiedSubmit},null,8,["modelValue","plugin-name","targets","plugin-delete","onSubmit"])):e.createCommentVNode("",!0),e.createVNode(A,{modelValue:i.showProcessOutput,"onUpdate:modelValue":o[5]||(o[5]=u=>i.showProcessOutput=u),title:"Process Output",text:i.processOutput},null,8,["modelValue","text"]),e.createVNode(O,{modelValue:i.showPluginStore,"onUpdate:modelValue":o[8]||(o[8]=u=>i.showPluginStore=u),fullscreen:""},{default:e.withCtx(()=>[e.createVNode(I,{onClose:o[6]||(o[6]=()=>i.showPluginStore=!1),onTriggerInstall:o[7]||(o[7]=u=>n.upload(null,u))})]),_:1},8,["modelValue"])])}const Ae=k._export_sfc(Te,[["render",Ue],["__scopeId","data-v-31fcfb69"]]);exports.default=Ae;
|
|
6
|
+
//# sourceMappingURL=PluginsTab-Cbi_R9jL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginsTab-Cbi_R9jL.cjs","sources":["../src/plugins/plugin-store/PluginProps.js","../src/plugins/plugin-store/PluginDetailsDialog.vue","../src/plugins/plugin-store/PluginCard.vue","../src/plugins/plugin-store/PluginStoreSettingsDialog.vue","../src/plugins/plugin-store/PluginStore.vue","../src/tools/admin/tabs/plugins/PluginListItem.vue","../src/tools/admin/tabs/plugins/PluginList.vue","../src/tools/admin/tabs/PluginsTab.vue"],"sourcesContent":["/*\n# Copyright 2026, OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\nconst SETTING_NAME = 'store_url'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n props: {\n id: Number,\n name: String,\n title: String,\n // titleSlug: String,\n author: String,\n // authorSlug: String,\n author_extra: Object,\n description: String,\n keywords: Array,\n img_path: String, // Set for local plugins\n image_url: String, // Set for app store plugins\n licenses: Array,\n // rating: Number,\n // downloads: Number,\n homepage: String,\n repository: String,\n gem_url: String,\n minimum_cosmos_version: String,\n checksum: String,\n versions: Array,\n current_version_id: Number,\n access: String,\n entitled: Boolean,\n installAllowed: {\n type: Boolean,\n default: true,\n },\n },\n data: function () {\n return {\n _api: new OpenC3Api(),\n _storeUrl: '',\n imageContents: null,\n }\n },\n computed: {\n plugin: function () {\n return {\n id: this.id,\n name: this.name,\n title: this.title,\n // titleSlug: this.titleSlug,\n author: this.author,\n // authorSlug: this.authorSlug,\n author_extra: this.author_extra,\n description: this.description,\n keywords: this.keywords,\n img_path: this.img_path,\n image_url: this.image_url,\n licenses: this.licenses,\n // rating: this.rating,\n // downloads: this.downloads,\n homepage: this.homepage,\n repository: this.repository,\n gem_url: this.gem_url,\n minimum_cosmos_version: this.minimum_cosmos_version,\n checksum: this.checksum,\n versions: this.versions,\n current_version_id: this.current_version_id,\n access: this.access,\n entitled: this.entitled,\n installAllowed: this.installAllowed,\n }\n },\n canInstall: function () {\n return this.entitled && this.installAllowed\n },\n installTooltip: function () {\n if (!this.installAllowed) {\n return 'Only admin users can install plugins.'\n }\n return this.accessTooltip\n },\n imageContentsWithMimeType: function () {\n if (this.imageContents) {\n const magicNumbers = {\n 'image/bmp': [0x42, 0x4d],\n 'image/jpeg': [0xff, 0xd8, 0xff],\n 'image/png': [0x89, 0x50, 0x4e, 0x47],\n 'image/gif': [0x47, 0x49, 0x46, 0x38],\n 'image/webp': [0x52, 0x49, 0x46, 0x46],\n }\n const fileHead = new TextEncoder()\n .encode(globalThis.atob(this.imageContents.slice(0, 6))) // only atob as much as we need\n .slice(1) // second call to slice on the decoded data because base64 bytes aren't 1:1\n const found = Object.entries(magicNumbers).find(([_, magicNumber]) => {\n return magicNumber.every((byte, i) => byte === fileHead[i])\n })\n if (found) {\n const [mimeType] = found\n return `data:${mimeType};base64,${this.imageContents}`\n }\n }\n return undefined\n },\n _navigableStoreUrl: function () {\n return this._storeUrl.replace('host.docker.internal', 'localhost')\n },\n storeLink: function () {\n if (this.hasStoreListing && this._navigableStoreUrl) {\n return new URL(`/cosmos_plugins/${this.id}`, this._navigableStoreUrl)\n }\n return null\n },\n hasStoreListing: function () {\n return !!this.id\n },\n hasDetails: function () {\n if (this.hasStoreListing) {\n return true\n }\n return !!this.title && !!this.description\n },\n isPluginInstalled: function () {\n return !!this.name // Plugins only have a title, not a name, from the store\n },\n accessTooltip: function () {\n if (this.entitled) {\n return ''\n }\n if (localStorage.getItem('pluginStore.isApiKeySet') !== 'true') {\n return 'Please add your App Store API key using the settings cog icon.'\n }\n if (this.access === 'enterprise') {\n return 'A COSMOS Enterprise license is required for this plugin.'\n } else {\n return 'Please contact sales@openc3.com for access to this plugin.'\n }\n },\n },\n created: async function () {\n try {\n this._storeUrl =\n (await this._api.get_setting(SETTING_NAME)) || DEFAULT_STORE_URL\n } catch {\n this._storeUrl = DEFAULT_STORE_URL\n }\n if (this.img_path) {\n try {\n const params = new URLSearchParams({\n volume: 'OPENC3_GEMS_VOLUME',\n scope: globalThis.openc3Scope,\n })\n const { data } = await Api.get(\n `/openc3-api/storage/download_file/${encodeURIComponent(this.img_path)}?${params}`,\n )\n this.imageContents = data.contents\n } catch {\n // Failed to get image, don't do anything\n }\n }\n },\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"isDialogOpen\" max-width=\"500\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"versionTitle\" />\n <v-spacer />\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeLink\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n size=\"small\"\n variant=\"plain\"\n />\n </div>\n </template>\n <span> View at {{ formattedStoreLink }} </span>\n </v-tooltip>\n <v-btn\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n @click=\"closeDialog\"\n />\n </v-toolbar>\n <v-card-subtitle\n class=\"d-flex align-center justify-space-between subtitle-with-version\"\n >\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <v-select\n v-if=\"hasVersions\"\n v-model=\"selectedVersionId\"\n :items=\"versionOptions\"\n item-title=\"title\"\n item-value=\"value\"\n label=\"Version\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n class=\"mt-1 version-select\"\n />\n </v-card-subtitle>\n <!--\n <v-card-subtitle\n class=\"d-flex align-center justify-content-space-between\"\n >\n <div>\n <v-icon icon=\"mdi-cloud-download\" size=\"x-small\" />\n {{ downloads }} downloads\n </div>\n <v-spacer />\n <div class=\"d-flex align-center\">\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n </div>\n </v-card-subtitle>\n -->\n <v-card-text>\n <div class=\"plugin-image-backdrop\">\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n />\n <v-img v-else-if=\"versionImageUrl\" :src=\"versionImageUrl\" />\n </div>\n <div class=\"mt-3\" v-text=\"versionDescription\" />\n <div class=\"mt-3 text-caption font-italic\">\n Keywords:\n <template v-if=\"versionKeywords\">\n <v-chip\n v-for=\"keyword in versionKeywords\"\n :key=\"keyword\"\n variant=\"flat\"\n color=\"primary\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ keyword }}\n </v-chip>\n </template>\n <span v-else class=\"font-italic\"> none </span>\n </div>\n <div class=\"mt-3 text-caption font-italic\">\n Licenses:\n <v-chip\n v-for=\"license in versionLicenses\"\n :key=\"license\"\n size=\"x-small\"\n class=\"ml-1\"\n >\n {{ license }}\n </v-chip>\n </div>\n <div class=\"mt-3\">\n <span class=\"text-caption font-italic\">\n Minimum COSMOS version:\n </span>\n {{ versionMinimumCosmosVersion }}\n <v-tooltip\n v-if=\"versionsAreCompatible !== null\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <span v-bind=\"props\">\n <v-icon\n :icon=\"\n versionsAreCompatible ? 'mdi-check-circle' : 'mdi-alert'\n \"\n size=\"small\"\n />\n </span>\n </template>\n <span v-if=\"versionsAreCompatible\">\n Your version of COSMOS meets the requirements.\n </span>\n <span v-else>\n Your version of COSMOS is out of date. You can still install this\n plugin, but it might not work correctly.\n </span>\n </v-tooltip>\n </div>\n <v-text-field\n v-model=\"versionChecksum\"\n class=\"mt-3\"\n label=\"SHA256\"\n variant=\"solo\"\n density=\"compact\"\n hide-details\n readonly\n >\n <template #append>\n <v-tooltip\n v-model=\"showCopiedTooltip\"\n location=\"top\"\n :open-on-hover=\"false\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-content-copy\"\n variant=\"text\"\n density=\"compact\"\n @click=\"copyChecksum\"\n />\n </template>\n <span>Copied!</span>\n </v-tooltip>\n </template>\n </v-text-field>\n </v-card-text>\n\n <v-card-actions class=\"justify-start px-6\">\n <v-btn\n v-if=\"isPluginInstalled\"\n text=\"Uninstall\"\n append-icon=\"mdi-puzzle-remove\"\n variant=\"outlined\"\n color=\"red\"\n @click=\"uninstall\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n <v-btn\n v-if=\"versionRepository\"\n text=\"Repository\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionRepository\"\n target=\"_blank\"\n />\n <v-btn\n v-if=\"versionHomepage\"\n text=\"Homepage\"\n append-icon=\"mdi-open-in-new\"\n variant=\"outlined\"\n :href=\"versionHomepage\"\n target=\"_blank\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport * as semver from 'semver'\nimport PluginProps from './PluginProps'\n\nexport default {\n mixins: [PluginProps],\n props: {\n modelValue: Boolean,\n },\n emits: ['triggerInstall', 'triggerUninstall', 'update:modelValue'],\n data() {\n return {\n showDialog: false,\n showCopiedTooltip: false,\n installedCosmosVersion: null,\n selectedVersionId: null,\n }\n },\n computed: {\n isDialogOpen: {\n get: function () {\n return this.modelValue || this.showDialog\n },\n set: function (val) {\n this.showDialog = val\n this.$emit('update:modelValue', val)\n },\n },\n hasVersions: function () {\n return this.versions && this.versions.length > 0\n },\n selectedVersion: function () {\n if (!this.hasVersions) {\n return null\n }\n const versionId = this.selectedVersionId || this.current_version_id\n return this.versions.find((v) => v.id === versionId) || this.versions[0]\n },\n versionOptions: function () {\n if (!this.hasVersions) {\n return []\n }\n return this.versions.map((v) => ({\n title: v.version_number,\n value: v.id,\n }))\n },\n versionTitle: function () {\n return this.selectedVersion?.title || this.title\n },\n versionDescription: function () {\n return this.selectedVersion?.description || this.description\n },\n versionKeywords: function () {\n return this.selectedVersion?.keywords || this.keywords\n },\n versionLicenses: function () {\n return this.selectedVersion?.licenses || this.licenses\n },\n versionHomepage: function () {\n return this.selectedVersion?.homepage || this.homepage\n },\n versionRepository: function () {\n return this.selectedVersion?.repository || this.repository\n },\n versionGemUrl: function () {\n return this.selectedVersion?.gem_url || this.gem_url\n },\n versionMinimumCosmosVersion: function () {\n return (\n this.selectedVersion?.minimum_cosmos_version ||\n this.minimum_cosmos_version\n )\n },\n versionChecksum: function () {\n return this.selectedVersion?.checksum || this.checksum\n },\n versionImageUrl: function () {\n return this.selectedVersion?.image_url || this.image_url\n },\n formattedStoreLink: function () {\n return this._navigableStoreUrl.split('://').at(-1)\n },\n versionsAreCompatible: function () {\n if (!this.installedCosmosVersion || !this.versionMinimumCosmosVersion) {\n return null\n }\n return semver.gte(\n this.installedCosmosVersion,\n this.versionMinimumCosmosVersion,\n )\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.installedCosmosVersion = data.version\n })\n },\n mounted: function () {\n this.selectedVersionId = this.current_version_id\n },\n methods: {\n openDialog: function () {\n this.isDialogOpen = true\n },\n closeDialog: function () {\n this.isDialogOpen = false\n },\n install: function () {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n uninstall: function () {\n this.$emit('triggerUninstall', {\n id: this.id,\n version_id: this.selectedVersionId || this.current_version_id,\n })\n },\n copyChecksum: function () {\n navigator.clipboard.writeText(this.versionChecksum)\n this.showCopiedTooltip = true\n setTimeout(() => {\n this.showCopiedTooltip = false\n }, 1000)\n },\n },\n}\n</script>\n\n<style scoped>\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n\n.subtitle-with-version {\n width: 100%;\n min-height: 48px;\n}\n\n.version-select {\n max-width: 120px;\n min-width: 120px;\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card height=\"350\" class=\"d-flex flex-column\" @click=\"openDialog\">\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n {{ title }}\n </v-card-title>\n <v-card-subtitle class=\"d-flex align-center justify-content-space-between\">\n <div>\n By <strong>{{ author }}</strong>\n <span v-if=\"author_extra?.badge_text\" class=\"ml-1 font-italic\">\n {{ author_extra.badge_text }}\n </span>\n <v-icon\n v-if=\"author_extra?.badge_icon\"\n :icon=\"author_extra.badge_icon\"\n :size=\"18\"\n class=\"ml-1\"\n />\n </div>\n <!--\n <v-spacer />\n <v-rating\n :model-value=\"rating\"\n density=\"compact\"\n size=\"small\"\n readonly\n half-increments\n />\n -->\n </v-card-subtitle>\n <v-card-text>\n <div class=\"plugin-image-backdrop\">\n <v-img v-if=\"image_url\" :src=\"image_url\" max-height=\"160\" />\n </div>\n <div\n :class=\"{\n 'truncate-description': true,\n 'truncate-2': !!image_url,\n 'truncate-10': !image_url,\n }\"\n v-text=\"description\"\n />\n </v-card-text>\n <v-spacer />\n <v-card-actions class=\"flex-wrap\">\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <span v-bind=\"canInstall ? null : props\">\n <v-btn\n text=\"Install\"\n append-icon=\"mdi-puzzle-plus\"\n variant=\"elevated\"\n :disabled=\"!canInstall\"\n @click.stop=\"install\"\n />\n </span>\n </template>\n <span> {{ installTooltip }} </span>\n </v-tooltip>\n </v-card-actions>\n </v-card>\n <plugin-details-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n v-bind=\"plugin\"\n @trigger-install=\"install\"\n />\n</template>\n\n<script>\nimport PluginProps from './PluginProps'\nimport PluginDetailsDialog from './PluginDetailsDialog.vue'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n emits: ['triggerInstall'],\n data() {\n return {\n showDialog: false,\n }\n },\n methods: {\n openDialog: function () {\n this.showDialog = true\n },\n install: function (event) {\n this.$emit('triggerInstall', {\n id: this.id,\n version_id: event?.version_id || this.current_version_id,\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.truncate-description {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n}\n\n.truncate-2 {\n line-clamp: 2;\n -webkit-line-clamp: 2;\n}\n\n.truncate-10 {\n line-clamp: 10;\n -webkit-line-clamp: 10;\n}\n\n.plugin-image-backdrop {\n background-color: rgb(156, 163, 175);\n}\n</style>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"showDialog\" width=\"600\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Plugin Store Settings</span>\n <v-spacer />\n </v-toolbar>\n <v-card class=\"pa-3\">\n <v-alert v-model=\"errorLoading\" type=\"error\" closable density=\"compact\">\n Error loading previous configuration due to {{ errorText }}\n </v-alert>\n <v-alert v-model=\"errorSaving\" type=\"error\" closable density=\"compact\">\n Error saving due to {{ errorText }}\n </v-alert>\n <v-card-text>\n <v-text-field\n v-model=\"storeUrl\"\n label=\"Store URL\"\n :rules=\"[rules.required, rules.url]\"\n />\n <v-text-field v-model=\"apiKey\" type=\"password\" label=\"API Key\" />\n </v-card-text>\n <v-card-actions>\n <v-btn\n color=\"success\"\n variant=\"text\"\n text=\"Save\"\n data-test=\"save-store-settings-btn\"\n @click=\"save\"\n />\n </v-card-actions>\n </v-card>\n </v-dialog>\n\n <v-dialog v-model=\"showApiKeyAlert\">\n <v-card class=\"pa-3\">\n <v-card-text class=\"pb-0\">\n You're using COSMOS Enterprise, but you haven't set an OpenC3 Store API\n key yet. You must set this to access Enterprise plugins.\n <br />\n <br />\n Visit the\n <a :href=\"accountSettingsUrl\" target=\"_blank\">\n OpenC3 Store account settings<v-icon\n icon=\"mdi-open-in-new\"\n size=\"x-small\"\n />\n </a>\n to generate an API key. Then, return here and open the Plugin Store\n settings with the\n <v-icon icon=\"mdi-cog\" size=\"small\" /> icon and paste your API key into\n the API key field.\n </v-card-text>\n <v-card-actions>\n <v-checkbox\n v-model=\"suppressApiKeyAlert\"\n class=\"px-3\"\n label=\"Don't show this message again\"\n hide-details\n />\n <v-btn variant=\"elevated\" text=\"OK\" @click=\"closeApiKeyAlert\" />\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport Settings from '@/tools/admin/tabs/settings/settings.js'\n\nconst URL_SETTING_NAME = 'store_url'\nconst API_KEY_SETTING_NAME = 'store_api_key'\nconst SETTING_SCOPE = 'DEFAULT'\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n mixins: [Settings],\n props: {\n modelValue: Boolean,\n },\n emits: ['update:modelValue', 'update:storeUrl'],\n data() {\n return {\n showDialog: false,\n storeUrl: '',\n apiKey: null,\n isEnterprise: false,\n showApiKeyAlert: false,\n suppressApiKeyAlert: false,\n rules: {\n required: (value) => !!value || 'Required',\n url: (value) => {\n try {\n new URL(value)\n } catch (_) {\n return 'Not a valid URL'\n }\n return true\n },\n },\n }\n },\n computed: {\n accountSettingsUrl: function () {\n const navigableHost = this.storeUrl.replace(\n 'host.docker.internal',\n 'localhost',\n )\n return new URL('account', navigableHost)\n },\n },\n watch: {\n apiKey: function (val) {\n this.checkEnterpriseKey()\n localStorage.setItem('pluginStore.isApiKeySet', !!val)\n },\n isEnterprise: function (val) {\n this.checkEnterpriseKey()\n },\n suppressApiKeyAlert: function (val) {\n localStorage.setItem('pluginStore.suppressApiKeyAlert', val)\n },\n modelValue: function (val) {\n if (val) {\n this.showDialog = val\n }\n },\n showDialog: function (val) {\n if (!val) {\n this.$emit('update:modelValue', val)\n }\n },\n },\n created: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = data.enterprise\n })\n this.loadSetting(URL_SETTING_NAME, { scope: SETTING_SCOPE })\n this.loadSetting(API_KEY_SETTING_NAME, { scope: SETTING_SCOPE })\n this.$emit('update:storeUrl', this.storeUrl)\n },\n methods: {\n checkEnterpriseKey: function () {\n if (this.isEnterprise && this.apiKey === '') {\n this.openApiKeyAlert()\n }\n },\n openApiKeyAlert: function () {\n if (localStorage.getItem('pluginStore.suppressApiKeyAlert') !== 'true') {\n this.showApiKeyAlert = true\n }\n },\n closeApiKeyAlert: function () {\n this.showApiKeyAlert = false\n },\n save: function () {\n this.saveSetting(URL_SETTING_NAME, this.storeUrl, {\n scope: SETTING_SCOPE,\n })\n this.saveSetting(API_KEY_SETTING_NAME, this.apiKey, {\n scope: SETTING_SCOPE,\n })\n this.$emit('update:storeUrl', this.storeUrl)\n this.showDialog = false\n },\n parseSetting: function (response, { setting }) {\n switch (setting) {\n case URL_SETTING_NAME:\n this.storeUrl = response || DEFAULT_STORE_URL\n break\n case API_KEY_SETTING_NAME:\n this.apiKey = response || ''\n break\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-sheet class=\"pb-11 pt-8 px-8\" height=\"100%\">\n <div class=\"d-flex justify-content-space-between\">\n <div>\n <div class=\"text-h3 mb-3\">OpenC3 Plugin Store</div>\n <div class=\"text-subtitle-1\">\n Browse plugins made by OpenC3 and the COSMOS community\n </div>\n </div>\n <v-spacer />\n <v-btn icon=\"mdi-cog\" variant=\"text\" @click=\"openSettings\" />\n\n <v-tooltip location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :href=\"storeUrl\"\n target=\"_blank\"\n icon=\"mdi-open-in-new\"\n variant=\"text\"\n class=\"mx-2\"\n />\n </div>\n </template>\n <span> Open {{ formattedStoreUrl }} </span>\n </v-tooltip>\n\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"close\" />\n </div>\n <div class=\"d-inline-flex align-center w-100\">\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n data-test=\"search-plugin-store\"\n />\n </div>\n <v-spacer />\n <span class=\"\"> Click on a plugin to see more information about it </span>\n <v-alert\n v-if=\"storeError\"\n class=\"mt-6\"\n color=\"error\"\n :title=\"storeError.title\"\n :text=\"storeError.body\"\n />\n <div\n v-else-if=\"loading\"\n class=\"d-flex justify-center align-center py-12\"\n data-test=\"plugin-store-loading\"\n >\n <v-progress-circular indeterminate color=\"primary\" size=\"48\" />\n <span class=\"ml-4 text-subtitle-1\">Loading plugins...</span>\n </div>\n <v-container v-else>\n <v-row>\n <v-col v-for=\"plugin in filteredPlugins\" :key=\"plugin.id\" cols=\"4\">\n <plugin-card\n v-bind=\"plugin\"\n :install-allowed=\"installAllowed\"\n @trigger-install=\"install\"\n />\n </v-col>\n </v-row>\n </v-container>\n </v-sheet>\n <plugin-store-settings-dialog\n v-model=\"showSettingsDialog\"\n @update:store-url=\"updatePluginStore\"\n />\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { PluginCard } from '@/plugins/plugin-store'\nimport PluginStoreSettingsDialog from './PluginStoreSettingsDialog.vue' // idk why importing from @/plugins/plugin-store isn't working\n\nconst DEFAULT_STORE_URL = 'https://store.openc3.com'\n\nexport default {\n components: {\n PluginCard,\n PluginStoreSettingsDialog,\n },\n emits: ['close', 'triggerInstall'],\n data() {\n return {\n api: new OpenC3Api(),\n search: '',\n showSettingsDialog: false,\n plugins: [],\n storeError: null,\n storeUrl: DEFAULT_STORE_URL,\n isEnterprise: false,\n isAdmin: true,\n loading: false,\n }\n },\n computed: {\n filteredPlugins: function () {\n let filtered = this.plugins\n if (this.search.length) {\n filtered = filtered.filter((plugin) =>\n plugin.title.toLowerCase().includes(this.search.toLowerCase()),\n )\n }\n return filtered\n },\n formattedStoreUrl: function () {\n return this.storeUrl.split('://').at(-1)\n },\n installAllowed: function () {\n return !this.isEnterprise || this.isAdmin\n },\n },\n mounted: function () {\n // Don't call updatePluginStore() here. It should be called in the background before the user opens this store\n // view (see PluginsTab.vue `created()`) to keep this feeling fast\n this.fetchPluginStoreData()\n this.fetchUserContext()\n // TODO: do something with plugins that are already installed (no uninstall button: https://github.com/OpenC3/cosmos/pull/2162#discussion_r2249339853 )\n },\n methods: {\n fetchPluginStoreData: function () {\n this.loading = true\n Api.get('/openc3-api/pluginstore')\n .then(({ data }) => {\n if (data.error) {\n const { title, body } = data\n this.storeError = { title, body }\n this.plugins = []\n } else {\n this.storeError = null\n this.plugins = data\n }\n })\n .finally(() => {\n this.loading = false\n })\n },\n fetchUserContext: function () {\n Api.get('/openc3-api/info').then(({ data }) => {\n this.isEnterprise = !!data.enterprise\n })\n const roles = OpenC3Auth.userroles() || []\n this.isAdmin = roles.includes('admin')\n },\n close: function () {\n this.$emit('close')\n },\n install: function (plugin) {\n this.$emit('triggerInstall', plugin)\n this.close()\n },\n openSettings: function () {\n this.showSettingsDialog = true\n },\n updatePluginStore: function (storeUrl) {\n this.storeUrl = storeUrl\n this.loading = true\n this.api.update_plugin_store().then((response) => {\n this.fetchPluginStoreData()\n })\n },\n },\n}\n</script>\n\n<style>\n.v-sheet {\n background-color: var(--color-background-base-default);\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <tr :class=\"{ 'cursor-pointer': hasDetails }\" data-test=\"plugin-list-item\">\n <td>\n <v-img\n v-if=\"imageContentsWithMimeType\"\n :src=\"imageContentsWithMimeType\"\n max-height=\"56\"\n min-width=\"56\"\n />\n </td>\n <td>\n <div class=\"text-h6\" @click=\"openDetails\" v-text=\"displayTitle\" />\n <div class=\"text-subtitle-2 v-list-item-subtitle pl-0\">\n <!-- subtitle -->\n <template v-if=\"isModified\"> * </template>\n {{ name }}\n </div>\n <div v-if=\"targets?.length\">\n <!-- sub-subtitle -->\n <span v-for=\"(target, index) in targets\" :key=\"index\" class=\"mr-2\">\n <a\n v-if=\"target.modified\"\n style=\"cursor: pointer\"\n @click.prevent=\"downloadTarget(target.name)\"\n v-text=\"target.name\"\n />\n <span v-else v-text=\"target.name\" />\n </span>\n </div>\n </td>\n\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"plugin-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Download\"\n prepend-icon=\"mdi-download\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin\"\n />\n <v-list-item\n title=\"Edit Details\"\n prepend-icon=\"mdi-pencil\"\n data-test=\"edit-plugin\"\n @click=\"edit\"\n />\n <v-list-item\n title=\"Upgrade\"\n prepend-icon=\"mdi-update\"\n data-test=\"upgrade-plugin\"\n @click=\"upgrade\"\n />\n <v-list-item\n :title=\"`View Microservices (${microserviceCount})`\"\n prepend-icon=\"mdi-tab\"\n data-test=\"view-microservices\"\n @click=\"viewMicroservices\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n <plugin-details-dialog\n v-if=\"showCard\"\n v-model=\"showCard\"\n v-bind=\"plugin\"\n @trigger-uninstall=\"deletePrompt\"\n />\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { PluginDetailsDialog, PluginProps } from '@/plugins/plugin-store'\n\nexport default {\n components: {\n PluginDetailsDialog,\n },\n mixins: [PluginProps],\n props: {\n targets: {\n type: Array,\n default: () => {\n return []\n },\n },\n isModified: Boolean,\n microservices: {\n type: Object,\n default: () => ({}),\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showCard: false,\n }\n },\n computed: {\n displayTitle: function () {\n if (this.title) {\n return this.title\n }\n return this.name\n .replace(/^openc3-cosmos-/, '')\n .replace(/-?\\d+\\.\\d+\\.\\d+(?:\\.pre\\.beta\\d+\\.\\d+)?\\.gem(?:__\\d+)?$/, '') // '-6.6.1.pre.beta0.20250801182255.gem__20250801182444' or '6.6.1.gem'\n },\n getMicroservicesForPlugin: function () {\n const names = []\n for (const [microserviceName, microservice] of Object.entries(\n this.microservices,\n )) {\n if (microservice.plugin === this.name) {\n names.push(microserviceName)\n }\n }\n return names\n },\n microserviceCount: function () {\n return this.getMicroservicesForPlugin.length\n },\n },\n methods: {\n openDetails: function () {\n if (this.hasDetails) {\n this.showCard = true\n }\n },\n downloadPlugin: function () {\n Api.post(`/openc3-api/packages/${this.name}/download`).then(\n (response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n },\n )\n },\n downloadTarget: function (name) {\n Api.post(`/openc3-api/targets/${name}/download`).then((response) => {\n // Decode Base64 string\n const decodedData = window.atob(response.data.contents)\n // Create UNIT8ARRAY of size same as row data length\n const uInt8Array = new Uint8Array(decodedData.length)\n // Insert all character code into uInt8Array\n for (let i = 0; i < decodedData.length; ++i) {\n uInt8Array[i] = decodedData.charCodeAt(i)\n }\n const blob = new Blob([uInt8Array], { type: 'application/zip' })\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', response.data.filename)\n link.click()\n })\n },\n edit: function () {\n this.$emit('edit')\n },\n upgrade: function () {\n this.$emit('upgrade')\n },\n viewMicroservices: function () {\n const servicesParam = this.getMicroservicesForPlugin.join(',')\n this.$router.push({\n path: '/tools/admin/microservices',\n query: { services: servicesParam },\n })\n },\n deletePrompt: function () {\n this.showCard = false\n this.$emit('delete')\n },\n },\n}\n</script>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-data-table\n :headers=\"[]\"\n :items=\"shownPlugins\"\n density=\"compact\"\n class=\"list\"\n data-test=\"plugin-list\"\n >\n <template #item=\"{ item: plugin }\">\n <plugin-list-item\n :key=\"plugin.name\"\n v-bind=\"plugin\"\n :targets=\"pluginTargets(plugin.name)\"\n :is-modified=\"isModified(plugin.name)\"\n :microservices=\"microservices\"\n @edit=\"() => editPlugin(plugin.name)\"\n @upgrade=\"() => upgradePlugin(plugin.name)\"\n @delete=\"() => deletePrompt(plugin.name)\"\n />\n </template>\n </v-data-table>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport PluginListItem from './PluginListItem.vue'\n\nexport default {\n components: {\n PluginListItem,\n },\n props: {\n plugins: {\n type: Array,\n required: true,\n },\n targets: {\n type: Object,\n required: true,\n },\n showDefaultTools: {\n type: Boolean,\n default: false,\n },\n defaultPlugins: {\n type: Array,\n required: true,\n },\n },\n emits: ['edit', 'delete', 'upgrade'],\n data() {\n return {\n showPluginDetails: false,\n detailPlugin: null,\n microservices: {},\n }\n },\n computed: {\n shownPlugins() {\n const pluginsToShow = []\n const defaultPluginsToShow = []\n this.plugins.forEach((plugin) => {\n const pluginNameFirst = plugin.name.split('__')[0]\n const pluginNameSplit = pluginNameFirst.split('-').slice(0, -1)\n const pluginNameShort = pluginNameSplit.join('-')\n if (this.defaultPlugins.includes(pluginNameShort)) {\n defaultPluginsToShow.push(plugin)\n } else {\n pluginsToShow.push(plugin)\n }\n })\n pluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n if (this.showDefaultTools) {\n defaultPluginsToShow.sort((a, b) =>\n a.name < b.name ? -1 : a.name > b.name ? 1 : 0,\n )\n return pluginsToShow.concat(defaultPluginsToShow)\n }\n return pluginsToShow\n },\n },\n mounted() {\n this.fetchMicroservices()\n },\n methods: {\n showDetails: function (plugin) {\n this.detailPlugin = plugin\n this.showPluginDetails = true\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n editPlugin: function (plugin) {\n this.$emit('edit', plugin)\n },\n upgradePlugin(plugin) {\n this.$emit('upgrade', plugin)\n },\n deletePrompt: function (plugin) {\n this.$emit('delete', plugin)\n },\n fetchMicroservices: function () {\n Api.get('/openc3-api/microservices/all').then((response) => {\n this.microservices = response.data\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.list :deep(tr:nth-child(even)) {\n background-color: rgba(var(--v-theme-on-surface), 0.05);\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn append-icon=\"mdi-store\" @click=\"openStore\">\n Browse Plugins\n </v-btn>\n <v-btn append-icon=\"mdi-paperclip\" class=\"mx-2\" @click=\"selectFile\">\n Install From File\n </v-btn>\n <input\n ref=\"fileInput\"\n accept=\".gem\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n <br />\n <p class=\"mt-2\">\n Note: Use <v-icon> mdi-dots-horizontal </v-icon> in the Installed\n Plugins list to upgrade existing plugins\n </p>\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\" />\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col align=\"right\" class=\"mr-2\">\n <div>* indicates a modified plugin</div>\n <div>Click target link to download modifications</div>\n </v-col>\n </v-row>\n <v-divider />\n <!-- TODO This alert shows both success and failure. Make consistent with rest of OpenC3. -->\n <v-alert\n v-model=\"showAlert\"\n closable\n :type=\"alertType\"\n :text=\"alert\"\n data-test=\"plugin-alert\"\n />\n <v-list\n v-if=\"Object.keys(processes).length > 0\"\n class=\"list\"\n data-test=\"process-list\"\n >\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Process List </v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span\n v-text=\"\n ' Updated At: ' +\n formatNanoseconds(process.updated_at, timeZone)\n \"\n />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span> Show Output </span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-row no-gutters class=\"px-4\">\n <v-col class=\"text-h5\"> Installed Plugins </v-col>\n <v-col class=\"v-col-auto\">\n <v-switch\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n density=\"compact\"\n hide-details\n data-test=\"show-default-tools\"\n />\n </v-col>\n </v-row>\n <plugin-list\n :plugins=\"plugins\"\n :targets=\"targets\"\n :show-default-tools=\"showDefaultTools\"\n :default-plugins=\"defaultPlugins\"\n @edit=\"editPlugin\"\n @upgrade=\"upgradePlugin\"\n @delete=\"deletePrompt\"\n />\n <plugin-dialog\n v-if=\"showPluginDialog\"\n v-model=\"showPluginDialog\"\n :plugin-name=\"pluginName\"\n :variables=\"variables\"\n :plugin-txt=\"pluginTxt\"\n :existing-plugin-txt=\"existingPluginTxt\"\n :store-plugin-id=\"storePluginId\"\n :store-version-id=\"storeVersionId\"\n :min-cosmos-version=\"minCosmosVersion\"\n @callback=\"pluginCallback\"\n />\n <modified-plugin-dialog\n v-if=\"showModifiedPluginDialog\"\n v-model=\"showModifiedPluginDialog\"\n :plugin-name=\"currentPlugin\"\n :targets=\"pluginTargets(currentPlugin)\"\n :plugin-delete=\"pluginDelete\"\n @submit=\"modifiedSubmit\"\n />\n <!-- <download-dialog v-model=\"showDownloadDialog\" /> -->\n <simple-text-dialog\n v-model=\"showProcessOutput\"\n title=\"Process Output\"\n :text=\"processOutput\"\n />\n <v-bottom-sheet v-model=\"showPluginStore\" fullscreen>\n <plugin-store\n @close=\"() => (showPluginStore = false)\"\n @trigger-install=\"(storeData) => upload(null, storeData)\"\n />\n </v-bottom-sheet>\n </div>\n</template>\n\n<script>\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\nimport { PluginList } from '@/tools/admin/tabs/plugins'\nimport { PluginStore } from '@/plugins/plugin-store'\nimport { TimeFilters } from '@/util'\n\nexport default {\n components: {\n PluginDialog,\n PluginList,\n PluginStore,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n mixins: [TimeFilters],\n data() {\n return {\n // Control state\n pluginName: null,\n variables: {},\n storePluginId: null,\n storeVersionId: null,\n minCosmosVersion: null,\n pluginTxt: '',\n file: null,\n currentPlugin: null,\n pluginHashTmp: null,\n existingPluginTxt: null,\n progress: 0,\n pluginDelete: false,\n\n api: new OpenC3Api(),\n plugins: [],\n targets: {},\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginStore: false,\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n timeZone: 'local',\n // When updating update local_mode.rb, local_mode.py, plugins.p.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdqueue', // Enterprise only\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-logexplorer', // Enterprise only\n 'openc3-cosmos-tool-notebooks', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n watch: {\n // watcher to reset the file input when the dialog is closed\n showPluginDialog: function (newValue, oldValue) {\n if (newValue === false) {\n this.file = null\n this.$refs.fileInput.value = null\n }\n },\n },\n created() {\n this.api.update_plugin_store()\n this.api\n .get_setting('time_zone')\n .then((response) => {\n if (response) {\n this.timeZone = response\n }\n })\n .catch(() => {\n // Do nothing\n })\n },\n mounted() {\n this.update()\n this.updateProcesses()\n\n // Handle going \"back\" from the plugin store\n // (idk why v-bottom-sheet's close-on-back prop isn't working)\n const that = this\n window.onpopstate = function () {\n if (that.showPluginStore) {\n that.showPluginStore = false\n history.go(1)\n }\n }\n },\n methods: {\n resetControlState: function () {\n this.pluginName = null\n this.variables = {}\n this.storePluginId = null\n this.storeVersionId = null\n this.minCosmosVersion = null\n this.pluginTxt = ''\n this.file = null\n this.currentPlugin = null\n this.pluginHashTmp = null\n this.existingPluginTxt = null\n this.progress = 0\n this.pluginDelete = false\n },\n pluginTargets: function (plugin) {\n let result = []\n for (const target in this.targets) {\n if (this.targets[target]['plugin'] === plugin) {\n result.push(this.targets[target])\n }\n }\n return result\n },\n isModified: function (plugin) {\n return Object.entries(this.targets).some(([targetName, target]) => {\n return target['plugin'] === plugin && target['modified'] === true\n })\n },\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins/all').then((response) => {\n this.plugins = Object.entries(response.data).map(\n ([_, plugin]) => plugin,\n )\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n upload: function (existing = null, storeData = null) {\n const method = existing ? 'put' : 'post'\n const path = existing\n ? `/openc3-api/plugins/${existing}`\n : '/openc3-api/plugins'\n const formData = new FormData()\n if (storeData === null) {\n formData.append('plugin', this.file, this.file.name)\n } else {\n formData.append('store_plugin_id', storeData.id)\n formData.append('store_version_id', storeData.version_id)\n }\n let self = this\n const promise = Api[method](path, {\n data: formData,\n headers: { 'Content-Type': 'multipart/form-data' },\n onUploadProgress: function (progressEvent) {\n let percentCompleted = Math.round(\n (progressEvent.loaded * 100) / progressEvent.total,\n )\n self.progress = percentCompleted\n },\n })\n promise\n .then((response) => {\n this.progress = 100\n this.alert = 'Uploaded file'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt =\n response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.storePluginId = response.data.store_plugin_id\n this.storeVersionId = response.data.store_version_id\n this.minCosmosVersion = response.data.minimum_cosmos_version\n this.pluginTxt = pluginTxt\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n this.file = undefined\n })\n .catch((error) => {\n this.currentPlugin = null\n this.file = undefined\n })\n },\n pluginCallback: function (pluginHash) {\n this.showPluginDialog = false\n if (this.currentPlugin !== null) {\n pluginHash['name'] = this.currentPlugin\n }\n this.pluginHashTmp = pluginHash\n if (this.isModified(this.currentPlugin)) {\n this.pluginDelete = false\n this.showModifiedPluginDialog = true\n } else {\n this.pluginInstall()\n }\n },\n modifiedSubmit: async function (deleteModified) {\n if (deleteModified === true) {\n for (let target of this.pluginTargets(this.currentPlugin)) {\n if (target.modified == true) {\n await Api.post(`/openc3-api/targets/${target.name}/delete_modified`)\n }\n }\n }\n if (this.pluginDelete) {\n this.deletePlugin(this.currentPlugin)\n } else {\n this.pluginInstall()\n }\n },\n pluginInstall: function () {\n Api.post(`/openc3-api/plugins/install/${this.pluginName}`, {\n data: {\n plugin_hash: JSON.stringify(this.pluginHashTmp),\n },\n }).then((response) => {\n this.alert = `Started installing plugin ${this.pluginName} ...`\n this.alertType = 'success'\n this.showAlert = true\n this.currentPlugin = null\n this.file = undefined\n this.variables = {}\n this.pluginTxt = ''\n this.existingPluginTxt = null\n this.storePluginId = null\n this.storeVersionId = null\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\n })\n },\n editPlugin: function (plugin) {\n this.resetControlState()\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n this.pluginName = response.data.name\n this.variables = response.data.variables\n this.pluginTxt = response.data.plugin_txt_lines.join('\\n')\n this.existingPluginTxt = existingPluginTxt\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.resetControlState()\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.resetControlState()\n this.currentPlugin = plugin\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.resetControlState()\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n openStore() {\n this.resetControlState()\n this.showPluginStore = true\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n</style>\n"],"names":["SETTING_NAME","DEFAULT_STORE_URL","PluginProps","OpenC3Api","magicNumbers","fileHead","found","_","magicNumber","byte","i","mimeType","params","data","Api","_sfc_main","val","versionId","v","semver.gte","_hoisted_3","_hoisted_5","_hoisted_7","_hoisted_8","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","_withCtx","props","_component_v_btn","_ctx","_component_v_card_subtitle","_openBlock","_createElementBlock","_hoisted_2","_component_v_icon","_component_v_select","$data","_component_v_card_text","_component_v_img","_Fragment","_renderList","keyword","_component_v_chip","_hoisted_6","license","_cache","_component_v_text_field","_mergeProps","_component_v_card_actions","_normalizeProps","_guardReactiveProps","PluginDetailsDialog","event","_component_v_card_title","_hoisted_1","_normalizeClass","_component_plugin_details_dialog","URL_SETTING_NAME","API_KEY_SETTING_NAME","SETTING_SCOPE","Settings","value","navigableHost","response","setting","_component_v_alert","_createTextVNode","_component_v_checkbox","PluginCard","PluginStoreSettingsDialog","filtered","plugin","title","body","roles","storeUrl","_component_v_sheet","_component_v_progress_circular","_component_v_container","_component_v_row","_component_v_col","_component_plugin_card","_component_plugin_store_settings_dialog","names","microserviceName","microservice","decodedData","uInt8Array","blob","link","name","servicesParam","args","$props","target","index","_withModifiers","_component_v_menu","_component_v_list","_component_v_list_item","PluginListItem","pluginsToShow","defaultPluginsToShow","pluginNameShort","a","b","result","targetName","_component_v_data_table","_component_plugin_list_item","PluginDialog","PluginList","PluginStore","ModifiedPluginDialog","SimpleTextDialog","TimeFilters","newValue","oldValue","that","process","existing","storeData","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","dialog","files","parts","x","newName","existingName","_component_rux_progress","_component_v_divider","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_switch","_component_plugin_list","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog","_component_v_bottom_sheet","_component_plugin_store"],"mappings":"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"}
|