@openc3/vue-common 6.6.0 → 6.8.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-Bb_Ldxq7.cjs → ArrayWidget-DaONH8Iv.cjs} +2 -2
- package/dist/{ArrayWidget-Bb_Ldxq7.cjs.map → ArrayWidget-DaONH8Iv.cjs.map} +1 -1
- package/dist/{ArrayWidget-Ck6pzAyW.js → ArrayWidget-j3ncPuPx.js} +4 -4
- package/dist/{ArrayWidget-Ck6pzAyW.js.map → ArrayWidget-j3ncPuPx.js.map} +1 -1
- package/dist/ArrayplotWidget-DPMVlst7.cjs +2 -0
- package/dist/ArrayplotWidget-DPMVlst7.cjs.map +1 -0
- package/dist/{ArrayplotWidget-ntRLh6-B.js → ArrayplotWidget-DuLaiGa9.js} +22 -22
- package/dist/ArrayplotWidget-DuLaiGa9.js.map +1 -0
- package/dist/{BarColumn-Bgz2YJ59.js → BarColumn-BWJ0Dd4O.js} +3 -3
- package/dist/{BarColumn-Bgz2YJ59.js.map → BarColumn-BWJ0Dd4O.js.map} +1 -1
- package/dist/{BarColumn-DtRNuOpa.cjs → BarColumn-CchXr_ex.cjs} +2 -2
- package/dist/{BarColumn-DtRNuOpa.cjs.map → BarColumn-CchXr_ex.cjs.map} +1 -1
- package/dist/{BlockWidget-DGH3Zz5p.js → BlockWidget-Bf5Dd6Cr.js} +4 -4
- package/dist/{BlockWidget-DGH3Zz5p.js.map → BlockWidget-Bf5Dd6Cr.js.map} +1 -1
- package/dist/{BlockWidget-DOY5lVfa.cjs → BlockWidget-CeDueZQ0.cjs} +2 -2
- package/dist/{BlockWidget-DOY5lVfa.cjs.map → BlockWidget-CeDueZQ0.cjs.map} +1 -1
- package/dist/{ButtonWidget-CFyZXGt6.cjs → ButtonWidget-BZulfQct.cjs} +3 -3
- package/dist/{ButtonWidget-CFyZXGt6.cjs.map → ButtonWidget-BZulfQct.cjs.map} +1 -1
- package/dist/{ButtonWidget-D_tupiPB.js → ButtonWidget-bl_mGFYh.js} +17 -17
- package/dist/{ButtonWidget-D_tupiPB.js.map → ButtonWidget-bl_mGFYh.js.map} +1 -1
- package/dist/{CanvasWidget-C6dc7mUw.cjs → CanvasWidget-DwAXTAyn.cjs} +2 -2
- package/dist/{CanvasWidget-C6dc7mUw.cjs.map → CanvasWidget-DwAXTAyn.cjs.map} +1 -1
- package/dist/{CanvasWidget-CzG2jYQb.js → CanvasWidget-boDemgx1.js} +2 -2
- package/dist/{CanvasWidget-CzG2jYQb.js.map → CanvasWidget-boDemgx1.js.map} +1 -1
- package/dist/{CanvasdotWidget-0FAaw4G2.js → CanvasdotWidget-BZBbJcER.js} +2 -2
- package/dist/{CanvasdotWidget-0FAaw4G2.js.map → CanvasdotWidget-BZBbJcER.js.map} +1 -1
- package/dist/{CanvasdotWidget-9bBVHC1l.cjs → CanvasdotWidget-ByJp9ZIa.cjs} +2 -2
- package/dist/{CanvasdotWidget-9bBVHC1l.cjs.map → CanvasdotWidget-ByJp9ZIa.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-CNJlzLqo.js → CanvasimageWidget-6ywvT5jd.js} +3 -3
- package/dist/{CanvasimageWidget-CNJlzLqo.js.map → CanvasimageWidget-6ywvT5jd.js.map} +1 -1
- package/dist/{CanvasimageWidget-DjvdDCRS.cjs → CanvasimageWidget-BDprHuH3.cjs} +2 -2
- package/dist/{CanvasimageWidget-DjvdDCRS.cjs.map → CanvasimageWidget-BDprHuH3.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs → CanvasimagevalueWidget-Cl_EuzNC.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs.map → CanvasimagevalueWidget-Cl_EuzNC.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-DudwwOD6.js → CanvasimagevalueWidget-DjWrA3gX.js} +3 -3
- package/dist/{CanvasimagevalueWidget-DudwwOD6.js.map → CanvasimagevalueWidget-DjWrA3gX.js.map} +1 -1
- package/dist/{CanvaslabelWidget-BZQp16dH.js → CanvaslabelWidget-Bq4V2BQh.js} +2 -2
- package/dist/{CanvaslabelWidget-BZQp16dH.js.map → CanvaslabelWidget-Bq4V2BQh.js.map} +1 -1
- package/dist/{CanvaslabelWidget--6Sjc4E8.cjs → CanvaslabelWidget-aalWFBxK.cjs} +2 -2
- package/dist/{CanvaslabelWidget--6Sjc4E8.cjs.map → CanvaslabelWidget-aalWFBxK.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-CHS36Te9.js → CanvaslabelvalueWidget-C8oNcFLi.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-CHS36Te9.js.map → CanvaslabelvalueWidget-C8oNcFLi.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs → CanvaslabelvalueWidget-DIO0fADo.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs.map → CanvaslabelvalueWidget-DIO0fADo.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-Bn83Rb10.cjs → CanvaslineWidget-CqNOzV_A.cjs} +2 -2
- package/dist/{CanvaslineWidget-Bn83Rb10.cjs.map → CanvaslineWidget-CqNOzV_A.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-nhKEAGhs.js → CanvaslineWidget-nvbL2GoL.js} +2 -2
- package/dist/{CanvaslineWidget-nhKEAGhs.js.map → CanvaslineWidget-nvbL2GoL.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs → CanvaslinevalueWidget-D0kOhxXn.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs.map → CanvaslinevalueWidget-D0kOhxXn.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-DsyIDkJy.js → CanvaslinevalueWidget-ZACQedKx.js} +2 -2
- package/dist/{CanvaslinevalueWidget-DsyIDkJy.js.map → CanvaslinevalueWidget-ZACQedKx.js.map} +1 -1
- package/dist/{CheckbuttonWidget-DCam7Jd0.js → CheckbuttonWidget-B82UE8AB.js} +2 -2
- package/dist/{CheckbuttonWidget-DCam7Jd0.js.map → CheckbuttonWidget-B82UE8AB.js.map} +1 -1
- package/dist/{CheckbuttonWidget-BvggsGZY.cjs → CheckbuttonWidget-L9xyRwfS.cjs} +2 -2
- package/dist/{CheckbuttonWidget-BvggsGZY.cjs.map → CheckbuttonWidget-L9xyRwfS.cjs.map} +1 -1
- package/dist/ClassificationBanners-ZF9Ab7D0.cjs +2 -0
- package/dist/ClassificationBanners-ZF9Ab7D0.cjs.map +1 -0
- package/dist/ClassificationBanners-jiqWjTAZ.js +35 -0
- package/dist/ClassificationBanners-jiqWjTAZ.js.map +1 -0
- package/dist/{ComboboxWidget-ZX-k-_aK.js → ComboboxWidget-4OFiSkI6.js} +2 -2
- package/dist/{ComboboxWidget-ZX-k-_aK.js.map → ComboboxWidget-4OFiSkI6.js.map} +1 -1
- package/dist/{ComboboxWidget-BS5WSbrK.cjs → ComboboxWidget-6hmnB_mK.cjs} +2 -2
- package/dist/{ComboboxWidget-BS5WSbrK.cjs.map → ComboboxWidget-6hmnB_mK.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-7tOK2XQk.cjs → CriticalCmdDialog-C-UGhtjE.cjs} +2 -2
- package/dist/{CriticalCmdDialog-7tOK2XQk.cjs.map → CriticalCmdDialog-C-UGhtjE.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-Dylpoz_4.js → CriticalCmdDialog-FhXDdBn4.js} +9 -9
- package/dist/{CriticalCmdDialog-Dylpoz_4.js.map → CriticalCmdDialog-FhXDdBn4.js.map} +1 -1
- package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
- package/dist/CustomIcon-h5X7369N.js.map +1 -1
- package/dist/{DateWidget-DuJ5uC2t.js → DateWidget-BmwtdirF.js} +2 -2
- package/dist/{DateWidget-DuJ5uC2t.js.map → DateWidget-BmwtdirF.js.map} +1 -1
- package/dist/{DateWidget-jejbk2-G.cjs → DateWidget-CmSp7svA.cjs} +2 -2
- package/dist/{DateWidget-jejbk2-G.cjs.map → DateWidget-CmSp7svA.cjs.map} +1 -1
- package/dist/{DetailsDialog-BQE0TraI.js → DetailsDialog-CLKEfU0s.js} +89 -89
- package/dist/DetailsDialog-CLKEfU0s.js.map +1 -0
- package/dist/DetailsDialog-DEicfRO1.cjs +2 -0
- package/dist/DetailsDialog-DEicfRO1.cjs.map +1 -0
- package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
- package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
- package/dist/{EventListDialog-CGUFCrJF.js → EventListDialog-BvSMSn7J.js} +52 -52
- package/dist/{EventListDialog-CGUFCrJF.js.map → EventListDialog-BvSMSn7J.js.map} +1 -1
- package/dist/EventListDialog-Em1RcH7I.cjs +2 -0
- package/dist/{EventListDialog-CDcJcxy5.cjs.map → EventListDialog-Em1RcH7I.cjs.map} +1 -1
- package/dist/{FormatvalueWidget-DYICPNcx.js → FormatvalueWidget-C8exC3bj.js} +3 -3
- package/dist/{FormatvalueWidget-DYICPNcx.js.map → FormatvalueWidget-C8exC3bj.js.map} +1 -1
- package/dist/{FormatvalueWidget-wu7Q3sXu.cjs → FormatvalueWidget-auKALSPC.cjs} +2 -2
- package/dist/{FormatvalueWidget-wu7Q3sXu.cjs.map → FormatvalueWidget-auKALSPC.cjs.map} +1 -1
- package/dist/Graph-BJqtVAaV.cjs +2 -0
- package/dist/Graph-BJqtVAaV.cjs.map +1 -0
- package/dist/Graph-CWcrowaT.js +2662 -0
- package/dist/Graph-CWcrowaT.js.map +1 -0
- package/dist/GraphWidget-BroqS0SO.cjs +2 -0
- package/dist/{GraphWidget-CQjKAMPR.cjs.map → GraphWidget-BroqS0SO.cjs.map} +1 -1
- package/dist/{GraphWidget-cTVq29cY.js → GraphWidget-CvzxZYVx.js} +31 -44
- package/dist/{GraphWidget-cTVq29cY.js.map → GraphWidget-CvzxZYVx.js.map} +1 -1
- package/dist/{HorizontalWidget-v1pfd94Z.js → HorizontalWidget-Ck151zVw.js} +6 -6
- package/dist/{HorizontalWidget-v1pfd94Z.js.map → HorizontalWidget-Ck151zVw.js.map} +1 -1
- package/dist/HorizontalWidget-DBeyBZCp.cjs +2 -0
- package/dist/{HorizontalWidget--AkRJPlL.cjs.map → HorizontalWidget-DBeyBZCp.cjs.map} +1 -1
- package/dist/HorizontalboxWidget-CuWtYdgh.cjs +2 -0
- package/dist/{HorizontalboxWidget-synL-Bar.cjs.map → HorizontalboxWidget-CuWtYdgh.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-B06-c_n4.js → HorizontalboxWidget-D3P-cl9V.js} +15 -15
- package/dist/{HorizontalboxWidget-B06-c_n4.js.map → HorizontalboxWidget-D3P-cl9V.js.map} +1 -1
- package/dist/{HorizontallineWidget-DEODVJCk.js → HorizontallineWidget-BE1TjPU8.js} +2 -2
- package/dist/{HorizontallineWidget-DEODVJCk.js.map → HorizontallineWidget-BE1TjPU8.js.map} +1 -1
- package/dist/{HorizontallineWidget-lTr2JTFY.cjs → HorizontallineWidget-QUFjdOSu.cjs} +2 -2
- package/dist/{HorizontallineWidget-lTr2JTFY.cjs.map → HorizontallineWidget-QUFjdOSu.cjs.map} +1 -1
- package/dist/{IframeWidget-n8lNXrpt.js → IframeWidget-BgJCgues.js} +2 -2
- package/dist/{IframeWidget-n8lNXrpt.js.map → IframeWidget-BgJCgues.js.map} +1 -1
- package/dist/{IframeWidget-ByhwW9yG.cjs → IframeWidget-DOZ1YyS2.cjs} +2 -2
- package/dist/{IframeWidget-ByhwW9yG.cjs.map → IframeWidget-DOZ1YyS2.cjs.map} +1 -1
- package/dist/{ImageLoader-DBWVFtNu.cjs → ImageLoader-AGF0VbZ5.cjs} +2 -2
- package/dist/{ImageLoader-DBWVFtNu.cjs.map → ImageLoader-AGF0VbZ5.cjs.map} +1 -1
- package/dist/{ImageLoader-CfcErydq.js → ImageLoader-CWn-PLOk.js} +2 -2
- package/dist/{ImageLoader-CfcErydq.js.map → ImageLoader-CWn-PLOk.js.map} +1 -1
- package/dist/{ImageviewerWidget-DE8fj06Z.js → ImageviewerWidget-BlhFZD2f.js} +2 -2
- package/dist/{ImageviewerWidget-DE8fj06Z.js.map → ImageviewerWidget-BlhFZD2f.js.map} +1 -1
- package/dist/{ImageviewerWidget-D4mU6wLX.cjs → ImageviewerWidget-DnmhYP68.cjs} +2 -2
- package/dist/{ImageviewerWidget-D4mU6wLX.cjs.map → ImageviewerWidget-DnmhYP68.cjs.map} +1 -1
- package/dist/{InterfacesTab-DTAAIx-y.cjs → InterfacesTab-76UJTIwF.cjs} +2 -2
- package/dist/{InterfacesTab-DTAAIx-y.cjs.map → InterfacesTab-76UJTIwF.cjs.map} +1 -1
- package/dist/{InterfacesTab-BF-Wx5gk.js → InterfacesTab-Cwz-zG7j.js} +3 -3
- package/dist/{InterfacesTab-BF-Wx5gk.js.map → InterfacesTab-Cwz-zG7j.js.map} +1 -1
- package/dist/{LabelWidget-DQZqRxKF.cjs → LabelWidget-C0DhD9Mn.cjs} +2 -2
- package/dist/{LabelWidget-DQZqRxKF.cjs.map → LabelWidget-C0DhD9Mn.cjs.map} +1 -1
- package/dist/{LabelWidget-iUIJLhdA.js → LabelWidget-Cwosk4x2.js} +2 -2
- package/dist/{LabelWidget-iUIJLhdA.js.map → LabelWidget-Cwosk4x2.js.map} +1 -1
- package/dist/{LabelledWidget-9HWChRmv.cjs → LabelledWidget-D8-aKfA_.cjs} +2 -2
- package/dist/{LabelledWidget-9HWChRmv.cjs.map → LabelledWidget-D8-aKfA_.cjs.map} +1 -1
- package/dist/{LabelledWidget-KI6fMlsr.js → LabelledWidget-Dl6rAFTQ.js} +4 -4
- package/dist/{LabelledWidget-KI6fMlsr.js.map → LabelledWidget-Dl6rAFTQ.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-DwzTP73u.cjs → LabelprogressbarWidget-DosPhvaY.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-DwzTP73u.cjs.map → LabelprogressbarWidget-DosPhvaY.cjs.map} +1 -1
- package/dist/{LabelprogressbarWidget-C2lzmqBH.js → LabelprogressbarWidget-MuAKesOz.js} +4 -4
- package/dist/{LabelprogressbarWidget-C2lzmqBH.js.map → LabelprogressbarWidget-MuAKesOz.js.map} +1 -1
- package/dist/{LabelsparklineWidget-Ci6GGm29.js → LabelsparklineWidget-6LA6Ox3d.js} +4 -4
- package/dist/{LabelsparklineWidget-Ci6GGm29.js.map → LabelsparklineWidget-6LA6Ox3d.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DMjBshq8.cjs → LabelsparklineWidget-CLU8722I.cjs} +2 -2
- package/dist/{LabelsparklineWidget-DMjBshq8.cjs.map → LabelsparklineWidget-CLU8722I.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-oiW-JDw6.js → LabelvalueWidget-BxAXx-Tf.js} +4 -4
- package/dist/{LabelvalueWidget-oiW-JDw6.js.map → LabelvalueWidget-BxAXx-Tf.js.map} +1 -1
- package/dist/{LabelvalueWidget-mAb0eLA8.cjs → LabelvalueWidget-WP4gK29n.cjs} +2 -2
- package/dist/{LabelvalueWidget-mAb0eLA8.cjs.map → LabelvalueWidget-WP4gK29n.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs → LabelvaluedescWidget-BQ-6OXHc.cjs} +2 -2
- package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs.map → LabelvaluedescWidget-BQ-6OXHc.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js → LabelvaluedescWidget-Dwwlnd1g.js} +5 -5
- package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js.map → LabelvaluedescWidget-Dwwlnd1g.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js → LabelvaluelimitsbarWidget-Dv8Qk8kK.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js.map → LabelvaluelimitsbarWidget-Dv8Qk8kK.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs → LabelvaluelimitsbarWidget-Z_7ARnvo.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map → LabelvaluelimitsbarWidget-Z_7ARnvo.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js → LabelvaluelimitscolumnWidget-D-_gl6fq.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js.map → LabelvaluelimitscolumnWidget-D-_gl6fq.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs → LabelvaluelimitscolumnWidget-DiO1b01N.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs.map → LabelvaluelimitscolumnWidget-DiO1b01N.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-Bs9locqu.js → LabelvaluerangebarWidget-B3MKT-3Y.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-Bs9locqu.js.map → LabelvaluerangebarWidget-B3MKT-3Y.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs → LabelvaluerangebarWidget-DtajHP0b.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs.map → LabelvaluerangebarWidget-DtajHP0b.cjs.map} +1 -1
- package/dist/{Layout-1z8iJV5-.js → Layout-Bkb6VP3e.js} +2 -2
- package/dist/{Layout-1z8iJV5-.js.map → Layout-Bkb6VP3e.js.map} +1 -1
- package/dist/Layout-CSbYbZWA.cjs +2 -0
- package/dist/{Layout-kOQnicRa.cjs.map → Layout-CSbYbZWA.cjs.map} +1 -1
- package/dist/{LedWidget-BN8IgAxJ.js → LedWidget-DOuDD8LI.js} +6 -6
- package/dist/LedWidget-DOuDD8LI.js.map +1 -0
- package/dist/LedWidget-DeREi8-u.cjs +2 -0
- package/dist/LedWidget-DeREi8-u.cjs.map +1 -0
- package/dist/LimitsbarWidget-BHr3IcIx.cjs +2 -0
- package/dist/{LimitsbarWidget-Co5GAHro.cjs.map → LimitsbarWidget-BHr3IcIx.cjs.map} +1 -1
- package/dist/{LimitsbarWidget-BxxoKTjp.js → LimitsbarWidget-D1U6SvVL.js} +4 -4
- package/dist/{LimitsbarWidget-BxxoKTjp.js.map → LimitsbarWidget-D1U6SvVL.js.map} +1 -1
- package/dist/{LimitscolorWidget-BpTcgqRC.cjs → LimitscolorWidget-BUkKRrSL.cjs} +2 -2
- package/dist/{LimitscolorWidget-BpTcgqRC.cjs.map → LimitscolorWidget-BUkKRrSL.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-DFDwf4In.js → LimitscolorWidget-iSMGusqt.js} +2 -2
- package/dist/{LimitscolorWidget-DFDwf4In.js.map → LimitscolorWidget-iSMGusqt.js.map} +1 -1
- package/dist/{LimitscolumnWidget-CqJJKDzz.cjs → LimitscolumnWidget-COfNnb6f.cjs} +2 -2
- package/dist/{LimitscolumnWidget-CqJJKDzz.cjs.map → LimitscolumnWidget-COfNnb6f.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-CdBh2mJu.js → LimitscolumnWidget-DjxZTt_r.js} +4 -4
- package/dist/{LimitscolumnWidget-CdBh2mJu.js.map → LimitscolumnWidget-DjxZTt_r.js.map} +1 -1
- package/dist/{LinegraphWidget-jXksfbPb.js → LinegraphWidget-BHKU6zlT.js} +13 -13
- package/dist/LinegraphWidget-BHKU6zlT.js.map +1 -0
- package/dist/LinegraphWidget-RleSRWKa.cjs +2 -0
- package/dist/LinegraphWidget-RleSRWKa.cjs.map +1 -0
- package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js → MatrixbycolumnsWidget-BKO-A2QD.js} +4 -4
- package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js.map → MatrixbycolumnsWidget-BKO-A2QD.js.map} +1 -1
- package/dist/MatrixbycolumnsWidget-DWouVj7A.cjs +2 -0
- package/dist/{MatrixbycolumnsWidget-DxRhvPGv.cjs.map → MatrixbycolumnsWidget-DWouVj7A.cjs.map} +1 -1
- package/dist/{MicroservicesTab-DGaTcj-y.cjs → MicroservicesTab-L6qMAy4x.cjs} +2 -2
- package/dist/{MicroservicesTab-DGaTcj-y.cjs.map → MicroservicesTab-L6qMAy4x.cjs.map} +1 -1
- package/dist/{MicroservicesTab-B-SdMwek.js → MicroservicesTab-xLup6THU.js} +4 -4
- package/dist/{MicroservicesTab-B-SdMwek.js.map → MicroservicesTab-xLup6THU.js.map} +1 -1
- package/dist/{Openc3Screen-BZN0Wtrm.js → Openc3Screen-1rQ_Dbp4.js} +585 -452
- package/dist/Openc3Screen-1rQ_Dbp4.js.map +1 -0
- package/dist/Openc3Screen-BHHnSEoI.cjs +6 -0
- package/dist/Openc3Screen-BHHnSEoI.cjs.map +1 -0
- package/dist/{OutputDialog-CxKDhrg6.cjs → OutputDialog-DgM7aoa-.cjs} +2 -2
- package/dist/{OutputDialog-CxKDhrg6.cjs.map → OutputDialog-DgM7aoa-.cjs.map} +1 -1
- package/dist/{OutputDialog-CcSp-Uqo.js → OutputDialog-Ut5cXGxQ.js} +12 -12
- package/dist/{OutputDialog-CcSp-Uqo.js.map → OutputDialog-Ut5cXGxQ.js.map} +1 -1
- package/dist/{PackagesTab-Dx25CfF0.js → PackagesTab-ChJDyU3Z.js} +17 -17
- package/dist/{PackagesTab-Dx25CfF0.js.map → PackagesTab-ChJDyU3Z.js.map} +1 -1
- package/dist/PackagesTab-jqsRJEcJ.cjs +2 -0
- package/dist/{PackagesTab-B4V2n4io.cjs.map → PackagesTab-jqsRJEcJ.cjs.map} +1 -1
- package/dist/PluginsTab-CayzDij0.js +1340 -0
- package/dist/PluginsTab-CayzDij0.js.map +1 -0
- package/dist/PluginsTab-DYEv8EPg.cjs +6 -0
- package/dist/PluginsTab-DYEv8EPg.cjs.map +1 -0
- package/dist/{ProgressbarWidget-C0AkbX_o.cjs → ProgressbarWidget-Xba7gDbW.cjs} +2 -2
- package/dist/{ProgressbarWidget-C0AkbX_o.cjs.map → ProgressbarWidget-Xba7gDbW.cjs.map} +1 -1
- package/dist/{ProgressbarWidget-Cdu5nJC3.js → ProgressbarWidget-fbr2qu_N.js} +2 -2
- package/dist/{ProgressbarWidget-Cdu5nJC3.js.map → ProgressbarWidget-fbr2qu_N.js.map} +1 -1
- package/dist/{RadiobuttonWidget-DslmJO31.cjs → RadiobuttonWidget-CdpKw7jr.cjs} +2 -2
- package/dist/{RadiobuttonWidget-DslmJO31.cjs.map → RadiobuttonWidget-CdpKw7jr.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-CZZGbvdG.js → RadiobuttonWidget-DL08zcQT.js} +2 -2
- package/dist/{RadiobuttonWidget-CZZGbvdG.js.map → RadiobuttonWidget-DL08zcQT.js.map} +1 -1
- package/dist/{RadiogroupWidget-DKgBAR9E.cjs → RadiogroupWidget-DSA8ENmw.cjs} +2 -2
- package/dist/{RadiogroupWidget-DKgBAR9E.cjs.map → RadiogroupWidget-DSA8ENmw.cjs.map} +1 -1
- package/dist/{RadiogroupWidget-CQN3v8Ip.js → RadiogroupWidget-DW9Xpj3c.js} +2 -2
- package/dist/{RadiogroupWidget-CQN3v8Ip.js.map → RadiogroupWidget-DW9Xpj3c.js.map} +1 -1
- package/dist/{RangebarWidget-Tq80I5zA.cjs → RangebarWidget-B4oRyUwG.cjs} +2 -2
- package/dist/{RangebarWidget-Tq80I5zA.cjs.map → RangebarWidget-B4oRyUwG.cjs.map} +1 -1
- package/dist/{RangebarWidget-dZN9WjoZ.js → RangebarWidget-o9q55kjc.js} +4 -4
- package/dist/{RangebarWidget-dZN9WjoZ.js.map → RangebarWidget-o9q55kjc.js.map} +1 -1
- package/dist/RedisTab-BGz2ZN9T.js +171 -0
- package/dist/RedisTab-BGz2ZN9T.js.map +1 -0
- package/dist/RedisTab-Uqcfgux1.cjs +2 -0
- package/dist/RedisTab-Uqcfgux1.cjs.map +1 -0
- package/dist/{RollupWidget-CHdZAUCb.cjs → RollupWidget-43v3NX_Z.cjs} +2 -2
- package/dist/{RollupWidget-CHdZAUCb.cjs.map → RollupWidget-43v3NX_Z.cjs.map} +1 -1
- package/dist/{RollupWidget-i9DnNJl6.js → RollupWidget-BHnjj-DF.js} +2 -2
- package/dist/{RollupWidget-i9DnNJl6.js.map → RollupWidget-BHnjj-DF.js.map} +1 -1
- package/dist/{RoutersTab-Cp8wM-mS.cjs → RoutersTab-Be53r61Y.cjs} +2 -2
- package/dist/{RoutersTab-Cp8wM-mS.cjs.map → RoutersTab-Be53r61Y.cjs.map} +1 -1
- package/dist/{RoutersTab-DiYEI1Nq.js → RoutersTab-CCEPlZ_Y.js} +3 -3
- package/dist/{RoutersTab-DiYEI1Nq.js.map → RoutersTab-CCEPlZ_Y.js.map} +1 -1
- package/dist/{ScriptChooser-BnTP6ucF.cjs → ScriptChooser-B6TGFTBN.cjs} +2 -2
- package/dist/{ScriptChooser-BnTP6ucF.cjs.map → ScriptChooser-B6TGFTBN.cjs.map} +1 -1
- package/dist/{ScriptChooser-Cua8ObYv.js → ScriptChooser-CXjcm3bN.js} +2 -2
- package/dist/{ScriptChooser-Cua8ObYv.js.map → ScriptChooser-CXjcm3bN.js.map} +1 -1
- package/dist/{ScrollwindowWidget-54GU96Ve.js → ScrollwindowWidget-D-QVwztC.js} +15 -15
- package/dist/ScrollwindowWidget-D-QVwztC.js.map +1 -0
- package/dist/ScrollwindowWidget-D6ZHZr3o.cjs +2 -0
- package/dist/ScrollwindowWidget-D6ZHZr3o.cjs.map +1 -0
- package/dist/{SecretsTab-DY16usGc.cjs → SecretsTab-DDZ1VoUf.cjs} +2 -2
- package/dist/{SecretsTab-DY16usGc.cjs.map → SecretsTab-DDZ1VoUf.cjs.map} +1 -1
- package/dist/{SecretsTab-uWRVI1EE.js → SecretsTab-vVy356vr.js} +7 -7
- package/dist/{SecretsTab-uWRVI1EE.js.map → SecretsTab-vVy356vr.js.map} +1 -1
- package/dist/SettingsTab-CbWrf7U9.js +1763 -0
- package/dist/SettingsTab-CbWrf7U9.js.map +1 -0
- package/dist/SettingsTab-DsIVE5UL.cjs +3 -0
- package/dist/SettingsTab-DsIVE5UL.cjs.map +1 -0
- package/dist/{SignalWidget-B_kA9eCJ.js → SignalWidget-CsWuufdx.js} +2 -2
- package/dist/{SignalWidget-B_kA9eCJ.js.map → SignalWidget-CsWuufdx.js.map} +1 -1
- package/dist/{SignalWidget-COL8kXSJ.cjs → SignalWidget-CysAE9ZG.cjs} +2 -2
- package/dist/{SignalWidget-COL8kXSJ.cjs.map → SignalWidget-CysAE9ZG.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-BWUqPlTv.cjs → SimpleTextDialog-CU6G5CBY.cjs} +2 -2
- package/dist/{SimpleTextDialog-BWUqPlTv.cjs.map → SimpleTextDialog-CU6G5CBY.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-BulqUrdH.js → SimpleTextDialog-ChV5vRcV.js} +5 -5
- package/dist/{SimpleTextDialog-BulqUrdH.js.map → SimpleTextDialog-ChV5vRcV.js.map} +1 -1
- package/dist/{SpacerWidget-D_Ya_b1j.cjs → SpacerWidget-ChNk5TFU.cjs} +2 -2
- package/dist/{SpacerWidget-D_Ya_b1j.cjs.map → SpacerWidget-ChNk5TFU.cjs.map} +1 -1
- package/dist/{SpacerWidget-XoMPHak8.js → SpacerWidget-Di9-qunj.js} +2 -2
- package/dist/{SpacerWidget-XoMPHak8.js.map → SpacerWidget-Di9-qunj.js.map} +1 -1
- package/dist/{SparklineWidget-DQNsvEj9.js → SparklineWidget-B6-zhdPW.js} +4 -4
- package/dist/{SparklineWidget-DQNsvEj9.js.map → SparklineWidget-B6-zhdPW.js.map} +1 -1
- package/dist/{SparklineWidget-CRzXTS5z.cjs → SparklineWidget-D1tVqSRL.cjs} +2 -2
- package/dist/{SparklineWidget-CRzXTS5z.cjs.map → SparklineWidget-D1tVqSRL.cjs.map} +1 -1
- package/dist/{TabbookWidget-_HVA72t5.js → TabbookWidget-B1E1_mzA.js} +2 -2
- package/dist/{TabbookWidget-_HVA72t5.js.map → TabbookWidget-B1E1_mzA.js.map} +1 -1
- package/dist/{TabbookWidget-Bh-GDBXg.cjs → TabbookWidget-Btg-Axid.cjs} +2 -2
- package/dist/{TabbookWidget-Bh-GDBXg.cjs.map → TabbookWidget-Btg-Axid.cjs.map} +1 -1
- package/dist/{TargetsTab-BfoRYnTP.js → TargetsTab-DbbQcBuK.js} +3 -3
- package/dist/{TargetsTab-BfoRYnTP.js.map → TargetsTab-DbbQcBuK.js.map} +1 -1
- package/dist/{TargetsTab-CGE-jQAz.cjs → TargetsTab-pbmAAkOA.cjs} +2 -2
- package/dist/{TargetsTab-CGE-jQAz.cjs.map → TargetsTab-pbmAAkOA.cjs.map} +1 -1
- package/dist/{TextBoxDialog-C60jmnyN.js → TextBoxDialog-CdFHdj5W.js} +4 -4
- package/dist/{TextBoxDialog-C60jmnyN.js.map → TextBoxDialog-CdFHdj5W.js.map} +1 -1
- package/dist/{TextBoxDialog-DWt30tB8.cjs → TextBoxDialog-DbD8P4Xc.cjs} +2 -2
- package/dist/{TextBoxDialog-DWt30tB8.cjs.map → TextBoxDialog-DbD8P4Xc.cjs.map} +1 -1
- package/dist/{TextboxWidget-0JXn4bMH.js → TextboxWidget-CBVEXPw_.js} +4 -4
- package/dist/{TextboxWidget-0JXn4bMH.js.map → TextboxWidget-CBVEXPw_.js.map} +1 -1
- package/dist/{TextboxWidget-uDptDK_z.cjs → TextboxWidget-CHXcR8lA.cjs} +2 -2
- package/dist/{TextboxWidget-uDptDK_z.cjs.map → TextboxWidget-CHXcR8lA.cjs.map} +1 -1
- package/dist/{TextfieldWidget-BXr9MkVW.js → TextfieldWidget-DZMHrtQa.js} +2 -2
- package/dist/{TextfieldWidget-BXr9MkVW.js.map → TextfieldWidget-DZMHrtQa.js.map} +1 -1
- package/dist/{TextfieldWidget-B0FCskrL.cjs → TextfieldWidget-vSJ9CtKs.cjs} +2 -2
- package/dist/{TextfieldWidget-B0FCskrL.cjs.map → TextfieldWidget-vSJ9CtKs.cjs.map} +1 -1
- package/dist/{TimeWidget-q5tUvHC6.cjs → TimeWidget-ClkxS_oo.cjs} +2 -2
- package/dist/{TimeWidget-q5tUvHC6.cjs.map → TimeWidget-ClkxS_oo.cjs.map} +1 -1
- package/dist/{TimeWidget-C67uwMGH.js → TimeWidget-K4MNmJ7J.js} +2 -2
- package/dist/{TimeWidget-C67uwMGH.js.map → TimeWidget-K4MNmJ7J.js.map} +1 -1
- package/dist/{TitleWidget-t_YLgUMB.js → TitleWidget-8IcwweFE.js} +2 -2
- package/dist/{TitleWidget-t_YLgUMB.js.map → TitleWidget-8IcwweFE.js.map} +1 -1
- package/dist/{TitleWidget-REsd7MqR.cjs → TitleWidget-DJJ17ATm.cjs} +2 -2
- package/dist/{TitleWidget-REsd7MqR.cjs.map → TitleWidget-DJJ17ATm.cjs.map} +1 -1
- package/dist/ToolsTab-BkabqeR_.cjs +7 -0
- package/dist/{ToolsTab-CGztf9_j.cjs.map → ToolsTab-BkabqeR_.cjs.map} +1 -1
- package/dist/{ToolsTab-DKYeIlXu.js → ToolsTab-tkganPCk.js} +6 -6
- package/dist/{ToolsTab-DKYeIlXu.js.map → ToolsTab-tkganPCk.js.map} +1 -1
- package/dist/{TopBar-BrCfgCxc.js → TopBar-BoI8SRaF.js} +10 -10
- package/dist/{TopBar-BrCfgCxc.js.map → TopBar-BoI8SRaF.js.map} +1 -1
- package/dist/TopBar-zJvwq8pr.cjs +2 -0
- package/dist/{TopBar-B0UcAtIW.cjs.map → TopBar-zJvwq8pr.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js → UpgradeToEnterpriseDialog-BYz9YoyY.js} +9 -9
- package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js.map → UpgradeToEnterpriseDialog-BYz9YoyY.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs → UpgradeToEnterpriseDialog-BxHUptQB.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map → UpgradeToEnterpriseDialog-BxHUptQB.cjs.map} +1 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BflJrsRh.cjs +1498 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BflJrsRh.cjs.map +1 -0
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-quWsUlLr.js} +12916 -12652
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-quWsUlLr.js.map +1 -0
- package/dist/VWidget-3ziiUuPM.cjs +2 -0
- package/dist/VWidget-3ziiUuPM.cjs.map +1 -0
- package/dist/VWidget-CoIgX3hM.js +190 -0
- package/dist/VWidget-CoIgX3hM.js.map +1 -0
- package/dist/{ValueWidget-3jNtnh5i.js → ValueWidget-BvT1ASar.js} +4 -4
- package/dist/{ValueWidget-3jNtnh5i.js.map → ValueWidget-BvT1ASar.js.map} +1 -1
- package/dist/{ValueWidget-CjZeSiPQ.cjs → ValueWidget-RU-vFOh9.cjs} +2 -2
- package/dist/{ValueWidget-CjZeSiPQ.cjs.map → ValueWidget-RU-vFOh9.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs → ValuelimitsbarWidget-B5UtwjJW.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs.map → ValuelimitsbarWidget-B5UtwjJW.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-JSceOzGS.js → ValuelimitsbarWidget-C5lBnUmB.js} +4 -4
- package/dist/{ValuelimitsbarWidget-JSceOzGS.js.map → ValuelimitsbarWidget-C5lBnUmB.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs → ValuelimitscolumnWidget-BruOZb26.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs.map → ValuelimitscolumnWidget-BruOZb26.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js → ValuelimitscolumnWidget-DHYI0WBL.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js.map → ValuelimitscolumnWidget-DHYI0WBL.js.map} +1 -1
- package/dist/{ValuerangebarWidget-DnZrho8S.js → ValuerangebarWidget-BSszZhlE.js} +4 -4
- package/dist/{ValuerangebarWidget-DnZrho8S.js.map → ValuerangebarWidget-BSszZhlE.js.map} +1 -1
- package/dist/{ValuerangebarWidget-CpZYmUl_.cjs → ValuerangebarWidget-BhQVRHhm.cjs} +2 -2
- package/dist/{ValuerangebarWidget-CpZYmUl_.cjs.map → ValuerangebarWidget-BhQVRHhm.cjs.map} +1 -1
- package/dist/{VerticalWidget-DJvoxqLE.js → VerticalWidget-1GhgYrC3.js} +13 -13
- package/dist/{VerticalWidget-DJvoxqLE.js.map → VerticalWidget-1GhgYrC3.js.map} +1 -1
- package/dist/VerticalWidget-XZrIw9zV.cjs +2 -0
- package/dist/{VerticalWidget-CcJMMaK_.cjs.map → VerticalWidget-XZrIw9zV.cjs.map} +1 -1
- package/dist/VerticalboxWidget-BV-onQ8m.cjs +2 -0
- package/dist/{VerticalboxWidget-CJR_mOLa.cjs.map → VerticalboxWidget-BV-onQ8m.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-CYYyLBoO.js → VerticalboxWidget-DYHJqEzd.js} +13 -13
- package/dist/{VerticalboxWidget-CYYyLBoO.js.map → VerticalboxWidget-DYHJqEzd.js.map} +1 -1
- package/dist/{Widget-Bn_S-zBo.js → Widget-B8t93Oid.js} +4 -4
- package/dist/Widget-B8t93Oid.js.map +1 -0
- package/dist/{Widget-O7wkmc39.cjs → Widget-Blq-k5SB.cjs} +2 -2
- package/dist/{Widget-O7wkmc39.cjs.map → Widget-Blq-k5SB.cjs.map} +1 -1
- package/dist/cmdUtilities-BMsSNjt_.js +46 -0
- package/dist/cmdUtilities-BMsSNjt_.js.map +1 -0
- package/dist/cmdUtilities-ChD8v8-7.cjs +2 -0
- package/dist/cmdUtilities-ChD8v8-7.cjs.map +1 -0
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +685 -823
- package/dist/components.js.map +1 -1
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/{index-qCq0L4jN.js → index-DDjz5VQq.js} +345 -327
- package/dist/index-DDjz5VQq.js.map +1 -0
- package/dist/index-DZh4NjG5.cjs +7 -0
- package/dist/index-DZh4NjG5.cjs.map +1 -0
- package/dist/plugins.cjs +2 -2
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +184 -177
- package/dist/plugins.js.map +1 -1
- package/dist/settings-DyvFSj59.cjs +2 -0
- package/dist/settings-DyvFSj59.cjs.map +1 -0
- package/dist/settings-UZsgbUSr.js +34 -0
- package/dist/settings-UZsgbUSr.js.map +1 -0
- package/dist/tools/admin.cjs +3 -3
- package/dist/tools/admin.cjs.map +1 -1
- package/dist/tools/admin.js +84 -76
- package/dist/tools/admin.js.map +1 -1
- package/dist/tools/base.cjs +1 -1
- package/dist/tools/base.cjs.map +1 -1
- package/dist/tools/base.js +504 -473
- package/dist/tools/base.js.map +1 -1
- package/dist/tools/calendar.cjs +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/scriptrunner.cjs +34 -34
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +945 -876
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/util.cjs +1 -1
- package/dist/util.js +4 -2
- package/dist/util.js.map +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +63 -63
- package/package.json +15 -15
- package/dist/ArrayplotWidget-DC41cpv1.cjs +0 -2
- package/dist/ArrayplotWidget-DC41cpv1.cjs.map +0 -1
- package/dist/ArrayplotWidget-ntRLh6-B.js.map +0 -1
- package/dist/DetailsDialog-BQE0TraI.js.map +0 -1
- package/dist/DetailsDialog-DmKpPDNn.cjs +0 -2
- package/dist/DetailsDialog-DmKpPDNn.cjs.map +0 -1
- package/dist/EventListDialog-CDcJcxy5.cjs +0 -2
- package/dist/Graph-DCihpnT0.js +0 -1853
- package/dist/Graph-DCihpnT0.js.map +0 -1
- package/dist/Graph-mSqImgca.cjs +0 -2
- package/dist/Graph-mSqImgca.cjs.map +0 -1
- package/dist/GraphWidget-CQjKAMPR.cjs +0 -2
- package/dist/HorizontalWidget--AkRJPlL.cjs +0 -2
- package/dist/HorizontalboxWidget-synL-Bar.cjs +0 -2
- package/dist/Layout-kOQnicRa.cjs +0 -2
- package/dist/LedWidget-BN8IgAxJ.js.map +0 -1
- package/dist/LedWidget-BUTbyEBi.cjs +0 -2
- package/dist/LedWidget-BUTbyEBi.cjs.map +0 -1
- package/dist/LimitsbarWidget-Co5GAHro.cjs +0 -2
- package/dist/LinegraphWidget-Bay0EtbI.cjs +0 -2
- package/dist/LinegraphWidget-Bay0EtbI.cjs.map +0 -1
- package/dist/LinegraphWidget-jXksfbPb.js.map +0 -1
- package/dist/MatrixbycolumnsWidget-DxRhvPGv.cjs +0 -2
- package/dist/Openc3Screen-BZN0Wtrm.js.map +0 -1
- package/dist/Openc3Screen-dtpBWZdA.cjs +0 -5
- package/dist/Openc3Screen-dtpBWZdA.cjs.map +0 -1
- package/dist/PackagesTab-B4V2n4io.cjs +0 -2
- package/dist/PluginsTab-DHO1tK2S.cjs +0 -6
- package/dist/PluginsTab-DHO1tK2S.cjs.map +0 -1
- package/dist/PluginsTab-lHDR5v6S.js +0 -562
- package/dist/PluginsTab-lHDR5v6S.js.map +0 -1
- package/dist/RedisTab-CdiSo-CO.cjs +0 -2
- package/dist/RedisTab-CdiSo-CO.cjs.map +0 -1
- package/dist/RedisTab-CkSwEwTZ.js +0 -135
- package/dist/RedisTab-CkSwEwTZ.js.map +0 -1
- package/dist/ScrollwindowWidget-54GU96Ve.js.map +0 -1
- package/dist/ScrollwindowWidget-C5_X-KwQ.cjs +0 -2
- package/dist/ScrollwindowWidget-C5_X-KwQ.cjs.map +0 -1
- package/dist/SettingsTab-BVnr4OtU.js +0 -1445
- package/dist/SettingsTab-BVnr4OtU.js.map +0 -1
- package/dist/SettingsTab-BkwaDhYo.cjs +0 -3
- package/dist/SettingsTab-BkwaDhYo.cjs.map +0 -1
- package/dist/ToolsTab-CGztf9_j.cjs +0 -7
- package/dist/TopBar-B0UcAtIW.cjs +0 -2
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs +0 -1497
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map +0 -1
- package/dist/VWidget-BMxLXtSO.cjs +0 -2
- package/dist/VWidget-BMxLXtSO.cjs.map +0 -1
- package/dist/VWidget-j2GIGGSX.js +0 -326
- package/dist/VWidget-j2GIGGSX.js.map +0 -1
- package/dist/VerticalWidget-CcJMMaK_.cjs +0 -2
- package/dist/VerticalboxWidget-CJR_mOLa.cjs +0 -2
- package/dist/Widget-Bn_S-zBo.js.map +0 -1
- package/dist/index-DcL65Mqb.cjs +0 -7
- package/dist/index-DcL65Mqb.cjs.map +0 -1
- package/dist/index-qCq0L4jN.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Openc3Screen-dtpBWZdA.cjs","sources":["../src/components/autocomplete/screenCompleter.js","../src/components/EditScreenDialog.vue","../src/components/EnvironmentDialog.vue","../src/components/TreeNode.vue","../src/components/FileOpenSaveDialog.vue","../src/components/Openc3Screen.vue"],"sourcesContent":["/*\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\n// Test data useful for testing ScreenCompleter\n// let autocompleteData = [\n// {\n// caption: 'HORIZONTAL',\n// meta: 'Places the widgets it encapsulates horizontally',\n// snippet: 'HORIZONTAL ${1:<Margin>}',\n// },\n// {\n// caption: 'LABELVALUE',\n// meta: 'Displays a LABEL with the item name followed by a VALUE',\n// value: 'LABELVALUE ',\n// command: 'startAutocomplete',\n// params: [\n// { 'Target name': 1 },\n// { 'Packet name': 1 },\n// { 'Item name': 1 },\n// { RAW: 'raw description', CONVERTED: 1, FORMATTED: 1, WITH_UNITS: 1 },\n// { '<Number of characters>': 'characters description' },\n// ],\n// },\n// ]\n\nexport default class ScreenCompleter {\n constructor() {\n // See openc3-cosmos-cmd-tlm-api/app/controllers/script_autocomplete_controller.rb\n // for how the autocompleteData is built\n\n Api.get(`/openc3-api/autocomplete/data/screen`).then((response) => {\n this.autocompleteData = response.data\n })\n this.api = new OpenC3Api()\n }\n\n async getCompletions(editor, session, pos, prefix, callback) {\n let line = session.getLine(pos.row)\n let lineBefore = line.slice(0, pos.column)\n let parsedLine = lineBefore.trimStart().split(/ (?![^<]*>)/)\n let suggestions = this.autocompleteData\n // If we have more than 1 we've selected a keyword\n if (parsedLine.length > 1) {\n suggestions = suggestions.find((x) => x.caption === parsedLine[0])\n }\n let result = {}\n let more = true\n // If we found suggestions and the suggestions have params\n // then we do logic to substitute suggestions using the actual\n // target, packet, item data\n if (suggestions && suggestions['params']) {\n // Check if this is the last autocomplete parameter\n if (suggestions['params'].length == parsedLine.length - 1) {\n more = false\n }\n // parsedLine.length - 2 because the last element is blank\n // e.g. ['LABELVALUE', 'INST', '']\n let current = suggestions['params'][parsedLine.length - 2]\n // Check for Target name, Packet name, and Item name and use\n // api calls to substitute actual values for suggestions\n if (current['Target name']) {\n let target_names = await this.api.get_target_names()\n suggestions = target_names.reduce(\n (acc, curr) => ((acc[curr] = 1), acc),\n {},\n )\n } else if (current['Packet name']) {\n let target_name = parsedLine[parsedLine.length - 2]\n let packets = await this.api.get_all_tlm(target_name)\n suggestions = packets.reduce(\n (acc, pkt) => ((acc[pkt.packet_name] = pkt.description), acc),\n {},\n )\n } else if (current['Item name']) {\n let target_name = parsedLine[parsedLine.length - 3]\n let packet_name = parsedLine[parsedLine.length - 2]\n let packet = await this.api.get_tlm(target_name, packet_name)\n suggestions = packet.items.reduce(\n (acc, item) => ((acc[item.name] = item.description), acc),\n {},\n )\n } else {\n // Not a special case so just use the param as is\n suggestions = current\n }\n\n result = Object.keys(suggestions || {}).map((x) => {\n let completions = {\n value: x + (more ? ' ' : ''),\n // We want the autoComplete to continue right up\n // to the last parameter\n command: more && 'startAutocomplete',\n }\n // Only add the meta (description) if we have a string\n // This prevents adding (Object) descriptions\n if (typeof suggestions[x] === 'string') {\n completions['meta'] = suggestions[x]\n }\n return completions\n })\n } else {\n // The snippet case where we just inject the snippet\n result = suggestions\n }\n callback(null, result)\n }\n}\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog v-model=\"show\" persistent width=\"75vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-delete\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"delete-screen-icon\"\n @click=\"deleteScreen\"\n />\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n />\n </v-toolbar>\n <v-card-text style=\"max-height: 90vh\">\n <v-row class=\"mt-3\"> Upload a screen file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-btn\n :disabled=\"!file\"\n color=\"primary\"\n class=\"mr-3\"\n data-test=\"edit-screen-load\"\n @click=\"loadFile\"\n >\n Load\n </v-btn>\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n />\n </v-row>\n <v-row class=\"mb-2\"> Edit the screen definition. </v-row>\n <v-row class=\"mb-2\">\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <!-- Make the error messages a max height and scrollable -->\n <v-row style=\"max-height: 120px; overflow-y: auto\">\n <div v-for=\"(error, index) in editErrors\" :key=\"index\">\n <span class=\"text-red\" v-text=\"error\" />\n </div>\n </v-row>\n <v-row class=\"mt-5\">\n <span>\n Ctrl-space brings up autocomplete. Right click keywords for\n documentation.\n </span>\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n @click=\"$emit('cancel')\"\n >\n Cancel\n </v-btn>\n <v-btn\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\n @click=\"$emit('save', editor.getValue())\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { ScreenCompleter } from './autocomplete'\nimport { AceEditorUtils } from './ace'\n\nexport default {\n props: {\n modelValue: Boolean,\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n errors: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['cancel', 'delete', 'save', 'update:modelValue'],\n data() {\n return {\n file: null,\n docsKeyword: '',\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n editErrors: function () {\n if (this.definition === '' && !this.file) {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let messages = new Set()\n let result = []\n const sortedErrors = this.errors.toSorted(\n (a, b) => a.lineNumber - b.lineNumber,\n )\n for (const error of sortedErrors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n messages.add(error.message)\n }\n return result\n }\n return []\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setOption('enableBasicAutocompletion', true)\n this.editor.setOption('enableLiveAutocompletion', true)\n this.editor.completers = [new ScreenCompleter()]\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.definition)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n },\n beforeUnmount() {\n this.editor.destroy()\n this.editor.container.remove()\n },\n methods: {\n toggleVimMode: function () {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n openDocumentation() {\n window.open(\n `${\n window.location.origin\n }/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,\n '_blank',\n )\n },\n buildScreenMode() {\n let oop = ace.require('ace/lib/oop')\n let TextHighlightRules = ace.require(\n 'ace/mode/text_highlight_rules',\n ).TextHighlightRules\n\n let list = this.keywords.join('|')\n let OpenC3HighlightRules = function () {\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'string',\n regex: '\".*?\"',\n },\n {\n token: 'string',\n regex: \"'.*?'\",\n },\n {\n token: 'constant.numeric',\n regex: '\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b',\n },\n {\n token: 'keyword',\n regex: new RegExp(`^\\\\s*(${list})\\\\b`),\n },\n ],\n }\n this.normalizeRules()\n }\n oop.inherits(OpenC3HighlightRules, TextHighlightRules)\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n }\n let TextMode = ace.require('ace/mode/text').Mode\n oop.inherits(Mode, TextMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n downloadScreen: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.screen.toLowerCase()}.txt`)\n link.click()\n },\n loadFile: function () {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n const that = this\n fileReader.onload = function () {\n that.editor.setValue(fileReader.result)\n that.file = null\n }\n },\n deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n\n<style>\n.ace_autocomplete {\n width: 60vw !important;\n}\n</style>\n<style scoped>\n.editor {\n height: 45vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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 <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <form @submit.prevent=\"addEnvironment\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Global Environment Variables</span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense class=\"mb-2\">\n <v-text-field\n v-model=\"search\"\n label=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n item-key=\"name\"\n hide-default-header\n data-test=\"env-table\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"environment\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n class=\"mt-1\"\n data-test=\"item-delete\"\n aria-label=\"Delete Environment Variable\"\n @click=\"deleteEnvironment(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <v-col>\n <v-text-field v-model=\"key\" label=\"Key\" data-test=\"env-key\" />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"keyValue\"\n label=\"Value\"\n data-test=\"env-value\"\n />\n </v-col>\n </v-row>\n <v-row dense>\n <v-btn\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\n @click.prevent=\"addEnvironment\"\n >\n Add\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n search: '',\n key: '',\n keyValue: '',\n environment: [],\n headers: [\n {\n text: 'Key',\n value: 'key',\n },\n {\n text: 'Value',\n value: 'value',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted() {\n this.update()\n },\n methods: {\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n update: function () {\n Api.get('/openc3-api/environment')\n .then((response) => {\n this.environment = response.data\n })\n .catch((error) => {\n // TODO: $error.something\n })\n },\n addEnvironment: function () {\n Api.post('/openc3-api/environment', {\n data: {\n key: this.key.toUpperCase(),\n value: this.keyValue,\n },\n })\n .then((response) => {\n const alertEvent = {\n text: `New environment variable: ${response.data.name}`,\n type: 'success',\n }\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to add environment variable: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n this.key = ''\n this.keyValue = ''\n },\n deleteEnvironment: function (env) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${env.key}=${env.value}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/environment/${env.name}`)\n })\n .then((response) => {\n const alertEvent = {\n text: `Removed environment variable: ${env.name}`,\n type: 'success',\n }\n this.alertHandler(alertEvent)\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to delete environment: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<!--\n# Due to performance issues in TreeView we implement TreeNode\n# based on code example provided in https://github.com/vuetifyjs/vuetify/issues/19919\n-->\n<template>\n <div class=\"tree-node\">\n <div v-if=\"showNode\" class=\"node-content\" @click=\"handleClick(node)\">\n <div class=\"content-wrapper\">\n <v-icon\n v-if=\"node.children\"\n class=\"toggle-icon\"\n style=\"padding-right: 10px\"\n >\n {{ node.isOpen ? 'mdi-menu-down' : 'mdi-menu-right' }}\n </v-icon>\n <v-icon v-if=\"node.children\" size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-folder' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.rb')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-ruby' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.py')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-python' }}\n </v-icon>\n <v-icon v-else size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-file-document' }}\n </v-icon>\n <span\n class=\"title\"\n :tabindex=\"node.children ? -1 : 0\"\n @keyup.enter=\"handleClick(node)\"\n >\n {{ node.title }}\n </span>\n\n <v-btn\n v-if=\"node.title === '__TEMP__'\"\n icon=\"mdi-delete\"\n variant=\"text\"\n style=\"margin-left: auto\"\n aria-label=\"Delete\"\n @click=\"emit('delete')\"\n />\n </div>\n </div>\n <div v-else></div>\n <div v-if=\"node.children && node.isOpen\" class=\"children\">\n <tree-node\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :search=\"search\"\n :type=\"type\"\n @node-toggled=\"bubbleNodeToggled\"\n @request=\"bubbleNodeRequest\"\n ></tree-node>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = defineProps({\n node: {\n type: Object,\n required: true,\n },\n search: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'open',\n },\n})\n\nconst isOpen = ref(props.node.isOpen || false)\n\nconst showNode = computed(() => {\n const _nodeOrChildMatchesSearch = (node) => {\n if (!props.search) {\n return true\n }\n if (node.path.toLowerCase().includes(props.search.toLowerCase())) {\n return true\n }\n return !!node.children?.some(_nodeOrChildMatchesSearch)\n }\n\n return _nodeOrChildMatchesSearch(props.node)\n})\n\nwatch(\n () => props.node.isOpen,\n (newpath) => {\n isOpen.value = newpath\n },\n)\n\nwatch(\n () => props.search,\n (newSearch) => {\n if (newSearch) {\n if (!props.node.isOpen) toggle()\n } else {\n if (props.node.isOpen) toggle()\n }\n },\n)\n\nconst emit = defineEmits(['nodeToggled', 'request'])\n\nconst handleClick = (node) => {\n if (node.children) {\n toggle()\n // Only emit request on folder for save dialog\n if (props.type === 'save') {\n emit('request', node)\n }\n } else {\n emit('request', node)\n }\n}\nconst toggle = () => {\n if (props.node.children) {\n isOpen.value = !isOpen.value\n props.node.isOpen = isOpen.value\n emit('nodeToggled', props.node.id, isOpen.value)\n }\n}\n// Bubble up the event for the nested tree-nodes\nconst bubbleNodeToggled = (nodeName, isOpen) => {\n emit('nodeToggled', nodeName, isOpen)\n}\nconst bubbleNodeRequest = (node) => {\n emit('request', node)\n}\n</script>\n\n<style scoped>\n.children {\n padding-left: 25px;\n}\n.content-wrapper {\n align-items: center;\n display: flex;\n max-height: 38px;\n}\n.node-content {\n cursor: pointer;\n overflow: hidden;\n user-select: none;\n white-space: nowrap;\n}\n.node-content:hover {\n background-color: rgba(211, 211, 211, 0.2);\n transition: background-color 0.3s ease;\n}\n.title {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.toggle-icon {\n width: 20px;\n}\n.tree-node {\n line-height: 1.8;\n position: relative;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, 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 <v-dialog v-model=\"show\" width=\"600\" @keydown.enter=\"success()\">\n <v-card>\n <v-overlay :model-value=\"loading\">\n <v-progress-circular\n indeterminate\n absolute\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <form @submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row>{{ helpText }} </v-row>\n <v-row dense class=\"mt-5\">\n <v-text-field\n v-model=\"search\"\n flat\n autofocus\n hide-details\n clearable\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n density=\"compact\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <div class=\"overflow-y-auto tree-container\">\n <tree-node\n v-for=\"node in items\"\n :key=\"`${node.id}`\"\n :node=\"node\"\n :search=\"search\"\n :type=\"type\"\n @request=\"activeFile\"\n @delete=\"deleteTemp\"\n ></tree-node>\n </div>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <div\n v-show=\"error\"\n class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n @click=\"show = false\"\n >\n Cancel\n </v-btn>\n <v-btn\n ref=\"submitBtn\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n @click.prevent=\"success\"\n >\n {{ submit }}\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { fileIcon } from '@/util/fileIcon'\nimport TreeNode from './TreeNode.vue'\n\nexport default {\n components: {\n TreeNode,\n },\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n modelValue: Boolean,\n },\n data() {\n return {\n tree: [],\n items: [],\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\n targetsRetrieved: [],\n loading: true,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n helpText: function () {\n if (this.type === 'open') {\n return 'Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.'\n } else {\n return 'Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message +=\n 'only contain alphanumeric characters (including !-_.*) and a valid extension.\\n\\n' +\n 'For example: TGT1/procedures/test.py or TGT2/lib/inst.rb'\n return message\n }\n if (this.type === 'save' && this.selectedFile.match(/\\*$/)) {\n let message = `${this.selectedFile} is not a valid filename. Must not end in '*'.`\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get('/openc3-api/targets').then((response) => {\n this.targets = response.data\n this.targets.push('__TEMP__') // Also support __TEMP__\n this.targets.forEach((target) => {\n // Name not found so push the item and add a children array\n this.items.push({\n id: target,\n disabled: true,\n title: target,\n children: [],\n path: target,\n })\n // Load the targets 1 by 1 in the background\n this.loadFiles(target)\n })\n this.loading = false\n })\n },\n methods: {\n calcIcon: function (filename) {\n return fileIcon(filename)\n },\n loadFiles: function (target) {\n Api.get(this.apiUrl, { params: { target } })\n .then((response) => {\n if (response.data.length === 0) {\n // Delete from items since there is no data\n this.items = this.items.filter((item) => item.id !== target)\n return\n }\n for (let file of response.data.sort()) {\n // Make a copy of the entire file path before calling insertFile\n // because insertFile does recursion and needs the original path\n this.filepath = file\n this.insertFile(this.items, 2, file)\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n // Enable the target we just populated\n const index = this.items.findIndex((item) => item.id === target)\n if (index !== -1) {\n this.items[index].disabled = false\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to OpenC3. ${error}`)\n })\n },\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n // Search through items to find the item with id\n this.selectedFile = this.findItem(this.items, file.id)\n // Select the Submit button so return opens the file\n setTimeout(() => {\n this.$refs.submitBtn.$el.focus()\n }, 100)\n }\n },\n findItem: function (items, id) {\n for (let item of items) {\n if (item.id === id) {\n return item.path\n }\n if (item.children) {\n const found = this.findItem(item.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.path.length > 1) {\n if (item.path[item.path.length - 1] === '*') {\n // Try without the star too\n if (item.path.slice(0, item.path.length - 1) === name) {\n return true\n }\n }\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n // Only process the success call if a file is selected and no error\n if (this.selectedFile !== null && this.error === null) {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n }\n },\n deleteTemp: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete all the temporary files?`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete('/script-api/scripts/temp_files')\n })\n .then((response) => {\n this.$emit('clear-temp')\n this.loadFiles('__TEMP__')\n })\n .catch((error) => {\n this.$notify.serious({\n title: 'Error',\n body: `Failed to remove script temporary files due to ${error}`,\n })\n })\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n .catch((error) => {}) // Cancel, do nothing\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n let parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.filepath,\n title: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.title === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n title: parts[0],\n children: [],\n path: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n })\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/'), // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/'),\n )\n }\n },\n },\n}\n</script>\n\n<style>\n.tree-container {\n background-color: var(--color-background-base-default);\n padding: 10px;\n margin-top: 5px;\n max-height: 60vh;\n font-size: large;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# This screen expects to be inside of two parent elements.\n# An overall item, and then a container for all screens\n-->\n\n<template>\n <div ref=\"bar\" :style=\"computedStyle\">\n <v-card\n v-if=\"!inline\"\n :min-height=\"height\"\n :min-width=\"width\"\n style=\"cursor: default\"\n >\n <v-toolbar height=\"24\">\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-screen-icon\"\n aria-label=\"Edit Screen\"\n @click=\"openEdit\"\n />\n <v-tooltip v-if=\"!fixFloated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :icon=\"floated ? 'mdi-balloon' : 'mdi-view-grid-outline'\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"float-screen-icon\"\n :aria-label=\"floated ? 'Unfloat Screen' : 'Float Screen'\"\n @click=\"floatScreen\"\n />\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip v-if=\"floated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-up\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"up-screen-icon\"\n aria-label=\"Move Screen Up\"\n @click=\"upScreen\"\n />\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip\n v-if=\"floated && zIndex > minZ\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-down\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"down-screen-icon\"\n aria-label=\"Move Screen Down\"\n @click=\"downScreen\"\n />\n </div>\n </template>\n <span> Move Screen Down </span>\n </v-tooltip>\n <v-spacer />\n <span> {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n aria-label=\"Minimize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n aria-label=\"Maximize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-if=\"showClose\"\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-screen-icon\"\n aria-label=\"Close Screen\"\n @click=\"$emit('close-screen')\"\n />\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n v-show=\"expand\"\n ref=\"screen\"\n class=\"pa-1\"\n style=\"position: relative\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <div v-if=\"inline\" class=\"pa-1\" style=\"position: relative\">\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :keywords=\"keywords\"\n :errors=\"errors\"\n @save=\"saveEdit\"\n @cancel=\"cancelEdit\"\n @delete=\"deleteScreen\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" width=\"60vw\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-textarea class=\"errors\" readonly rows=\"13\" :model-value=\"error\" />\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { uniqueId } from 'lodash'\nimport { Api, ConfigParserService, OpenC3Api } from '@openc3/js-common/services'\nimport WidgetComponents from '@/widgets/WidgetComponents'\nimport EditScreenDialog from './EditScreenDialog.vue'\n\nconst MAX_ERRORS = 20\n\nexport default {\n components: {\n EditScreenDialog,\n },\n mixins: [WidgetComponents],\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n initialFloated: {\n type: Boolean,\n default: false,\n },\n initialTop: {\n type: Number,\n default: 0,\n },\n initialLeft: {\n type: Number,\n default: 0,\n },\n initialZ: {\n type: Number,\n default: 0,\n },\n minZ: {\n type: Number,\n default: 0,\n },\n fixFloated: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showClose: {\n type: Boolean,\n default: true,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n 'close-screen',\n 'delete-screen',\n 'drag-screen',\n 'edit-screen',\n 'float-screen',\n 'min-max-screen',\n 'unfloat-screen',\n ],\n data() {\n return {\n api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n configError: false,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n staleTime: 30,\n cacheTimeout: 0.1,\n globalSettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n dragX: 0,\n dragY: 0,\n floated: this.initialFloated,\n top: this.initialTop,\n left: this.initialLeft,\n zIndex: this.initialZ,\n changeCounter: 0,\n screenItems: [],\n screenValues: {},\n updateCounter: 0,\n screenId: uniqueId('openc3-screen_'),\n }\n },\n computed: {\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n let messages = new Set()\n let result = ''\n for (const error of this.errors) {\n if (messages.has(error.message)) {\n continue\n }\n let msg = `${error.time}: (${error.type}) ${error.message}\\n`\n result += msg\n messages.add(error.message)\n }\n return result\n }\n return null\n },\n computedStyle() {\n let style = {}\n // note down what the width was in case it was set to AUTO, because absolute positioning will lose that\n const origWidth = this.width || this.$refs.bar?.clientWidth\n if (this.floated) {\n style['position'] = 'absolute'\n style['top'] = this.top + 'px'\n style['left'] = this.left + 'px'\n style['width'] = origWidth + 'px'\n }\n return style\n },\n },\n watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\n },\n },\n // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n if (this.errors.length < MAX_ERRORS) {\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: err,\n time: new Date().getTime(),\n })\n }\n // eslint-disable-next-line no-console\n console.log(this.errors)\n this.configError = true\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n this.updateRefreshInterval()\n if (this.floated) {\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n }\n },\n unmounted() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n // These are API methods that ButtonWidget uses to open and close screens\n open(target, screen) {\n this.$parent.showScreen(target, screen)\n },\n close(target, screen) {\n this.$parent.closeScreenByName(target, screen)\n },\n closeAll() {\n this.$parent.closeAll()\n },\n clearErrors: function () {\n this.errors = []\n this.configError = false\n },\n updateRefreshInterval: function () {\n let refreshInterval = this.pollingPeriod * 1000\n if (this.updater) {\n clearInterval(this.updater)\n }\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.clearErrors()\n this.screenItems = []\n this.namedWidgets = {}\n this.layoutStack = []\n this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period>`,\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'STALE_TIME':\n this.configParser.verify_num_parameters(\n 1,\n 1,\n `${keyword} <Time (s)>`,\n )\n this.staleTime = parseInt(parameters[0])\n break\n case 'SETTING':\n case 'SUBSETTING':\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'GLOBAL_SETTING':\n case 'GLOBAL_SUBSETTING':\n this.globalSettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n },\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n this.configError = true\n }\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n upScreen: function () {\n this.zIndex += 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n downScreen: function () {\n if (this.zIndex > this.minZ) {\n this.zIndex -= 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n floatScreen: function () {\n if (this.floated) {\n this.$refs.bar.onmousedown = null\n this.$refs.bar.parentElement.parentElement.style = 'z-index: 0'\n this.floated = false\n this.$emit('unfloat-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n } else {\n let bodyRect =\n this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect()\n let elemRect = this.$refs.bar.getBoundingClientRect()\n this.top = elemRect.top - bodyRect.top - 5\n this.left = elemRect.left - bodyRect.left - 5\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.floated = true\n this.$emit('float-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n dragMouseDown: function (e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n this.dragX = e.clientX\n this.dragY = e.clientY\n document.onmouseup = this.closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = this.elementDrag\n },\n elementDrag: function (e) {\n e = e || window.event\n e.preventDefault()\n // calculate the new cursor position:\n let xOffset = this.dragX - e.clientX\n let yOffset = this.dragY - e.clientY\n this.dragX = e.clientX\n this.dragY = e.clientY\n // set the element's new position:\n this.top = this.$refs.bar.offsetTop - yOffset\n this.left = this.$refs.bar.offsetLeft - xOffset\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n closeDragElement: function () {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n },\n rerender: function () {\n this.parseDefinition()\n this.updateRefreshInterval()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n this.$emit('edit-screen')\n })\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n this.rerender()\n },\n saveEdit: function (definition) {\n this.editDialog = false\n this.currentDefinition = definition\n this.rerender()\n this.$nextTick(function () {\n Api.post(\n '/openc3-api/screen/',\n {\n data: {\n scope: window.openc3Scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n },\n 0,\n )\n })\n },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n },\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n let widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`,\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n // Give all the widgets a reference to this screen\n // Use settings so we don't break existing custom widgets\n settings.push(['__SCREEN_ID__', this.screenId])\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword === 'VERTICAL' ||\n keyword === 'VERTICALBOX' ||\n keyword === 'HORIZONTAL' ||\n keyword === 'HORIZONTALBOX' ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else if (this.$options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\n }\n },\n applyGlobalSettings: function (widgets) {\n widgets.forEach((widget) => {\n this.globalSettings.forEach((setting) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n const existingSetting = widget.settings.find(\n (s) => s[0] === setting[1],\n )\n if (!existingSetting) {\n widget.settings.push(setting.slice(1))\n }\n }\n })\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n },\n update: function () {\n if (this.screenItems.length !== 0 && this.configError === false) {\n this.api\n .get_tlm_values(this.screenItems, this.staleTime, this.cacheTimeout)\n .then((data) => {\n this.clearErrors()\n this.updateValues(data)\n })\n .catch((error) => {\n let message = JSON.stringify(error, null, 2)\n // Anything other than 'no response received' which means the API server is down\n // is an error the user needs to fix so don't request values until they do\n if (!message.includes('no response received')) {\n this.configError = true\n }\n if (\n !this.errors.find((existing) => {\n return existing.message === message\n })\n ) {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'error',\n message: message,\n time: new Date().getTime(),\n })\n }\n }\n })\n }\n },\n updateValues: function (values) {\n this.updateCounter += 1\n for (let i = 0; i < values.length; i++) {\n values[i].push(this.updateCounter)\n this.screenValues[this.screenItems[i]] = values[i]\n }\n },\n addItem: function (valueId) {\n this.screenItems.push(valueId)\n this.screenValues[valueId] = [null, null, 0]\n },\n deleteItem: function (valueId) {\n let index = this.screenItems.indexOf(valueId)\n this.screenItems.splice(index, 1)\n },\n },\n}\n</script>\n\n<style scoped>\n.errors {\n padding-top: 0px;\n margin-top: 0px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n -webkit-mask-image: unset;\n mask-image: unset;\n}\n</style>\n"],"names":["ScreenCompleter","Api","response","OpenC3Api","editor","session","pos","prefix","callback","parsedLine","suggestions","x","result","more","current","acc","curr","target_name","pkt","packet_name","item","completions","_sfc_main","messages","sortedErrors","a","b","error","msg","value","ace.edit","screenMode","AceEditorUtils","event","position","token","oop","ace.require","TextHighlightRules","list","OpenC3HighlightRules","Mode","TextMode","blob","link","fileReader","that","dialog","_hoisted_1","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_component_v_btn","_component_v_spacer","_createElementVNode","_toDisplayString","$props","_component_v_card_text","_component_v_row","_createTextVNode","$data","_component_v_file_input","_withModifiers","args","_component_v_menu","_component_v_list","_component_v_list_item","_component_v_list_item_title","_component_v_divider","_openBlock","_createElementBlock","_Fragment","_renderList","index","_ctx","alertEvent","env","_component_v_text_field","_component_v_data_table","_component_v_col","props","__props","isOpen","ref","showNode","computed","_nodeOrChildMatchesSearch","node","_a","watch","newpath","newSearch","toggle","emit","__emit","handleClick","bubbleNodeToggled","nodeName","bubbleNodeRequest","TreeNode","message","alphanumeric","expression","target","filename","fileIcon","file","items","id","found","root","name","locked","breakpoints","level","path","parts","_hoisted_2","_withKeys","_component_v_overlay","_component_v_progress_circular","_component_tree_node","MAX_ERRORS","EditScreenDialog","WidgetComponents","uniqueId","style","origWidth","newValue","oldValue","err","vm","info","ConfigParserService","screen","refreshInterval","keyword","parameters","line","lineNumber","names","lines","widget","bodyRect","elemRect","e","xOffset","yOffset","definition","widgetName","componentName","settings","layout","widgets","setting","s","data","existing","values","i","valueId","_normalizeStyle","_createCommentVNode","_vShow","_component_v_tooltip","_normalizeProps","_guardReactiveProps","_component_v_expand_transition","_withDirectives","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs"),e=require("vue"),y=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const N=require("./SimpleTextDialog-BWUqPlTv.cjs"),P=require("./tools/admin.cjs"),C=require("./format-B22VpiOS.cjs"),D={components:{DownloadDialog:P.DownloadDialog,SimpleTextDialog:N.SimpleTextDialog},data(){return{showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",files:[],loadingPackage:!1,progress:0,gems:[],python:[],processes:{}}},mounted(){this.update(),this.updateProcesses()},methods:{showOutput:function(n){this.processOutput=n.output,this.showProcessOutput=!0},update(){d.li.get("/openc3-api/packages").then(n=>{this.gems=n.data.ruby,this.python=n.data.python})},updateProcesses:function(){d.li.get("/openc3-api/process_status/package_?substr=true").then(n=>{this.processes=n.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},2500)})},formatDate(n){return C.format(C.toDate(parseInt(n)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},selectFile(){this.progress=0,this.$refs.fileInput.click()},fileChange(n){const t=n.target.files;if(t.length>0){this.loadingPackage=!0;let g=this;const h=[...t].map(l=>{const a=new FormData;return a.append("package",l,l.name),d.li.post("/openc3-api/packages",{data:a,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(r){let s=Math.round(r.loaded*100/r.total);g.progress=s}})});Promise.all(h).then(l=>{this.$notify.normal({body:`Uploaded ${l.length} package${l.length>1?"s":""}`}),this.loadingPackage=!1,this.files=[],setTimeout(()=>{this.updateProcesses()},2500)}).catch(l=>{this.loadingPackage=!1})}},deletePackage(n){this.$dialog.confirm(`Are you sure you want to remove: ${n}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>d.li.delete(`/openc3-api/packages/${n}`)).then(t=>{this.$notify.normal({body:`Removed package ${n}`}),setTimeout(()=>{this.updateProcesses()},2500)}).catch(t=>{this.$notify.serious({body:`Failed to remove package ${n}`})})}}},b=["textContent"],T=["textContent"];function B(n,t,g,h,l,a){const r=e.resolveComponent("v-btn"),s=e.resolveComponent("v-col"),x=e.resolveComponent("rux-progress"),c=e.resolveComponent("v-row"),u=e.resolveComponent("v-list-item-title"),v=e.resolveComponent("v-list-item-subtitle"),k=e.resolveComponent("v-tooltip"),p=e.resolveComponent("v-list-item"),m=e.resolveComponent("v-divider"),_=e.resolveComponent("v-list"),w=e.resolveComponent("download-dialog"),V=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(r,{onClick:a.selectFile},{default:e.withCtx(()=>t[3]||(t[3]=[e.createTextVNode("Install Package")])),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...o)=>a.fileChange&&a.fileChange(...o))},null,544)]),_:1}),e.createVNode(s,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(x,{value:l.progress},null,8,["value"])]),_:1})]),_:1}),Object.keys(l.processes).length>0?(e.openBlock(),e.createBlock(_,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(c,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[4]||(t[4]=[e.createTextVNode("Process List")])),_:1}),e.createVNode(s,{align:"right"},{default:e.withCtx(()=>t[5]||(t[5]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.processes,o=>(e.openBlock(),e.createElementBlock("div",{key:o.name},[e.createVNode(p,null,e.createSlots({default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(o.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${o.process_type}: ${o.detail} - ${o.state}`)},null,10,b)]),_:2},1024),e.createVNode(v,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+a.formatDate(o.updated_at))},null,8,T)]),_:2},1024)]),_:2},[o.state!=="Running"?{name:"append",fn:e.withCtx(()=>[e.createVNode(k,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:i})=>[e.createVNode(r,e.mergeProps({ref_for:!0},i,{icon:"mdi-eye",variant:"text","aria-label":"Show Output",onClick:f=>a.showOutput(o)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[6]||(t[6]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024)]),key:"0"}:void 0]),1024),e.createVNode(m)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,{class:"list","data-test":"packageList"},{default:e.withCtx(()=>[e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[7]||(t[7]=[e.createTextVNode("Ruby Gems")])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.gems,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Ruby Gem",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128)),e.createVNode(c,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[8]||(t[8]=[e.createTextVNode("Python Packages")])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.python,(o,i)=>(e.openBlock(),e.createElementBlock("div",{key:i},[e.createVNode(p,null,{append:e.withCtx(()=>[e.createVNode(r,{icon:"mdi-delete",variant:"text","aria-label":"Delete Python Package",onClick:f=>a.deletePackage(o)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(m)]))),128))]),_:1}),e.createVNode(w,{modelValue:l.showDownloadDialog,"onUpdate:modelValue":t[1]||(t[1]=o=>l.showDownloadDialog=o)},null,8,["modelValue"]),e.createVNode(V,{modelValue:l.showProcessOutput,"onUpdate:modelValue":t[2]||(t[2]=o=>l.showProcessOutput=o),title:"Process Output",text:l.processOutput},null,8,["modelValue","text"])])}const S=y._export_sfc(D,[["render",B],["__scopeId","data-v-e97741ba"]]);exports.default=S;
|
|
2
|
-
//# sourceMappingURL=PackagesTab-B4V2n4io.cjs.map
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs"),e=require("vue"),S=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const E=require("./SimpleTextDialog-BWUqPlTv.cjs"),k=require("./tools/admin.cjs"),P=require("./format-B22VpiOS.cjs"),O={components:{PluginDialog:k.PluginDialog,ModifiedPluginDialog:k.ModifiedPluginDialog,SimpleTextDialog:E.SimpleTextDialog},data(){return{file:null,currentPlugin:null,plugins:[],targets:[],processes:{},alert:"",alertType:"success",showAlert:!1,pluginName:null,variables:{},pluginTxt:"",pluginHashTmp:null,existingPluginTxt:null,showDownloadDialog:!1,showProcessOutput:!1,processOutput:"",showPluginDialog:!1,showModifiedPluginDialog:!1,showDefaultTools:!1,progress:0,pluginDelete:!1,defaultPlugins:["openc3-cosmos-tool-admin","openc3-cosmos-tool-bucketexplorer","openc3-cosmos-tool-cmdsender","openc3-cosmos-tool-cmdhistory","openc3-cosmos-tool-cmdtlmserver","openc3-cosmos-tool-dataextractor","openc3-cosmos-tool-dataviewer","openc3-cosmos-tool-docs","openc3-cosmos-tool-handbooks","openc3-cosmos-tool-iframe","openc3-cosmos-tool-limitsmonitor","openc3-cosmos-tool-packetviewer","openc3-cosmos-tool-scriptrunner","openc3-cosmos-tool-tablemanager","openc3-cosmos-tool-tlmgrapher","openc3-cosmos-tool-tlmviewer","openc3-cosmos-enterprise-tool-admin","openc3-cosmos-tool-autonomic","openc3-cosmos-tool-calendar","openc3-cosmos-tool-grafana","openc3-cosmos-tool-systemhealth","openc3-enterprise-tool-base","openc3-tool-base"]}},computed:{shownPlugins(){let l=[];for(let t of this.plugins){let r=t.split("__")[0].split("-");r=r.slice(0,-1);let o=r.join("-");(!this.defaultPlugins.includes(o)||this.showDefaultTools)&&l.push(t)}return l},pluginTargets(){return l=>{let t=[];for(const a in this.targets)this.targets[a].plugin===l&&t.push(this.targets[a]);return t}},isModified(){return l=>{let t=!1;for(const a in this.targets)if(this.targets[a].plugin===l&&this.targets[a].modified===!0){t=!0;break}return t}}},watch:{showPluginDialog:function(l,t){l===!1&&(this.file=null,this.$refs.fileInput.value=null)}},mounted(){this.update(),this.updateProcesses()},methods:{showOutput:function(l){this.processOutput=l.output,this.showProcessOutput=!0},update:function(){c.li.get("/openc3-api/plugins").then(l=>{this.plugins=l.data}),c.li.get("/openc3-api/targets_modified").then(l=>{this.targets=l.data})},updateProcesses:function(){c.li.get("openc3-api/process_status/plugin_?substr=true").then(l=>{this.processes=l.data,Object.keys(this.processes).length>0&&setTimeout(()=>{this.updateProcesses(),this.update()},5e3)})},formatDate(l){return P.format(P.toDate(parseInt(l)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},upload:function(l=null){const t=l?"put":"post",a=l?`/openc3-api/plugins/${l}`:"/openc3-api/plugins",r=new FormData;r.append("plugin",this.file,this.file.name);let o=this;c.li[t](a,{data:r,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(i){let p=Math.round(i.loaded*100/i.total);o.progress=p}}).then(i=>{this.progress=100,this.alert="Uploaded file",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update();let p=null;i.data.existing_plugin_txt_lines!==void 0&&(p=i.data.existing_plugin_txt_lines.join(`
|
|
2
|
-
`));let d=i.data.plugin_txt_lines.join(`
|
|
3
|
-
`);this.pluginName=i.data.name,this.variables=i.data.variables,this.pluginTxt=d,this.existingPluginTxt=p,this.showPluginDialog=!0,this.file=void 0}).catch(i=>{this.currentPlugin=null,this.file=void 0})},pluginCallback:function(l){this.showPluginDialog=!1,this.currentPlugin!==null&&(l.name=this.currentPlugin),this.pluginHashTmp=l,this.isModified(this.currentPlugin)?(this.pluginDelete=!1,this.showModifiedPluginDialog=!0):this.pluginInstall()},modifiedSubmit:async function(l){if(l===!0)for(let t of this.pluginTargets(this.currentPlugin))t.modified==!0&&await c.li.post(`/openc3-api/targets/${t.name}/delete_modified`);this.pluginDelete?this.deletePlugin(this.currentPlugin):this.pluginInstall()},pluginInstall:function(){c.li.post(`/openc3-api/plugins/install/${this.pluginName}`,{data:{plugin_hash:JSON.stringify(this.pluginHashTmp)}}).then(l=>{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,setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3),this.update()})},downloadTarget:function(l){c.li.post(`/openc3-api/targets/${l}/download`).then(t=>{const a=window.atob(t.data.contents),r=new Uint8Array(a.length);for(let i=0;i<a.length;++i)r[i]=a.charCodeAt(i);const o=new Blob([r],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(o),n.setAttribute("download",t.data.filename),n.click()})},downloadPlugin:function(l){c.li.post(`/openc3-api/packages/${l}/download`).then(t=>{const a=window.atob(t.data.contents),r=new Uint8Array(a.length);for(let i=0;i<a.length;++i)r[i]=a.charCodeAt(i);const o=new Blob([r],{type:"application/zip"}),n=document.createElement("a");n.href=URL.createObjectURL(o),n.setAttribute("download",t.data.filename),n.click()})},editPlugin:function(l){c.li.get(`/openc3-api/plugins/${l}`).then(t=>{let a=null;t.data.existing_plugin_txt_lines!==void 0&&(a=t.data.existing_plugin_txt_lines.join(`
|
|
4
|
-
`));let r=t.data.plugin_txt_lines.join(`
|
|
5
|
-
`);this.pluginName=t.data.name,this.variables=t.data.variables,this.pluginTxt=r,this.existingPluginTxt=a,this.showPluginDialog=!0})},deletePrompt:function(l){this.$dialog.confirm(`Are you sure you want to remove: ${l}`,{okText:"Delete",cancelText:"Cancel"}).then(t=>{this.isModified(l)?(this.currentPlugin=l,this.pluginDelete=!0,this.showModifiedPluginDialog=!0):this.deletePlugin(l)})},deletePlugin:function(l){this.alert=`Removing plugin ${l} ...`,this.alertType="success",this.showAlert=!0,c.li.delete(`/openc3-api/plugins/${l}`).then(t=>{setTimeout(()=>{this.showAlert=!1,this.updateProcesses()},5e3)}),this.update()},upgradePlugin(l){this.file=null,this.currentPlugin=l,this.progress=0,this.$refs.fileInput.click()},selectFile(){this.file=null,this.currentPlugin=null,this.progress=0,this.$refs.fileInput.click()},fileChange(l){const t=l.target.files;if(t.length>0)if(this.file=t[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(a=>{});else{let a=this.file.name.split("-"),r=a.findIndex(i=>i.includes(".")),o=a.slice(0,r).join("-");a=this.currentPlugin.split("-"),r=a.findIndex(i=>i.includes("."));let n=a.slice(0,r).join("-");o!==n?this.$dialog.confirm(`The new gem base name ${o} 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}}},A=["textContent"],I=["textContent"],U={key:0},M=["onClick"],j={key:1};function L(l,t,a,r,o,n){const i=e.resolveComponent("v-btn"),p=e.resolveComponent("v-icon"),d=e.resolveComponent("v-col"),V=e.resolveComponent("rux-progress"),m=e.resolveComponent("v-row"),N=e.resolveComponent("v-checkbox"),h=e.resolveComponent("v-divider"),T=e.resolveComponent("v-alert"),f=e.resolveComponent("v-list-item-title"),x=e.resolveComponent("v-list-item-subtitle"),y=e.resolveComponent("v-progress-circular"),_=e.resolveComponent("v-tooltip"),w=e.resolveComponent("v-list-item"),v=e.resolveComponent("v-list"),b=e.resolveComponent("plugin-dialog"),D=e.resolveComponent("modified-plugin-dialog"),B=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(m,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(d,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(i,{onClick:n.selectFile},{default:e.withCtx(()=>t[6]||(t[6]=[e.createTextVNode("Install New Plugin")])),_:1},8,["onClick"]),e.createElementVNode("input",{ref:"fileInput",style:{display:"none"},type:"file",onChange:t[0]||(t[0]=(...s)=>n.fileChange&&n.fileChange(...s))},null,544),t[8]||(t[8]=e.createTextVNode(" Note: Use ")),e.createVNode(p,null,{default:e.withCtx(()=>t[7]||(t[7]=[e.createTextVNode("mdi-update")])),_:1}),t[9]||(t[9]=e.createTextVNode(" to upgrade existing plugins "))]),_:1}),e.createVNode(d,{class:"ml-4 mr-2",cols:"4"},{default:e.withCtx(()=>[e.createVNode(V,{value:o.progress},null,8,["value"])]),_:1})]),_:1}),e.createVNode(m,{"no-gutters":"",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[e.createVNode(N,{modelValue:o.showDefaultTools,"onUpdate:modelValue":t[1]||(t[1]=s=>o.showDefaultTools=s),label:"Show Default Tools",class:"mt-0","data-test":"show-default-tools"},null,8,["modelValue"])]),_:1}),e.createVNode(d,{align:"right",class:"mr-2"},{default:e.withCtx(()=>t[10]||(t[10]=[e.createElementVNode("div",null,"* indicates a modified plugin",-1),e.createElementVNode("div",null,"Click target link to download modifications",-1)])),_:1})]),_:1}),e.createVNode(h),e.createVNode(T,{modelValue:o.showAlert,"onUpdate:modelValue":t[2]||(t[2]=s=>o.showAlert=s),closable:"",type:o.alertType,"data-test":"plugin-alert"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.alert),1)]),_:1},8,["modelValue","type"]),Object.keys(o.processes).length>0?(e.openBlock(),e.createBlock(v,{key:0,class:"list","data-test":"process-list"},{default:e.withCtx(()=>[e.createVNode(m,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(d,{class:"text-h6"},{default:e.withCtx(()=>t[11]||(t[11]=[e.createTextVNode("Process List")])),_:1}),e.createVNode(d,{align:"right"},{default:e.withCtx(()=>t[12]||(t[12]=[e.createElementVNode("div",null,"Showing last 10 min of activity",-1)])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.processes,s=>(e.openBlock(),e.createElementBlock("div",{key:s.name},[e.createVNode(w,null,{append:e.withCtx(()=>[s.state==="Running"?(e.openBlock(),e.createBlock(y,{key:0,indeterminate:"",color:"primary"})):(e.openBlock(),e.createBlock(_,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:g})=>[e.createVNode(i,e.mergeProps({ref_for:!0},g,{icon:"mdi-eye",variant:"text","aria-label":"Show Output","data-test":"show-output",onClick:u=>n.showOutput(s)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[13]||(t[13]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024))]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass(s.state.toLowerCase()),textContent:e.toDisplayString(`Processing ${s.process_type}: ${s.detail} - ${s.state}`)},null,10,A)]),_:2},1024),e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("span",{textContent:e.toDisplayString(" Updated At: "+n.formatDate(s.updated_at))},null,8,I)]),_:2},1024)]),_:2},1024),e.createVNode(h)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(v,{class:"list","data-test":"plugin-list"},{default:e.withCtx(()=>[e.createVNode(m,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(d,{class:"text-h6"},{default:e.withCtx(()=>t[14]||(t[14]=[e.createTextVNode("Plugin List")])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.shownPlugins,(s,g)=>(e.openBlock(),e.createElementBlock("div",{key:g},[e.createVNode(w,{"data-test":"plugin-list-item"},{append:e.withCtx(()=>[e.createVNode(i,{icon:"mdi-download",variant:"text","aria-label":"Download Plugin","data-test":"download-plugin",onClick:u=>n.downloadPlugin(s)},null,8,["onClick"]),e.createVNode(i,{icon:"mdi-pencil",variant:"text","aria-label":"Edit Plugin","data-test":"edit-plugin",onClick:u=>n.editPlugin(s)},null,8,["onClick"]),e.createVNode(_,{"open-delay":600,location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(i,e.mergeProps({ref_for:!0},u,{icon:"mdi-update",variant:"text","aria-label":"Upgrade Plugin","data-test":"upgrade-plugin",onClick:C=>n.upgradePlugin(s)}),null,16,["onClick"])]),default:e.withCtx(()=>[t[15]||(t[15]=e.createElementVNode("span",null,"Upgrade Plugin",-1))]),_:2},1024),e.createVNode(i,{icon:"mdi-delete",variant:"text","aria-label":"Delete Plugin","data-test":"delete-plugin",onClick:u=>n.deletePrompt(s)},null,8,["onClick"])]),default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[n.isModified(s)?(e.openBlock(),e.createElementBlock("span",U,"* ")):e.createCommentVNode("",!0),e.createTextVNode(e.toDisplayString(s),1)]),_:2},1024),n.pluginTargets(s).length!==0?(e.openBlock(),e.createBlock(x,{key:0},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.pluginTargets(s),(u,C)=>(e.openBlock(),e.createElementBlock("span",{key:C,class:"mr-2"},[u.modified?(e.openBlock(),e.createElementBlock("a",{key:0,onClick:e.withModifiers(q=>n.downloadTarget(u.name),["prevent"])},e.toDisplayString(u.name),9,M)):(e.openBlock(),e.createElementBlock("span",j,e.toDisplayString(u.name),1))]))),128))]),_:2},1024)):e.createCommentVNode("",!0)]),_:2},1024),g<o.plugins.length-1?(e.openBlock(),e.createBlock(h,{key:g})):e.createCommentVNode("",!0)]))),128))]),_:1}),o.showPluginDialog?(e.openBlock(),e.createBlock(b,{key:1,modelValue:o.showPluginDialog,"onUpdate:modelValue":t[3]||(t[3]=s=>o.showPluginDialog=s),"plugin-name":o.pluginName,variables:o.variables,"plugin-txt":o.pluginTxt,"existing-plugin-txt":o.existingPluginTxt,onCallback:n.pluginCallback},null,8,["modelValue","plugin-name","variables","plugin-txt","existing-plugin-txt","onCallback"])):e.createCommentVNode("",!0),o.showModifiedPluginDialog?(e.openBlock(),e.createBlock(D,{key:2,modelValue:o.showModifiedPluginDialog,"onUpdate:modelValue":t[4]||(t[4]=s=>o.showModifiedPluginDialog=s),"plugin-name":o.currentPlugin,targets:n.pluginTargets(o.currentPlugin),"plugin-delete":o.pluginDelete,onSubmit:n.modifiedSubmit},null,8,["modelValue","plugin-name","targets","plugin-delete","onSubmit"])):e.createCommentVNode("",!0),e.createVNode(B,{modelValue:o.showProcessOutput,"onUpdate:modelValue":t[5]||(t[5]=s=>o.showProcessOutput=s),title:"Process Output",text:o.processOutput},null,8,["modelValue","text"])])}const F=S._export_sfc(O,[["render",L],["__scopeId","data-v-73fe8603"]]);exports.default=F;
|
|
6
|
-
//# sourceMappingURL=PluginsTab-DHO1tK2S.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PluginsTab-DHO1tK2S.cjs","sources":["../src/tools/admin/tabs/PluginsTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, 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 @click=\"selectFile\">Install New Plugin</v-btn>\n <input\n ref=\"fileInput\"\n style=\"display: none\"\n type=\"file\"\n @change=\"fileChange\"\n />\n Note: Use <v-icon>mdi-update</v-icon> to upgrade existing plugins\n </v-col>\n <v-col class=\"ml-4 mr-2\" cols=\"4\">\n <rux-progress :value=\"progress\"></rux-progress>\n </v-col>\n </v-row>\n <v-row no-gutters class=\"px-2\">\n <v-col>\n <v-checkbox\n v-model=\"showDefaultTools\"\n label=\"Show Default Tools\"\n class=\"mt-0\"\n data-test=\"show-default-tools\"\n />\n </v-col>\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 data-test=\"plugin-alert\"\n >{{ alert }}</v-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-h6\">Process List</v-col>\n <v-col align=\"right\">\n <!-- See openc3/lib/openc3/utilities/process_manager.rb CLEANUP_CYCLE_SECONDS -->\n <div>Showing last 10 min of activity</div>\n </v-col>\n </v-row>\n <div v-for=\"process in processes\" :key=\"process.name\">\n <v-list-item>\n <v-list-item-title>\n <span\n :class=\"process.state.toLowerCase()\"\n v-text=\"\n `Processing ${process.process_type}: ${process.detail} - ${process.state}`\n \"\n />\n </v-list-item-title>\n <v-list-item-subtitle>\n <span v-text=\"' Updated At: ' + formatDate(process.updated_at)\" />\n </v-list-item-subtitle>\n\n <template #append>\n <v-progress-circular\n v-if=\"process.state === 'Running'\"\n indeterminate\n color=\"primary\"\n />\n <v-tooltip v-else :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-eye\"\n variant=\"text\"\n aria-label=\"Show Output\"\n data-test=\"show-output\"\n @click=\"showOutput(process)\"\n />\n </template>\n <span>Show Output</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <v-list class=\"list\" data-test=\"plugin-list\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Plugin List</v-col></v-row>\n <div v-for=\"(plugin, index) in shownPlugins\" :key=\"index\">\n <v-list-item data-test=\"plugin-list-item\">\n <v-list-item-title\n ><span v-if=\"isModified(plugin)\">* </span\n >{{ plugin }}</v-list-item-title\n >\n <v-list-item-subtitle v-if=\"pluginTargets(plugin).length !== 0\">\n <span\n v-for=\"(target, index) in pluginTargets(plugin)\"\n :key=\"index\"\n class=\"mr-2\"\n >\n <a\n v-if=\"target.modified\"\n @click.prevent=\"downloadTarget(target.name)\"\n >{{ target.name }}\n </a>\n <span v-else>{{ target.name }} </span>\n </span>\n </v-list-item-subtitle>\n\n <template #append>\n <v-btn\n icon=\"mdi-download\"\n variant=\"text\"\n aria-label=\"Download Plugin\"\n data-test=\"download-plugin\"\n @click=\"downloadPlugin(plugin)\"\n />\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n aria-label=\"Edit Plugin\"\n data-test=\"edit-plugin\"\n @click=\"editPlugin(plugin)\"\n />\n <v-tooltip :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n icon=\"mdi-update\"\n variant=\"text\"\n aria-label=\"Upgrade Plugin\"\n data-test=\"upgrade-plugin\"\n @click=\"upgradePlugin(plugin)\"\n />\n </template>\n <span>Upgrade Plugin</span>\n </v-tooltip>\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n aria-label=\"Delete Plugin\"\n data-test=\"delete-plugin\"\n @click=\"deletePrompt(plugin)\"\n />\n </template>\n </v-list-item>\n <v-divider v-if=\"index < plugins.length - 1\" :key=\"index\" />\n </div>\n </v-list>\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 @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 </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { SimpleTextDialog } from '@/components'\nimport { ModifiedPluginDialog, PluginDialog } from '@/tools/admin'\n\nexport default {\n components: {\n PluginDialog,\n ModifiedPluginDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n file: null,\n currentPlugin: null,\n plugins: [],\n targets: [],\n processes: {},\n alert: '',\n alertType: 'success',\n showAlert: false,\n pluginName: null,\n variables: {},\n pluginTxt: '',\n pluginHashTmp: null,\n existingPluginTxt: null,\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n showPluginDialog: false,\n showModifiedPluginDialog: false,\n showDefaultTools: false,\n progress: 0,\n pluginDelete: false,\n // When updating update local_mode.rb, local_mode.py, plugins.spec.ts\n defaultPlugins: [\n 'openc3-cosmos-tool-admin',\n 'openc3-cosmos-tool-bucketexplorer',\n 'openc3-cosmos-tool-cmdsender',\n 'openc3-cosmos-tool-cmdhistory', // Enterprise only\n 'openc3-cosmos-tool-cmdtlmserver',\n 'openc3-cosmos-tool-dataextractor',\n 'openc3-cosmos-tool-dataviewer',\n 'openc3-cosmos-tool-docs',\n 'openc3-cosmos-tool-handbooks',\n 'openc3-cosmos-tool-iframe',\n 'openc3-cosmos-tool-limitsmonitor',\n 'openc3-cosmos-tool-packetviewer',\n 'openc3-cosmos-tool-scriptrunner',\n 'openc3-cosmos-tool-tablemanager',\n 'openc3-cosmos-tool-tlmgrapher',\n 'openc3-cosmos-tool-tlmviewer',\n 'openc3-cosmos-enterprise-tool-admin', // Enterprise only\n 'openc3-cosmos-tool-autonomic', // Enterprise only\n 'openc3-cosmos-tool-calendar', // Enterprise only\n 'openc3-cosmos-tool-grafana', // Enterprise only\n 'openc3-cosmos-tool-systemhealth', // Enterprise only\n 'openc3-enterprise-tool-base', // Enterprise only\n 'openc3-tool-base',\n ],\n }\n },\n computed: {\n shownPlugins() {\n let result = []\n for (let plugin of this.plugins) {\n let pluginNameFirst = plugin.split('__')[0]\n let pluginNameSplit = pluginNameFirst.split('-')\n pluginNameSplit = pluginNameSplit.slice(0, -1)\n let pluginName = pluginNameSplit.join('-')\n if (\n !this.defaultPlugins.includes(pluginName) ||\n this.showDefaultTools\n ) {\n result.push(plugin)\n }\n }\n return result\n },\n pluginTargets() {\n return (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 },\n isModified() {\n return (plugin) => {\n let result = false\n for (const target in this.targets) {\n if (\n this.targets[target]['plugin'] === plugin &&\n this.targets[target]['modified'] === true\n ) {\n result = true\n break\n }\n }\n return result\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 mounted() {\n this.update()\n this.updateProcesses()\n },\n methods: {\n showOutput: function (process) {\n this.processOutput = process.output\n this.showProcessOutput = true\n },\n update: function () {\n Api.get('/openc3-api/plugins').then((response) => {\n this.plugins = response.data\n })\n Api.get('/openc3-api/targets_modified').then((response) => {\n this.targets = response.data\n })\n },\n updateProcesses: function () {\n Api.get('openc3-api/process_status/plugin_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 5000)\n }\n },\n )\n },\n formatDate(nanoSecs) {\n return format(\n toDate(parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n upload: function (existing = null) {\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 formData.append('plugin', this.file, this.file.name)\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.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 setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n this.update()\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 downloadPlugin: function (plugin) {\n Api.post(`/openc3-api/packages/${plugin}/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 editPlugin: function (plugin) {\n Api.get(`/openc3-api/plugins/${plugin}`).then((response) => {\n let existingPluginTxt = null\n if (response.data.existing_plugin_txt_lines !== undefined) {\n existingPluginTxt = response.data.existing_plugin_txt_lines.join('\\n')\n }\n let pluginTxt = response.data.plugin_txt_lines.join('\\n')\n ;(this.pluginName = response.data.name),\n (this.variables = response.data.variables),\n (this.pluginTxt = pluginTxt),\n (this.existingPluginTxt = existingPluginTxt)\n this.showPluginDialog = true\n })\n },\n deletePrompt: function (plugin) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${plugin}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.isModified(plugin)) {\n this.currentPlugin = plugin\n this.pluginDelete = true\n this.showModifiedPluginDialog = true\n } else {\n this.deletePlugin(plugin)\n }\n })\n },\n deletePlugin: function (plugin) {\n this.alert = `Removing plugin ${plugin} ...`\n this.alertType = 'success'\n this.showAlert = true\n Api.delete(`/openc3-api/plugins/${plugin}`).then((response) => {\n setTimeout(() => {\n this.showAlert = false\n this.updateProcesses()\n }, 5000)\n })\n this.update()\n },\n upgradePlugin(plugin) {\n this.file = null\n this.currentPlugin = plugin\n this.progress = 0\n this.$refs.fileInput.click()\n },\n selectFile() {\n this.file = null\n this.currentPlugin = null\n this.progress = 0\n this.$refs.fileInput.click()\n },\n fileChange(event) {\n const files = event.target.files\n if (files.length > 0) {\n this.file = files[0]\n if (this.currentPlugin !== null) {\n if (\n this.file.name.split('.gem')[0] ==\n this.currentPlugin.split('.gem')[0]\n ) {\n this.$dialog\n .confirm(\n `The new gem ${this.file.name} appears to be identical to the existing ${this.currentPlugin}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n .catch((error) => {\n // do nothing\n })\n } else {\n // Split up the gem name to determine if this is an upgrade\n // or mistakenly trying to install a different gem\n // Gems are named like openc3-cosmos-demo-5.3.2.gem or\n // openc3-cosmos-pw-test-1.0.0.20230213074527.gem\n // So split on - and match everything until the first .\n let parts = this.file.name.split('-')\n let i = parts.findIndex((x) => x.includes('.'))\n let newName = parts.slice(0, i).join('-')\n parts = this.currentPlugin.split('-')\n i = parts.findIndex((x) => x.includes('.'))\n let existingName = parts.slice(0, i).join('-')\n if (newName !== existingName) {\n this.$dialog\n .confirm(\n `The new gem base name ${newName} doesn't match the existing ${existingName}. Install?`,\n {\n okText: 'Ok',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.upload(this.currentPlugin)\n })\n } else {\n this.upload(this.currentPlugin)\n }\n }\n } else {\n this.upload()\n }\n } else {\n // Reset the input element\n this.$refs.fileInput.value = null\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.crashed {\n color: red;\n}\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.v-theme--cosmosDark.v-list div:nth-child(odd) .v-list-item {\n background-color: var(--color-background-base-selected) !important;\n}\n</style>\n"],"names":["_sfc_main","PluginDialog","ModifiedPluginDialog","SimpleTextDialog","result","plugin","pluginNameSplit","pluginName","target","newValue","oldValue","process","Api","response","nanoSecs","format","toDate","existing","method","path","formData","self","progressEvent","percentCompleted","existingPluginTxt","pluginTxt","error","pluginHash","deleteModified","name","decodedData","uInt8Array","blob","link","dialog","event","files","parts","i","x","newName","existingName","_hoisted_1","_hoisted_2","_hoisted_4","_createElementBlock","_createVNode","_component_v_row","_withCtx","_component_v_col","_component_v_btn","$options","_cache","_createTextVNode","_createElementVNode","args","_component_v_icon","_component_rux_progress","$data","_component_v_checkbox","$event","_component_v_divider","_component_v_alert","_toDisplayString","_createBlock","_component_v_list","_openBlock","_Fragment","_renderList","_component_v_list_item","_component_v_progress_circular","_component_v_tooltip","props","_mergeProps","_component_v_list_item_title","_normalizeClass","_component_v_list_item_subtitle","_createCommentVNode","index","_hoisted_3","_withModifiers","_hoisted_5","_component_plugin_dialog","_component_modified_plugin_dialog","_component_simple_text_dialog"],"mappings":"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"}
|