@openc3/vue-common 6.3.0 → 6.4.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-DkjHrXsu.cjs → ArrayWidget-Ba-YDfZB.cjs} +2 -2
- package/dist/{ArrayWidget-DkjHrXsu.cjs.map → ArrayWidget-Ba-YDfZB.cjs.map} +1 -1
- package/dist/{ArrayWidget-BbsN1dzF.js → ArrayWidget-DAZApfkV.js} +4 -4
- package/dist/{ArrayWidget-BbsN1dzF.js.map → ArrayWidget-DAZApfkV.js.map} +1 -1
- package/dist/{ArrayplotWidget-CCKEyYIx.js → ArrayplotWidget-BfsxDplv.js} +3 -3
- package/dist/{ArrayplotWidget-CCKEyYIx.js.map → ArrayplotWidget-BfsxDplv.js.map} +1 -1
- package/dist/ArrayplotWidget-Ckm4lmSc.cjs +2 -0
- package/dist/{ArrayplotWidget-COeaK_Lz.cjs.map → ArrayplotWidget-Ckm4lmSc.cjs.map} +1 -1
- package/dist/BarColumn-Cp7oEFJR.cjs +2 -0
- package/dist/{BarColumn-CJLW1nXy.cjs.map → BarColumn-Cp7oEFJR.cjs.map} +1 -1
- package/dist/{BarColumn-C6p07yWK.js → BarColumn-q0nAsvrd.js} +3 -3
- package/dist/{BarColumn-C6p07yWK.js.map → BarColumn-q0nAsvrd.js.map} +1 -1
- package/dist/{BlockWidget-BFVYgbd_.cjs → BlockWidget-DRB-TDL_.cjs} +2 -2
- package/dist/{BlockWidget-BFVYgbd_.cjs.map → BlockWidget-DRB-TDL_.cjs.map} +1 -1
- package/dist/{BlockWidget-DlCHbqZX.js → BlockWidget-SDCUWcMQ.js} +4 -4
- package/dist/{BlockWidget-DlCHbqZX.js.map → BlockWidget-SDCUWcMQ.js.map} +1 -1
- package/dist/{ButtonWidget-CtfJzCBR.js → ButtonWidget-BVMjwC19.js} +14 -14
- package/dist/{ButtonWidget-CtfJzCBR.js.map → ButtonWidget-BVMjwC19.js.map} +1 -1
- package/dist/ButtonWidget-yJ70adEU.cjs +3 -0
- package/dist/{ButtonWidget-HN8UHsme.cjs.map → ButtonWidget-yJ70adEU.cjs.map} +1 -1
- package/dist/{CanvasWidget-CHmkxxMO.cjs → CanvasWidget-DXkxnt1x.cjs} +2 -2
- package/dist/{CanvasWidget-CHmkxxMO.cjs.map → CanvasWidget-DXkxnt1x.cjs.map} +1 -1
- package/dist/{CanvasWidget-CqRlXc4r.js → CanvasWidget-bVkufjRQ.js} +2 -2
- package/dist/{CanvasWidget-CqRlXc4r.js.map → CanvasWidget-bVkufjRQ.js.map} +1 -1
- package/dist/{CanvasdotWidget-B4bUcKRc.cjs → CanvasdotWidget-Bi3nZh7g.cjs} +2 -2
- package/dist/{CanvasdotWidget-B4bUcKRc.cjs.map → CanvasdotWidget-Bi3nZh7g.cjs.map} +1 -1
- package/dist/{CanvasdotWidget--Xr_KsZs.js → CanvasdotWidget-DpniFfca.js} +2 -2
- package/dist/{CanvasdotWidget--Xr_KsZs.js.map → CanvasdotWidget-DpniFfca.js.map} +1 -1
- package/dist/{CanvasimageWidget-B5YozXoI.cjs → CanvasimageWidget-C-aBl-by.cjs} +2 -2
- package/dist/{CanvasimageWidget-B5YozXoI.cjs.map → CanvasimageWidget-C-aBl-by.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-BPlj5QYK.js → CanvasimageWidget-DHOSz-dJ.js} +3 -3
- package/dist/{CanvasimageWidget-BPlj5QYK.js.map → CanvasimageWidget-DHOSz-dJ.js.map} +1 -1
- package/dist/{CanvasimagevalueWidget-Dx1HnbEw.cjs → CanvasimagevalueWidget-DAbbV-LB.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-Dx1HnbEw.cjs.map → CanvasimagevalueWidget-DAbbV-LB.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-DVFGLt8f.js → CanvasimagevalueWidget-zrURWWUL.js} +3 -3
- package/dist/{CanvasimagevalueWidget-DVFGLt8f.js.map → CanvasimagevalueWidget-zrURWWUL.js.map} +1 -1
- package/dist/{CanvaslabelWidget-DgadQD-D.cjs → CanvaslabelWidget-82bf_Awf.cjs} +2 -2
- package/dist/{CanvaslabelWidget-DgadQD-D.cjs.map → CanvaslabelWidget-82bf_Awf.cjs.map} +1 -1
- package/dist/{CanvaslabelWidget-CYNqmyP0.js → CanvaslabelWidget-D-XAMifp.js} +2 -2
- package/dist/{CanvaslabelWidget-CYNqmyP0.js.map → CanvaslabelWidget-D-XAMifp.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-B7yIDmsn.js → CanvaslabelvalueWidget-BsIdBtEb.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-B7yIDmsn.js.map → CanvaslabelvalueWidget-BsIdBtEb.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-C3k5gx5c.cjs → CanvaslabelvalueWidget-DgDzwLdi.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-C3k5gx5c.cjs.map → CanvaslabelvalueWidget-DgDzwLdi.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-CYHkes0a.cjs → CanvaslineWidget-BRRPuuqS.cjs} +2 -2
- package/dist/{CanvaslineWidget-CYHkes0a.cjs.map → CanvaslineWidget-BRRPuuqS.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-BICdxX0Q.js → CanvaslineWidget-CA2aPGRg.js} +2 -2
- package/dist/{CanvaslineWidget-BICdxX0Q.js.map → CanvaslineWidget-CA2aPGRg.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-5DzhZ22p.cjs → CanvaslinevalueWidget-BYjWr2gq.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-5DzhZ22p.cjs.map → CanvaslinevalueWidget-BYjWr2gq.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-Cq-Ddh0P.js → CanvaslinevalueWidget-J7epKRlo.js} +2 -2
- package/dist/{CanvaslinevalueWidget-Cq-Ddh0P.js.map → CanvaslinevalueWidget-J7epKRlo.js.map} +1 -1
- package/dist/{CheckbuttonWidget-B74AWeaW.js → CheckbuttonWidget-ByH-PDRG.js} +2 -2
- package/dist/{CheckbuttonWidget-B74AWeaW.js.map → CheckbuttonWidget-ByH-PDRG.js.map} +1 -1
- package/dist/{CheckbuttonWidget-BCzsXnIF.cjs → CheckbuttonWidget-DkoFFTcM.cjs} +2 -2
- package/dist/{CheckbuttonWidget-BCzsXnIF.cjs.map → CheckbuttonWidget-DkoFFTcM.cjs.map} +1 -1
- package/dist/{ComboboxWidget-CtyKbEWb.js → ComboboxWidget-Bdm_fMzW.js} +2 -2
- package/dist/{ComboboxWidget-CtyKbEWb.js.map → ComboboxWidget-Bdm_fMzW.js.map} +1 -1
- package/dist/{ComboboxWidget-DQgDyDAC.cjs → ComboboxWidget-Dq28F4bs.cjs} +2 -2
- package/dist/{ComboboxWidget-DQgDyDAC.cjs.map → ComboboxWidget-Dq28F4bs.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-DPIZOBeP.js → CriticalCmdDialog-Bcq8PGag.js} +16 -16
- package/dist/CriticalCmdDialog-Bcq8PGag.js.map +1 -0
- package/dist/CriticalCmdDialog-CLF7hYKu.cjs +2 -0
- package/dist/CriticalCmdDialog-CLF7hYKu.cjs.map +1 -0
- package/dist/{DateWidget-BEVSczU8.js → DateWidget-BaQqthC7.js} +3 -3
- package/dist/{DateWidget-BEVSczU8.js.map → DateWidget-BaQqthC7.js.map} +1 -1
- package/dist/{DateWidget-BB4cIuUS.cjs → DateWidget-DCayVS3o.cjs} +2 -2
- package/dist/{DateWidget-BB4cIuUS.cjs.map → DateWidget-DCayVS3o.cjs.map} +1 -1
- package/dist/{DetailsDialog-DmEC5BTs.js → DetailsDialog-C5jf8o0K.js} +18 -18
- package/dist/DetailsDialog-C5jf8o0K.js.map +1 -0
- package/dist/DetailsDialog-CangkVuF.cjs +2 -0
- package/dist/DetailsDialog-CangkVuF.cjs.map +1 -0
- package/dist/{EventListDialog-CSMSmCIT.js → EventListDialog-Bniar26O.js} +513 -590
- package/dist/EventListDialog-Bniar26O.js.map +1 -0
- package/dist/EventListDialog-D_KXhGDO.cjs +2 -0
- package/dist/EventListDialog-D_KXhGDO.cjs.map +1 -0
- package/dist/FormatvalueWidget--H5B9i_Y.js +48 -0
- package/dist/FormatvalueWidget--H5B9i_Y.js.map +1 -0
- package/dist/FormatvalueWidget-CDh1rF5P.cjs +2 -0
- package/dist/FormatvalueWidget-CDh1rF5P.cjs.map +1 -0
- package/dist/Graph-DIR-5tJu.cjs +2 -0
- package/dist/Graph-DIR-5tJu.cjs.map +1 -0
- package/dist/{Graph-Bgo0cjl3.js → Graph-M382Zo8o.js} +666 -801
- package/dist/Graph-M382Zo8o.js.map +1 -0
- package/dist/{GraphWidget-sid4Ws9H.cjs → GraphWidget-CNUOLw5-.cjs} +2 -2
- package/dist/{GraphWidget-sid4Ws9H.cjs.map → GraphWidget-CNUOLw5-.cjs.map} +1 -1
- package/dist/{GraphWidget-DurWDmpg.js → GraphWidget-_YOGDD1U.js} +2 -2
- package/dist/{GraphWidget-DurWDmpg.js.map → GraphWidget-_YOGDD1U.js.map} +1 -1
- package/dist/{HorizontalWidget-_6IR0cR8.cjs → HorizontalWidget-Bix4q7It.cjs} +2 -2
- package/dist/{HorizontalWidget-_6IR0cR8.cjs.map → HorizontalWidget-Bix4q7It.cjs.map} +1 -1
- package/dist/{HorizontalWidget-Cd_wl1b3.js → HorizontalWidget-D_gzrOWs.js} +2 -2
- package/dist/{HorizontalWidget-Cd_wl1b3.js.map → HorizontalWidget-D_gzrOWs.js.map} +1 -1
- package/dist/{HorizontalboxWidget-zmnurtv1.cjs → HorizontalboxWidget-B8a4-h2J.cjs} +2 -2
- package/dist/{HorizontalboxWidget-zmnurtv1.cjs.map → HorizontalboxWidget-B8a4-h2J.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-BcMTFBU-.js → HorizontalboxWidget-GDcjO-UB.js} +5 -5
- package/dist/{HorizontalboxWidget-BcMTFBU-.js.map → HorizontalboxWidget-GDcjO-UB.js.map} +1 -1
- package/dist/{HorizontallineWidget-CM-6WqCj.cjs → HorizontallineWidget-BD6dqVhE.cjs} +2 -2
- package/dist/{HorizontallineWidget-CM-6WqCj.cjs.map → HorizontallineWidget-BD6dqVhE.cjs.map} +1 -1
- package/dist/{HorizontallineWidget-CXFqHclf.js → HorizontallineWidget-DZvOYFxf.js} +2 -2
- package/dist/{HorizontallineWidget-CXFqHclf.js.map → HorizontallineWidget-DZvOYFxf.js.map} +1 -1
- package/dist/{IframeWidget-BPerHCCa.js → IframeWidget-CuUav9b3.js} +2 -2
- package/dist/{IframeWidget-BPerHCCa.js.map → IframeWidget-CuUav9b3.js.map} +1 -1
- package/dist/{IframeWidget-EhncMob0.cjs → IframeWidget-DL_CET3B.cjs} +2 -2
- package/dist/{IframeWidget-EhncMob0.cjs.map → IframeWidget-DL_CET3B.cjs.map} +1 -1
- package/dist/{ImageLoader-4N-7Gj61.js → ImageLoader-3KLKJ5mV.js} +2 -2
- package/dist/{ImageLoader-4N-7Gj61.js.map → ImageLoader-3KLKJ5mV.js.map} +1 -1
- package/dist/ImageLoader-DaWMqoJS.cjs +2 -0
- package/dist/{ImageLoader-cRmBcpU9.cjs.map → ImageLoader-DaWMqoJS.cjs.map} +1 -1
- package/dist/{ImageviewerWidget-Cw_H_HmZ.js → ImageviewerWidget-BMZ6REN4.js} +2 -2
- package/dist/{ImageviewerWidget-Cw_H_HmZ.js.map → ImageviewerWidget-BMZ6REN4.js.map} +1 -1
- package/dist/{ImageviewerWidget-Bv3CreXd.cjs → ImageviewerWidget-_0YopZ1s.cjs} +2 -2
- package/dist/{ImageviewerWidget-Bv3CreXd.cjs.map → ImageviewerWidget-_0YopZ1s.cjs.map} +1 -1
- package/dist/InterfacesTab-DGrLsTA0.cjs +2 -0
- package/dist/InterfacesTab-DGrLsTA0.cjs.map +1 -0
- package/dist/InterfacesTab-DTixVrGo.js +83 -0
- package/dist/InterfacesTab-DTixVrGo.js.map +1 -0
- package/dist/{LabelWidget-mMcf5S8K.cjs → LabelWidget-DkZvBxYg.cjs} +2 -2
- package/dist/{LabelWidget-mMcf5S8K.cjs.map → LabelWidget-DkZvBxYg.cjs.map} +1 -1
- package/dist/{LabelWidget-xrmcVeq8.js → LabelWidget-oh6FIG6s.js} +2 -2
- package/dist/{LabelWidget-xrmcVeq8.js.map → LabelWidget-oh6FIG6s.js.map} +1 -1
- package/dist/{LabelledWidget-D48QoyMk.js → LabelledWidget-Bic36les.js} +4 -4
- package/dist/{LabelledWidget-D48QoyMk.js.map → LabelledWidget-Bic36les.js.map} +1 -1
- package/dist/{LabelledWidget-BoYCuDaH.cjs → LabelledWidget-D7nm73kj.cjs} +2 -2
- package/dist/{LabelledWidget-BoYCuDaH.cjs.map → LabelledWidget-D7nm73kj.cjs.map} +1 -1
- package/dist/{LabelprogressbarWidget-C_950t6g.js → LabelprogressbarWidget-CqIiGoDb.js} +4 -4
- package/dist/{LabelprogressbarWidget-C_950t6g.js.map → LabelprogressbarWidget-CqIiGoDb.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-DiucKsT2.cjs → LabelprogressbarWidget-DY0Xd2c2.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-DiucKsT2.cjs.map → LabelprogressbarWidget-DY0Xd2c2.cjs.map} +1 -1
- package/dist/{LabelsparklineWidget-0KXQyPoU.js → LabelsparklineWidget-DLhmqO02.js} +4 -4
- package/dist/{LabelsparklineWidget-0KXQyPoU.js.map → LabelsparklineWidget-DLhmqO02.js.map} +1 -1
- package/dist/{LabelsparklineWidget-A3MTEhQc.cjs → LabelsparklineWidget-DZ5-iEcK.cjs} +2 -2
- package/dist/{LabelsparklineWidget-A3MTEhQc.cjs.map → LabelsparklineWidget-DZ5-iEcK.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-CQ06wWDK.js → LabelvalueWidget-BefwSSVq.js} +4 -4
- package/dist/{LabelvalueWidget-CQ06wWDK.js.map → LabelvalueWidget-BefwSSVq.js.map} +1 -1
- package/dist/{LabelvalueWidget-DnKoz0-N.cjs → LabelvalueWidget-D-u38nLh.cjs} +2 -2
- package/dist/{LabelvalueWidget-DnKoz0-N.cjs.map → LabelvalueWidget-D-u38nLh.cjs.map} +1 -1
- package/dist/LabelvaluedescWidget-DMuBCLM8.cjs +2 -0
- package/dist/{LabelvaluedescWidget-I6ljK--Y.cjs.map → LabelvaluedescWidget-DMuBCLM8.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-Bo8zT01X.js → LabelvaluedescWidget-NxrCzznm.js} +9 -9
- package/dist/{LabelvaluedescWidget-Bo8zT01X.js.map → LabelvaluedescWidget-NxrCzznm.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-Cb6i_Ixc.cjs → LabelvaluelimitsbarWidget-BY212bgc.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-Cb6i_Ixc.cjs.map → LabelvaluelimitsbarWidget-BY212bgc.cjs.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-BucTw8Yk.js → LabelvaluelimitsbarWidget-pq7qoolL.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-BucTw8Yk.js.map → LabelvaluelimitsbarWidget-pq7qoolL.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-ClY5OxUC.cjs → LabelvaluelimitscolumnWidget-DVLGU6ja.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-ClY5OxUC.cjs.map → LabelvaluelimitscolumnWidget-DVLGU6ja.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-Dflb1hNd.js → LabelvaluelimitscolumnWidget-edkpogsl.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-Dflb1hNd.js.map → LabelvaluelimitscolumnWidget-edkpogsl.js.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-9S5rVZaS.cjs → LabelvaluerangebarWidget-CA_7kTS2.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-9S5rVZaS.cjs.map → LabelvaluerangebarWidget-CA_7kTS2.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-D8cbfXFM.js → LabelvaluerangebarWidget-DpJNv9dh.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-D8cbfXFM.js.map → LabelvaluerangebarWidget-DpJNv9dh.js.map} +1 -1
- package/dist/{Layout-Tf--nruw.js → Layout-B0hvhBQO.js} +2 -2
- package/dist/{Layout-Tf--nruw.js.map → Layout-B0hvhBQO.js.map} +1 -1
- package/dist/Layout-BLADjt_A.cjs +2 -0
- package/dist/{Layout-DuCYyOw4.cjs.map → Layout-BLADjt_A.cjs.map} +1 -1
- package/dist/{LedWidget-qH_FthkK.js → LedWidget--4eSxBnn.js} +13 -10
- package/dist/LedWidget--4eSxBnn.js.map +1 -0
- package/dist/LedWidget-BoZKOBZg.cjs +2 -0
- package/dist/LedWidget-BoZKOBZg.cjs.map +1 -0
- package/dist/{LimitsbarWidget-B9lAB2RD.js → LimitsbarWidget-BQaumgRt.js} +10 -7
- package/dist/LimitsbarWidget-BQaumgRt.js.map +1 -0
- package/dist/LimitsbarWidget-CyHbbNx3.cjs +2 -0
- package/dist/LimitsbarWidget-CyHbbNx3.cjs.map +1 -0
- package/dist/{LimitscolorWidget-c6Qa6su7.js → LimitscolorWidget-BBF9sRtF.js} +2 -2
- package/dist/{LimitscolorWidget-c6Qa6su7.js.map → LimitscolorWidget-BBF9sRtF.js.map} +1 -1
- package/dist/{LimitscolorWidget-DORhDxRo.cjs → LimitscolorWidget-CsuRoqxm.cjs} +2 -2
- package/dist/{LimitscolorWidget-DORhDxRo.cjs.map → LimitscolorWidget-CsuRoqxm.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-C9Uyg7Fh.cjs → LimitscolumnWidget-Cr1qFT8M.cjs} +2 -2
- package/dist/{LimitscolumnWidget-C9Uyg7Fh.cjs.map → LimitscolumnWidget-Cr1qFT8M.cjs.map} +1 -1
- package/dist/{LimitscolumnWidget-CcLs_443.js → LimitscolumnWidget-DZZtSoXw.js} +2 -2
- package/dist/{LimitscolumnWidget-CcLs_443.js.map → LimitscolumnWidget-DZZtSoXw.js.map} +1 -1
- package/dist/LinegraphWidget-Cw9vua8K.cjs +2 -0
- package/dist/{LinegraphWidget-Bf8DIwEn.cjs.map → LinegraphWidget-Cw9vua8K.cjs.map} +1 -1
- package/dist/{LinegraphWidget-BSVYLFo1.js → LinegraphWidget-DTLZmyWs.js} +4 -4
- package/dist/{LinegraphWidget-BSVYLFo1.js.map → LinegraphWidget-DTLZmyWs.js.map} +1 -1
- package/dist/MatrixbycolumnsWidget-Digh2kY7.cjs +2 -0
- package/dist/{MatrixbycolumnsWidget-DpdFzNeP.cjs.map → MatrixbycolumnsWidget-Digh2kY7.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-DXFpZTre.js → MatrixbycolumnsWidget-dpgZz4wR.js} +3 -3
- package/dist/{MatrixbycolumnsWidget-DXFpZTre.js.map → MatrixbycolumnsWidget-dpgZz4wR.js.map} +1 -1
- package/dist/MicroservicesTab-BQywJ_ya.cjs +2 -0
- package/dist/MicroservicesTab-BQywJ_ya.cjs.map +1 -0
- package/dist/MicroservicesTab-DbL48MBc.js +219 -0
- package/dist/MicroservicesTab-DbL48MBc.js.map +1 -0
- package/dist/Openc3Screen-COi4u-9k.cjs +5 -0
- package/dist/Openc3Screen-COi4u-9k.cjs.map +1 -0
- package/dist/Openc3Screen-CtwGKfq-.js +1690 -0
- package/dist/Openc3Screen-CtwGKfq-.js.map +1 -0
- package/dist/{OutputDialog-zVPZiZay.js → OutputDialog-B5qHVyck.js} +66 -78
- package/dist/OutputDialog-B5qHVyck.js.map +1 -0
- package/dist/OutputDialog-CFhG2RY9.cjs +2 -0
- package/dist/OutputDialog-CFhG2RY9.cjs.map +1 -0
- package/dist/PackagesTab-Bw34RkLc.js +313 -0
- package/dist/PackagesTab-Bw34RkLc.js.map +1 -0
- package/dist/PackagesTab-DXSowjd4.cjs +2 -0
- package/dist/PackagesTab-DXSowjd4.cjs.map +1 -0
- package/dist/{PluginsTab-B64OvayB.js → PluginsTab-C9t0-QVm.js} +205 -244
- package/dist/PluginsTab-C9t0-QVm.js.map +1 -0
- package/dist/PluginsTab-CPaBGJMa.cjs +6 -0
- package/dist/PluginsTab-CPaBGJMa.cjs.map +1 -0
- package/dist/{ProgressbarWidget-iYGw8-Dc.js → ProgressbarWidget-7cYr8136.js} +2 -2
- package/dist/{ProgressbarWidget-iYGw8-Dc.js.map → ProgressbarWidget-7cYr8136.js.map} +1 -1
- package/dist/{ProgressbarWidget-fGWa6ipm.cjs → ProgressbarWidget-CdOWGViG.cjs} +2 -2
- package/dist/{ProgressbarWidget-fGWa6ipm.cjs.map → ProgressbarWidget-CdOWGViG.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-ZEPJbOp_.cjs → RadiobuttonWidget-5t4ofYx3.cjs} +2 -2
- package/dist/{RadiobuttonWidget-ZEPJbOp_.cjs.map → RadiobuttonWidget-5t4ofYx3.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-ytmoVZ3u.js → RadiobuttonWidget-DTfn-7F2.js} +2 -2
- package/dist/{RadiobuttonWidget-ytmoVZ3u.js.map → RadiobuttonWidget-DTfn-7F2.js.map} +1 -1
- package/dist/{RadiogroupWidget-CusMBhKH.js → RadiogroupWidget-DWvTpw94.js} +2 -2
- package/dist/{RadiogroupWidget-CusMBhKH.js.map → RadiogroupWidget-DWvTpw94.js.map} +1 -1
- package/dist/{RadiogroupWidget-EK4rEGUC.cjs → RadiogroupWidget-emxyymRZ.cjs} +2 -2
- package/dist/{RadiogroupWidget-EK4rEGUC.cjs.map → RadiogroupWidget-emxyymRZ.cjs.map} +1 -1
- package/dist/{RangebarWidget-D_zGTtCa.js → RangebarWidget-CG2Y7eYp.js} +2 -2
- package/dist/{RangebarWidget-D_zGTtCa.js.map → RangebarWidget-CG2Y7eYp.js.map} +1 -1
- package/dist/{RangebarWidget-DwIs-L5k.cjs → RangebarWidget-CLMKfbiT.cjs} +2 -2
- package/dist/{RangebarWidget-DwIs-L5k.cjs.map → RangebarWidget-CLMKfbiT.cjs.map} +1 -1
- package/dist/{RedisTab-CyPo6ADN.js → RedisTab-CvPLS0Qe.js} +13 -13
- package/dist/{RedisTab-CyPo6ADN.js.map → RedisTab-CvPLS0Qe.js.map} +1 -1
- package/dist/RedisTab-PbizvHjY.cjs +2 -0
- package/dist/{RedisTab-67UcKoPf.cjs.map → RedisTab-PbizvHjY.cjs.map} +1 -1
- package/dist/{RollupWidget-Dolsixyt.js → RollupWidget-C6HKTfCR.js} +2 -2
- package/dist/{RollupWidget-Dolsixyt.js.map → RollupWidget-C6HKTfCR.js.map} +1 -1
- package/dist/{RollupWidget-DC3OIP6G.cjs → RollupWidget-CHKUdXMx.cjs} +2 -2
- package/dist/{RollupWidget-DC3OIP6G.cjs.map → RollupWidget-CHKUdXMx.cjs.map} +1 -1
- package/dist/RoutersTab-D-ex_yMO.js +85 -0
- package/dist/RoutersTab-D-ex_yMO.js.map +1 -0
- package/dist/RoutersTab-zkaML-Xt.cjs +2 -0
- package/dist/RoutersTab-zkaML-Xt.cjs.map +1 -0
- package/dist/ScriptChooser-Dkf84RzQ.cjs +2 -0
- package/dist/ScriptChooser-Dkf84RzQ.cjs.map +1 -0
- package/dist/ScriptChooser-qiC2xQ_W.js +176 -0
- package/dist/ScriptChooser-qiC2xQ_W.js.map +1 -0
- package/dist/{ScrollwindowWidget-BWeqSUPc.cjs → ScrollwindowWidget-CVc9EXW2.cjs} +2 -2
- package/dist/{ScrollwindowWidget-BWeqSUPc.cjs.map → ScrollwindowWidget-CVc9EXW2.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-DV2nZuNi.js → ScrollwindowWidget-DvhBCYd2.js} +3 -3
- package/dist/{ScrollwindowWidget-DV2nZuNi.js.map → ScrollwindowWidget-DvhBCYd2.js.map} +1 -1
- package/dist/{SecretsTab-DVyyyGlG.js → SecretsTab-CLkJfzf-.js} +39 -49
- package/dist/SecretsTab-CLkJfzf-.js.map +1 -0
- package/dist/SecretsTab-Clw9ErBz.cjs +2 -0
- package/dist/SecretsTab-Clw9ErBz.cjs.map +1 -0
- package/dist/SettingsTab-BJ9mrQ8U.cjs +3 -0
- package/dist/{SettingsTab-B1LvOLG2.cjs.map → SettingsTab-BJ9mrQ8U.cjs.map} +1 -1
- package/dist/{SettingsTab-g29K6FyC.js → SettingsTab-CysOMBFu.js} +3 -3
- package/dist/{SettingsTab-g29K6FyC.js.map → SettingsTab-CysOMBFu.js.map} +1 -1
- package/dist/{SignalWidget-d9-6h85k.js → SignalWidget-BZIoGjam.js} +16 -18
- package/dist/SignalWidget-BZIoGjam.js.map +1 -0
- package/dist/{SignalWidget-RvRwpE8T.cjs → SignalWidget-DpNUpQNW.cjs} +2 -2
- package/dist/SignalWidget-DpNUpQNW.cjs.map +1 -0
- package/dist/SimpleTextDialog-CGStqYvO.js +97 -0
- package/dist/SimpleTextDialog-CGStqYvO.js.map +1 -0
- package/dist/SimpleTextDialog-P2KPhVHq.cjs +2 -0
- package/dist/SimpleTextDialog-P2KPhVHq.cjs.map +1 -0
- package/dist/{SpacerWidget-7_8bpLCb.cjs → SpacerWidget-CHuv4qDR.cjs} +2 -2
- package/dist/{SpacerWidget-7_8bpLCb.cjs.map → SpacerWidget-CHuv4qDR.cjs.map} +1 -1
- package/dist/{SpacerWidget-BH0p2OLi.js → SpacerWidget-YBS8RZIE.js} +2 -2
- package/dist/{SpacerWidget-BH0p2OLi.js.map → SpacerWidget-YBS8RZIE.js.map} +1 -1
- package/dist/{SparklineWidget-coxi9r2g.js → SparklineWidget-BMhY9vYe.js} +4 -4
- package/dist/{SparklineWidget-coxi9r2g.js.map → SparklineWidget-BMhY9vYe.js.map} +1 -1
- package/dist/SparklineWidget-qWQGTMwn.cjs +2 -0
- package/dist/{SparklineWidget-60jVlbHA.cjs.map → SparklineWidget-qWQGTMwn.cjs.map} +1 -1
- package/dist/{TabbookWidget-D1CVT9IK.cjs → TabbookWidget-C4jdzkQl.cjs} +2 -2
- package/dist/{TabbookWidget-D1CVT9IK.cjs.map → TabbookWidget-C4jdzkQl.cjs.map} +1 -1
- package/dist/{TabbookWidget-B1XKplGH.js → TabbookWidget-RfET19pq.js} +2 -2
- package/dist/{TabbookWidget-B1XKplGH.js.map → TabbookWidget-RfET19pq.js.map} +1 -1
- package/dist/TargetsTab-CVZR_Bp6.cjs +2 -0
- package/dist/TargetsTab-CVZR_Bp6.cjs.map +1 -0
- package/dist/TargetsTab-CfBt-dZW.js +117 -0
- package/dist/TargetsTab-CfBt-dZW.js.map +1 -0
- package/dist/TextBoxDialog-C60jmnyN.js +98 -0
- package/dist/TextBoxDialog-C60jmnyN.js.map +1 -0
- package/dist/TextBoxDialog-DWt30tB8.cjs +2 -0
- package/dist/TextBoxDialog-DWt30tB8.cjs.map +1 -0
- package/dist/TextboxWidget-Cm7-yWTZ.cjs +2 -0
- package/dist/{TextboxWidget-BDG4NxRw.cjs.map → TextboxWidget-Cm7-yWTZ.cjs.map} +1 -1
- package/dist/{TextboxWidget-C-_M2M4l.js → TextboxWidget-M8vFBSxS.js} +4 -4
- package/dist/{TextboxWidget-C-_M2M4l.js.map → TextboxWidget-M8vFBSxS.js.map} +1 -1
- package/dist/{TextfieldWidget-BGJv9Lox.cjs → TextfieldWidget-Bfk2NPtC.cjs} +2 -2
- package/dist/{TextfieldWidget-BGJv9Lox.cjs.map → TextfieldWidget-Bfk2NPtC.cjs.map} +1 -1
- package/dist/{TextfieldWidget-C08N4JE8.js → TextfieldWidget-Dev7lCsT.js} +2 -2
- package/dist/{TextfieldWidget-C08N4JE8.js.map → TextfieldWidget-Dev7lCsT.js.map} +1 -1
- package/dist/{TimeWidget-CGCOIouj.cjs → TimeWidget-BqkZJdg7.cjs} +2 -2
- package/dist/{TimeWidget-CGCOIouj.cjs.map → TimeWidget-BqkZJdg7.cjs.map} +1 -1
- package/dist/{TimeWidget-DtwdEcFg.js → TimeWidget-CQzn13rQ.js} +3 -3
- package/dist/{TimeWidget-DtwdEcFg.js.map → TimeWidget-CQzn13rQ.js.map} +1 -1
- package/dist/{TitleWidget-CT-aLcNb.js → TitleWidget-C4zbSian.js} +2 -2
- package/dist/{TitleWidget-CT-aLcNb.js.map → TitleWidget-C4zbSian.js.map} +1 -1
- package/dist/{TitleWidget-BljFH9RB.cjs → TitleWidget-DW0hJ0FE.cjs} +2 -2
- package/dist/{TitleWidget-BljFH9RB.cjs.map → TitleWidget-DW0hJ0FE.cjs.map} +1 -1
- package/dist/ToolsTab-CKeFb94Y.cjs +7 -0
- package/dist/{ToolsTab-RMTst_Sy.cjs.map → ToolsTab-CKeFb94Y.cjs.map} +1 -1
- package/dist/ToolsTab-CnhhRS3J.js +1501 -0
- package/dist/{ToolsTab-NveeVXz2.js.map → ToolsTab-CnhhRS3J.js.map} +1 -1
- package/dist/TopBar-4zZ-wYMY.cjs +2 -0
- package/dist/TopBar-4zZ-wYMY.cjs.map +1 -0
- package/dist/{TopBar-CnJNNJlV.js → TopBar-BQhv8Jcc.js} +68 -64
- package/dist/TopBar-BQhv8Jcc.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-C0MA3Uc-.cjs +2 -0
- package/dist/UpgradeToEnterpriseDialog-C0MA3Uc-.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-c6twungI.js +95 -0
- package/dist/UpgradeToEnterpriseDialog-c6twungI.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Bowkx8lp.cjs +1497 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-Bowkx8lp.cjs.map +1 -0
- package/dist/{WidgetComponents-C1lSLZ0I.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CVrrWDJ_.js} +10558 -10519
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-CVrrWDJ_.js.map +1 -0
- package/dist/{VWidget-DQqb7NVW.js → VWidget-iASFPjdx.js} +3 -3
- package/dist/{VWidget-DQqb7NVW.js.map → VWidget-iASFPjdx.js.map} +1 -1
- package/dist/{VWidget-2N2cOosI.cjs → VWidget-iTwRH6Qq.cjs} +2 -2
- package/dist/{VWidget-2N2cOosI.cjs.map → VWidget-iTwRH6Qq.cjs.map} +1 -1
- package/dist/{ValueWidget-C6RanBj3.js → ValueWidget-BVI6uUVX.js} +16 -14
- package/dist/ValueWidget-BVI6uUVX.js.map +1 -0
- package/dist/ValueWidget-CPuSUgn9.cjs +2 -0
- package/dist/ValueWidget-CPuSUgn9.cjs.map +1 -0
- package/dist/{ValuelimitsbarWidget-B3bvjfxc.js → ValuelimitsbarWidget-BiIcery0.js} +4 -4
- package/dist/{ValuelimitsbarWidget-B3bvjfxc.js.map → ValuelimitsbarWidget-BiIcery0.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-C0HROxrb.cjs → ValuelimitsbarWidget-CNdyobcf.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-C0HROxrb.cjs.map → ValuelimitsbarWidget-CNdyobcf.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-QvhI6EcE.js → ValuelimitscolumnWidget-BiRI8GbI.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-QvhI6EcE.js.map → ValuelimitscolumnWidget-BiRI8GbI.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-CWvLfg8u.cjs → ValuelimitscolumnWidget-Db0K4OjQ.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-CWvLfg8u.cjs.map → ValuelimitscolumnWidget-Db0K4OjQ.cjs.map} +1 -1
- package/dist/{ValuerangebarWidget-Dt3K9BnC.js → ValuerangebarWidget-CtMFQu9-.js} +4 -4
- package/dist/{ValuerangebarWidget-Dt3K9BnC.js.map → ValuerangebarWidget-CtMFQu9-.js.map} +1 -1
- package/dist/{ValuerangebarWidget-DyN78cQl.cjs → ValuerangebarWidget-DAEr-D_E.cjs} +2 -2
- package/dist/{ValuerangebarWidget-DyN78cQl.cjs.map → ValuerangebarWidget-DAEr-D_E.cjs.map} +1 -1
- package/dist/{VerticalWidget-BIIViZgI.js → VerticalWidget-CRmcpQBn.js} +2 -2
- package/dist/{VerticalWidget-BIIViZgI.js.map → VerticalWidget-CRmcpQBn.js.map} +1 -1
- package/dist/{VerticalWidget-CFTOu4H8.cjs → VerticalWidget-YG3auPJa.cjs} +2 -2
- package/dist/{VerticalWidget-CFTOu4H8.cjs.map → VerticalWidget-YG3auPJa.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-DY72fLHW.js → VerticalboxWidget-C-qChjug.js} +5 -5
- package/dist/{VerticalboxWidget-DY72fLHW.js.map → VerticalboxWidget-C-qChjug.js.map} +1 -1
- package/dist/{VerticalboxWidget-Z8-DWI8t.cjs → VerticalboxWidget-DX8-gFay.cjs} +2 -2
- package/dist/{VerticalboxWidget-Z8-DWI8t.cjs.map → VerticalboxWidget-DX8-gFay.cjs.map} +1 -1
- package/dist/{Widget-oyqWpFXJ.js → Widget-CFEnOKms.js} +3 -3
- package/dist/Widget-CFEnOKms.js.map +1 -0
- package/dist/Widget-EsyLQi_8.cjs +2 -0
- package/dist/Widget-EsyLQi_8.cjs.map +1 -0
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +285 -318
- package/dist/components.js.map +1 -1
- package/dist/index-DcL65Mqb.cjs +7 -0
- package/dist/index-DcL65Mqb.cjs.map +1 -0
- package/dist/{index-DwP8ryNM.js → index-qCq0L4jN.js} +332 -323
- package/dist/index-qCq0L4jN.js.map +1 -0
- package/dist/plugins.cjs +2 -2
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +94 -89
- package/dist/plugins.js.map +1 -1
- package/dist/{timeFilters-CRYpYDdf.js → timeFilters-BKnCM4rv.js} +139 -136
- package/dist/{timeFilters-CRYpYDdf.js.map → timeFilters-BKnCM4rv.js.map} +1 -1
- package/dist/timeFilters-CJFxfjqN.cjs +2 -0
- package/dist/{timeFilters-8SaYvcH0.cjs.map → timeFilters-CJFxfjqN.cjs.map} +1 -1
- package/dist/tools/admin.cjs +10 -10
- package/dist/tools/admin.cjs.map +1 -1
- package/dist/tools/admin.js +380 -406
- 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 +212 -215
- 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 +7 -8
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +2021 -2011
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/util.cjs +1 -1
- package/dist/util.js +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +63 -63
- package/package.json +12 -12
- package/dist/ArrayplotWidget-COeaK_Lz.cjs +0 -2
- package/dist/BarColumn-CJLW1nXy.cjs +0 -2
- package/dist/ButtonWidget-HN8UHsme.cjs +0 -3
- package/dist/CriticalCmdDialog-BnxZlt7W.cjs +0 -2
- package/dist/CriticalCmdDialog-BnxZlt7W.cjs.map +0 -1
- package/dist/CriticalCmdDialog-DPIZOBeP.js.map +0 -1
- package/dist/DetailsDialog-DmEC5BTs.js.map +0 -1
- package/dist/DetailsDialog-mvxMFmgV.cjs +0 -2
- package/dist/DetailsDialog-mvxMFmgV.cjs.map +0 -1
- package/dist/EventListDialog-BHZLl28V.cjs +0 -2
- package/dist/EventListDialog-BHZLl28V.cjs.map +0 -1
- package/dist/EventListDialog-CSMSmCIT.js.map +0 -1
- package/dist/FormatvalueWidget-CdjCEAI7.cjs +0 -2
- package/dist/FormatvalueWidget-CdjCEAI7.cjs.map +0 -1
- package/dist/FormatvalueWidget-DN12xymS.js +0 -44
- package/dist/FormatvalueWidget-DN12xymS.js.map +0 -1
- package/dist/Graph-Bgo0cjl3.js.map +0 -1
- package/dist/Graph-Ujd2yaeI.cjs +0 -2
- package/dist/Graph-Ujd2yaeI.cjs.map +0 -1
- package/dist/ImageLoader-cRmBcpU9.cjs +0 -2
- package/dist/InterfacesTab-B4glsR9Z.js +0 -93
- package/dist/InterfacesTab-B4glsR9Z.js.map +0 -1
- package/dist/InterfacesTab-Co1Kd6Fa.cjs +0 -2
- package/dist/InterfacesTab-Co1Kd6Fa.cjs.map +0 -1
- package/dist/LabelvaluedescWidget-I6ljK--Y.cjs +0 -2
- package/dist/Layout-DuCYyOw4.cjs +0 -2
- package/dist/LedWidget-B2BcwiYF.cjs +0 -2
- package/dist/LedWidget-B2BcwiYF.cjs.map +0 -1
- package/dist/LedWidget-qH_FthkK.js.map +0 -1
- package/dist/LimitsbarWidget-B9lAB2RD.js.map +0 -1
- package/dist/LimitsbarWidget-CVCLFIhG.cjs +0 -2
- package/dist/LimitsbarWidget-CVCLFIhG.cjs.map +0 -1
- package/dist/LinegraphWidget-Bf8DIwEn.cjs +0 -2
- package/dist/MatrixbycolumnsWidget-DpdFzNeP.cjs +0 -2
- package/dist/MicroservicesTab-B5n-mN8G.cjs +0 -2
- package/dist/MicroservicesTab-B5n-mN8G.cjs.map +0 -1
- package/dist/MicroservicesTab-mCdS0v39.js +0 -264
- package/dist/MicroservicesTab-mCdS0v39.js.map +0 -1
- package/dist/Openc3Screen-BYhHaH_I.cjs +0 -5
- package/dist/Openc3Screen-BYhHaH_I.cjs.map +0 -1
- package/dist/Openc3Screen-Cud0OCFu.js +0 -1789
- package/dist/Openc3Screen-Cud0OCFu.js.map +0 -1
- package/dist/OutputDialog-DXoL9VPw.cjs +0 -2
- package/dist/OutputDialog-DXoL9VPw.cjs.map +0 -1
- package/dist/OutputDialog-zVPZiZay.js.map +0 -1
- package/dist/PackagesTab-CvT2JyMA.cjs +0 -2
- package/dist/PackagesTab-CvT2JyMA.cjs.map +0 -1
- package/dist/PackagesTab-SWcXumpK.js +0 -332
- package/dist/PackagesTab-SWcXumpK.js.map +0 -1
- package/dist/PluginsTab-B64OvayB.js.map +0 -1
- package/dist/PluginsTab-CfpwWsqv.cjs +0 -6
- package/dist/PluginsTab-CfpwWsqv.cjs.map +0 -1
- package/dist/RedisTab-67UcKoPf.cjs +0 -2
- package/dist/RoutersTab-BBPlFi_z.cjs +0 -2
- package/dist/RoutersTab-BBPlFi_z.cjs.map +0 -1
- package/dist/RoutersTab-Cs2dFVNA.js +0 -95
- package/dist/RoutersTab-Cs2dFVNA.js.map +0 -1
- package/dist/ScriptChooser-EV65rbWx.js +0 -199
- package/dist/ScriptChooser-EV65rbWx.js.map +0 -1
- package/dist/ScriptChooser-vyZwngrz.cjs +0 -2
- package/dist/ScriptChooser-vyZwngrz.cjs.map +0 -1
- package/dist/SecretsTab-0IFqUxNJ.cjs +0 -2
- package/dist/SecretsTab-0IFqUxNJ.cjs.map +0 -1
- package/dist/SecretsTab-DVyyyGlG.js.map +0 -1
- package/dist/SettingsTab-B1LvOLG2.cjs +0 -3
- package/dist/SignalWidget-RvRwpE8T.cjs.map +0 -1
- package/dist/SignalWidget-d9-6h85k.js.map +0 -1
- package/dist/SimpleTextDialog-Cpbt7Q-8.cjs +0 -2
- package/dist/SimpleTextDialog-Cpbt7Q-8.cjs.map +0 -1
- package/dist/SimpleTextDialog-pwN8oRy1.js +0 -107
- package/dist/SimpleTextDialog-pwN8oRy1.js.map +0 -1
- package/dist/SparklineWidget-60jVlbHA.cjs +0 -2
- package/dist/TargetsTab-BkBkXn9A.js +0 -129
- package/dist/TargetsTab-BkBkXn9A.js.map +0 -1
- package/dist/TargetsTab-C-m26Eqq.cjs +0 -2
- package/dist/TargetsTab-C-m26Eqq.cjs.map +0 -1
- package/dist/TextBoxDialog-DOJ5d2RM.js +0 -110
- package/dist/TextBoxDialog-DOJ5d2RM.js.map +0 -1
- package/dist/TextBoxDialog-DfMXg_5C.cjs +0 -2
- package/dist/TextBoxDialog-DfMXg_5C.cjs.map +0 -1
- package/dist/TextboxWidget-BDG4NxRw.cjs +0 -2
- package/dist/ToolsTab-NveeVXz2.js +0 -1521
- package/dist/ToolsTab-RMTst_Sy.cjs +0 -7
- package/dist/TopBar-CnJNNJlV.js.map +0 -1
- package/dist/TopBar-Cnmb6DyC.cjs +0 -2
- package/dist/TopBar-Cnmb6DyC.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog-BvfgoNB1.js +0 -94
- package/dist/UpgradeToEnterpriseDialog-BvfgoNB1.js.map +0 -1
- package/dist/UpgradeToEnterpriseDialog-sUipOVpB.cjs +0 -2
- package/dist/UpgradeToEnterpriseDialog-sUipOVpB.cjs.map +0 -1
- package/dist/ValueWidget-C6RanBj3.js.map +0 -1
- package/dist/ValueWidget-Cu7hgKja.cjs +0 -2
- package/dist/ValueWidget-Cu7hgKja.cjs.map +0 -1
- package/dist/Widget-ChoIB2dd.cjs +0 -2
- package/dist/Widget-ChoIB2dd.cjs.map +0 -1
- package/dist/Widget-oyqWpFXJ.js.map +0 -1
- package/dist/WidgetComponents-C1lSLZ0I.js.map +0 -1
- package/dist/WidgetComponents-utpQ592X.cjs +0 -1493
- package/dist/WidgetComponents-utpQ592X.cjs.map +0 -1
- package/dist/index-BX05anye.cjs +0 -7
- package/dist/index-BX05anye.cjs.map +0 -1
- package/dist/index-DwP8ryNM.js.map +0 -1
- package/dist/timeFilters-8SaYvcH0.cjs +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Openc3Screen-Cud0OCFu.js","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 2024 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 persistent v-model=\"show\" width=\"75vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"delete-screen-icon\" @click=\"deleteScreen\">\n mdi-delete\n </v-icon>\n </div>\n </template>\n <span> Delete Screen </span>\n </v-tooltip>\n </div>\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n >\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download Screen </span>\n </v-tooltip>\n </div>\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 @click=\"loadFile\"\n :disabled=\"!file\"\n color=\"primary\"\n class=\"mr-3\"\n data-test=\"edit-screen-load\"\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\"></span>\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.</span\n >\n <v-spacer />\n <v-btn\n @click=\"$emit('cancel')\"\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click=\"$emit('save', editor.getValue())\"\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\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 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.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 v-on: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 v-slot:item.actions=\"{ item }\">\n <v-btn\n @click=\"deleteEnvironment(item)\"\n icon\n class=\"mt-1\"\n data-test=\"item-delete\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\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 @click.prevent=\"addEnvironment\"\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\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 @click=\"handleClick(node)\" class=\"node-content\" v-if=\"showNode\">\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\n @click=\"emit('delete')\"\n style=\"margin-left: auto\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\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.path = 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.path = !isOpen.path\n props.node.isOpen = isOpen.path\n emit('nodeToggled', props.node.id, isOpen.path)\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 v-on: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 class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n v-show=\"error\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"show = false\"\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click.prevent=\"success\"\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 >\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 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# 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 :style=\"computedStyle\" ref=\"bar\">\n <v-card v-if=\"!inline\" :min-height=\"height\" :min-width=\"width\" style=\"cursor: default\">\n <v-toolbar height=\"24\">\n <div v-show=\"errors.length !== 0\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"error-graph-icon\"\n @click=\"errorDialog = true\"\n >\n mdi-alert\n </v-icon>\n </div>\n </template>\n <span> Errors </span>\n </v-tooltip>\n </div>\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"edit-screen-icon\" @click=\"openEdit\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit Screen </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"!fixFloated\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"float-screen-icon\" @click=\"floatScreen\">\n {{ floated ? 'mdi-balloon' : 'mdi-view-grid-outline' }}\n </v-icon>\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"floated\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"up-screen-icon\" @click=\"upScreen\">\n mdi-arrow-up\n </v-icon>\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"floated && zIndex > minZ\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"down-screen-icon\" @click=\"downScreen\">\n mdi-arrow-down\n </v-icon>\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-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize Screen </span>\n <span v-show=\"!expand\"> Maximize Screen </span>\n </v-tooltip>\n <v-tooltip v-if=\"showClose\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"close-screen-icon\"\n @click=\"$emit('close-screen')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close Screen </span>\n </v-tooltip>\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n class=\"pa-1\"\n style=\"position: relative\"\n ref=\"screen\"\n v-show=\"expand\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n v-on:add-item=\"addItem\"\n v-on:delete-item=\"deleteItem\"\n v-on:open=\"open\"\n v-on:close=\"close\"\n v-on:close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <div\n class=\"pa-1\"\n style=\"position: relative\"\n v-if=\"inline\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n v-on:add-item=\"addItem\"\n v-on:delete-item=\"deleteItem\"\n v-on:open=\"open\"\n v-on:close=\"close\"\n v-on: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($event)\"\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 mixins: [WidgetComponents],\n components: {\n EditScreenDialog,\n },\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 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 watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\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 // 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 // eslint-disable-next-line no-console\n console.log({ err, vm, info })\n if (this.errors.length < MAX_ERRORS) {\n // eslint-disable-next-line no-console\n console.log({ errors: this.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 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.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 widget.settings.push(setting.slice(1))\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.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","_hoisted_2","_hoisted_3","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_createElementVNode","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps","_component_v_icon","_createTextVNode","_component_v_spacer","_toDisplayString","$props","_component_v_card_text","_component_v_row","_component_v_btn","$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","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","_withKeys","_component_v_overlay","_component_v_progress_circular","_component_tree_node","MAX_ERRORS","WidgetComponents","EditScreenDialog","uniqueId","newValue","oldValue","style","origWidth","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","data","existing","values","i","valueId","_normalizeStyle","_createCommentVNode","_vShow","_withDirectives","_component_v_expand_transition","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const n=require("./WidgetComponents-utpQ592X.cjs"),e=require("vue"),b=require("./CustomIcon-Bop2mEnu.cjs"),p={methods:{buildLanguageMode(o,t){let i=n.aceExports.require("ace/lib/oop"),a=Object.getOwnPropertyNames(n.hi.prototype).filter(s=>s!=="constructor").filter(s=>s!=="exec").concat(["check","check_raw","check_formatted","check_with_units","check_exception","check_tolerance","check_expression","wait","wait_tolerance","wait_expression","wait_check","wait_check_tolerance","wait_check_expression","wait_packet","wait_check_packet","disable_instrumentation","set_line_delay","get_line_delay","set_max_output","get_max_output"]),l=new RegExp(`(\\b${a.join("\\b|\\b")}\\b)`),r=function(){o.call(this);for(let s in this.$rules)this.$rules[s].unshift({regex:l,token:"support.function"})};i.inherits(r,o);let d=n.aceExports.require("ace/mode/matching_brace_outdent").MatchingBraceOutdent,u=n.aceExports.require("ace/mode/behaviour/cstyle").CstyleBehaviour;return[i,function(){this.HighlightRules=r,this.$outdent=new d,this.$behaviour=new u,this.foldingRules=new t,this.indentKeywords=this.foldingRules.indentKeywords}]},buildRubyMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/ruby_highlight_rules").RubyHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/ruby").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildPythonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/python_highlight_rules").PythonHighlightRules,n.aceExports.require("ace/mode/folding/pythonic").FoldMode);let i=n.aceExports.require("ace/mode/python").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildJsonMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/json_highlight_rules").JsonHighlightRules,n.aceExports.require("ace/mode/folding/ruby").FoldMode);let i=n.aceExports.require("ace/mode/json").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t},buildMarkdownMode(){const[o,t]=this.buildLanguageMode(n.aceExports.require("ace/mode/markdown_highlight_rules").MarkdownHighlightRules,n.aceExports.require("ace/mode/folding/markdown").FoldMode);let i=n.aceExports.require("ace/mode/markdown").Mode;return o.inherits(t,i),(function(){this.$id="ace/mode/openc3"}).call(t.prototype),t}}},x={props:{content:{type:String,required:!0},type:String,name:String,modelValue:Boolean,filename:{type:String,required:!1}},mixins:[p],data(){return{editor:null,mode:null}},mounted(){this.editor=ace.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");let o=null;switch(this.filename?this.filename.split(".").pop():"txt"){case"json":const i=this.buildJsonMode();o=new i,this.editor.setOptions({useWorker:!1});break;case"py":case"pyi":const a=this.buildPythonMode();o=new a;break;case"md":const l=this.buildMarkdownMode();o=new l;break;default:const r=this.buildRubyMode();o=new r;break}this.editor.session.setMode(o),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.content),this.editor.clearSelection(),this.editor.focus(),this.editor.setReadOnly(!0)},beforeUnmount(){this.editor&&this.editor.destroy()},computed:{show:{get(){return this.modelValue},set(o){this.$emit("update:modelValue",o)}},title:function(){return`${this.type}: ${this.name}`}},methods:{close:function(){this.show=!this.show},download:function(){const o=new Blob([this.editor.getValue()],{type:"text/plain"});let t=`${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`;this.filename&&(t=this.filename);const i=document.createElement("a");i.href=URL.createObjectURL(o),i.setAttribute("download",t),i.click()}}},M=["textContent"],y={class:"mx-2"},v={class:"editor",ref:"editor"};function k(o,t,i,a,l,r){const d=e.resolveComponent("v-spacer"),u=e.resolveComponent("v-icon"),h=e.resolveComponent("v-tooltip"),s=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),g=e.resolveComponent("v-card-actions"),w=e.resolveComponent("v-card"),f=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(f,{modelValue:r.show,"onUpdate:modelValue":t[1]||(t[1]=c=>r.show=c),width:"85vw"},{default:e.withCtx(()=>[e.createVNode(w,null,{default:e.withCtx(()=>[e.createVNode(s,{height:"24"},{default:e.withCtx(()=>[e.createVNode(d),e.createElementVNode("span",{textContent:e.toDisplayString(r.title)},null,8,M),e.createVNode(d),e.createElementVNode("div",y,[e.createVNode(h,{location:"top"},{activator:e.withCtx(({props:c})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(c)),[e.createVNode(u,{"data-test":"downloadIcon",onClick:r.download},{default:e.withCtx(()=>t[2]||(t[2]=[e.createTextVNode(" mdi-download ")])),_:1},8,["onClick"])],16)]),default:e.withCtx(()=>[t[3]||(t[3]=e.createElementVNode("span",null," Download ",-1))]),_:1})])]),_:1}),e.createVNode(m,null,{default:e.withCtx(()=>[e.createElementVNode("pre",v,null,512)]),_:1}),e.createVNode(g,{class:"pr-6 pb-4 pt-0"},{default:e.withCtx(()=>[e.createVNode(d),e.createVNode(_,{variant:"flat",onClick:t[0]||(t[0]=c=>r.show=!r.show)},{default:e.withCtx(()=>t[4]||(t[4]=[e.createTextVNode(" Ok ")])),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const C=b._export_sfc(x,[["render",k],["__scopeId","data-v-35a62559"]]);exports.AceEditorModes=p;exports.OutputDialog=C;
|
|
2
|
-
//# sourceMappingURL=OutputDialog-DXoL9VPw.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OutputDialog-DXoL9VPw.cjs","sources":["../src/components/ace/AceEditorModes.js","../src/components/OutputDialog.vue"],"sourcesContent":["/*\n# Copyright 2024 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 * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-markdown'\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 { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n buildLanguageMode(HighlightRules, FoldMode) {\n let oop = ace.require('ace/lib/oop')\n let apis = Object.getOwnPropertyNames(OpenC3Api.prototype)\n .filter((a) => a !== 'constructor')\n .filter((a) => a !== 'exec')\n // Add the Public apis in api_shared but not in OpenC3Api\n .concat([\n 'check',\n 'check_raw',\n 'check_formatted',\n 'check_with_units',\n 'check_exception',\n 'check_tolerance',\n 'check_expression',\n 'wait',\n 'wait_tolerance',\n 'wait_expression',\n 'wait_check',\n 'wait_check_tolerance',\n 'wait_check_expression',\n 'wait_packet',\n 'wait_check_packet',\n 'disable_instrumentation',\n 'set_line_delay',\n 'get_line_delay',\n 'set_max_output',\n 'get_max_output',\n ])\n let regex = new RegExp(`(\\\\b${apis.join('\\\\b|\\\\b')}\\\\b)`)\n let OpenC3HighlightRules = function () {\n HighlightRules.call(this)\n // add openc3 rules to the rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(OpenC3HighlightRules, HighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n return [oop, Mode]\n },\n buildRubyMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/ruby_highlight_rules').RubyHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildPythonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/python_highlight_rules').PythonHighlightRules,\n ace.require('ace/mode/folding/pythonic').FoldMode,\n )\n let PythonMode = ace.require('ace/mode/python').Mode\n oop.inherits(Mode, PythonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildJsonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/json_highlight_rules').JsonHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let JsonMode = ace.require('ace/mode/json').Mode\n oop.inherits(Mode, JsonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildMarkdownMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/markdown_highlight_rules').MarkdownHighlightRules,\n ace.require('ace/mode/folding/markdown').FoldMode,\n )\n let MarkdownMode = ace.require('ace/mode/markdown').Mode\n oop.inherits(Mode, MarkdownMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"85vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"downloadIcon\" @click=\"download\">\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download </span>\n </v-tooltip>\n </div>\n </v-toolbar>\n <v-card-text>\n <pre class=\"editor\" ref=\"editor\"></pre>\n </v-card-text>\n <v-card-actions class=\"pr-6 pb-4 pt-0\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { AceEditorModes } from './ace'\n\nexport default {\n props: {\n content: {\n type: String,\n required: true,\n },\n type: String,\n name: String,\n modelValue: Boolean,\n filename: {\n type: String,\n required: false,\n },\n },\n mixins: [AceEditorModes],\n data() {\n return {\n editor: null,\n mode: null,\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n let languageMode = null\n const fileExtension = this.filename ? this.filename.split('.').pop() : 'txt'\n switch (fileExtension) {\n case 'json':\n const JsonMode = this.buildJsonMode()\n languageMode = new JsonMode()\n this.editor.setOptions({\n useWorker: false,\n })\n break\n case 'py':\n case 'pyi':\n const PythonMode = this.buildPythonMode()\n languageMode = new PythonMode()\n break\n case 'md':\n const MarkdownMode = this.buildMarkdownMode()\n languageMode = new MarkdownMode()\n break\n default:\n // Most of the COSMOS text files are best display in Ruby\n // This includes Rakefiles, Gemfiles, etc.\n const RubyMode = this.buildRubyMode()\n languageMode = new RubyMode()\n break\n }\n this.editor.session.setMode(languageMode)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n this.editor.focus()\n this.editor.setReadOnly(true)\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\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 return `${this.type}: ${this.name}`\n },\n },\n methods: {\n close: function () {\n this.show = !this.show\n },\n download: 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 let filename = `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`\n if (this.filename) {\n filename = this.filename\n }\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', filename)\n link.click()\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 75vh;\n position: relative;\n font-size: 16px;\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["AceEditorModes","HighlightRules","FoldMode","oop","ace.require","apis","OpenC3Api","a","regex","OpenC3HighlightRules","rule","MatchingBraceOutdent","CstyleBehaviour","Mode","RubyMode","PythonMode","JsonMode","MarkdownMode","_sfc_main","languageMode","value","blob","filename","link","_hoisted_1","_hoisted_2","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps","_component_v_icon","_createTextVNode","_component_v_card_text","_hoisted_3","_component_v_card_actions","_component_v_btn"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OutputDialog-zVPZiZay.js","sources":["../src/components/ace/AceEditorModes.js","../src/components/OutputDialog.vue"],"sourcesContent":["/*\n# Copyright 2024 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 * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-python'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/mode-markdown'\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 { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n methods: {\n buildLanguageMode(HighlightRules, FoldMode) {\n let oop = ace.require('ace/lib/oop')\n let apis = Object.getOwnPropertyNames(OpenC3Api.prototype)\n .filter((a) => a !== 'constructor')\n .filter((a) => a !== 'exec')\n // Add the Public apis in api_shared but not in OpenC3Api\n .concat([\n 'check',\n 'check_raw',\n 'check_formatted',\n 'check_with_units',\n 'check_exception',\n 'check_tolerance',\n 'check_expression',\n 'wait',\n 'wait_tolerance',\n 'wait_expression',\n 'wait_check',\n 'wait_check_tolerance',\n 'wait_check_expression',\n 'wait_packet',\n 'wait_check_packet',\n 'disable_instrumentation',\n 'set_line_delay',\n 'get_line_delay',\n 'set_max_output',\n 'get_max_output',\n ])\n let regex = new RegExp(`(\\\\b${apis.join('\\\\b|\\\\b')}\\\\b)`)\n let OpenC3HighlightRules = function () {\n HighlightRules.call(this)\n // add openc3 rules to the rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(OpenC3HighlightRules, HighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n return [oop, Mode]\n },\n buildRubyMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/ruby_highlight_rules').RubyHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildPythonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/python_highlight_rules').PythonHighlightRules,\n ace.require('ace/mode/folding/pythonic').FoldMode,\n )\n let PythonMode = ace.require('ace/mode/python').Mode\n oop.inherits(Mode, PythonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildJsonMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/json_highlight_rules').JsonHighlightRules,\n ace.require('ace/mode/folding/ruby').FoldMode,\n )\n let JsonMode = ace.require('ace/mode/json').Mode\n oop.inherits(Mode, JsonMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n buildMarkdownMode() {\n const [oop, Mode] = this.buildLanguageMode(\n ace.require('ace/mode/markdown_highlight_rules').MarkdownHighlightRules,\n ace.require('ace/mode/folding/markdown').FoldMode,\n )\n let MarkdownMode = ace.require('ace/mode/markdown').Mode\n oop.inherits(Mode, MarkdownMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"85vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"downloadIcon\" @click=\"download\">\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download </span>\n </v-tooltip>\n </div>\n </v-toolbar>\n <v-card-text>\n <pre class=\"editor\" ref=\"editor\"></pre>\n </v-card-text>\n <v-card-actions class=\"pr-6 pb-4 pt-0\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { AceEditorModes } from './ace'\n\nexport default {\n props: {\n content: {\n type: String,\n required: true,\n },\n type: String,\n name: String,\n modelValue: Boolean,\n filename: {\n type: String,\n required: false,\n },\n },\n mixins: [AceEditorModes],\n data() {\n return {\n editor: null,\n mode: null,\n }\n },\n mounted() {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n let languageMode = null\n const fileExtension = this.filename ? this.filename.split('.').pop() : 'txt'\n switch (fileExtension) {\n case 'json':\n const JsonMode = this.buildJsonMode()\n languageMode = new JsonMode()\n this.editor.setOptions({\n useWorker: false,\n })\n break\n case 'py':\n case 'pyi':\n const PythonMode = this.buildPythonMode()\n languageMode = new PythonMode()\n break\n case 'md':\n const MarkdownMode = this.buildMarkdownMode()\n languageMode = new MarkdownMode()\n break\n default:\n // Most of the COSMOS text files are best display in Ruby\n // This includes Rakefiles, Gemfiles, etc.\n const RubyMode = this.buildRubyMode()\n languageMode = new RubyMode()\n break\n }\n this.editor.session.setMode(languageMode)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n this.editor.focus()\n this.editor.setReadOnly(true)\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\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 return `${this.type}: ${this.name}`\n },\n },\n methods: {\n close: function () {\n this.show = !this.show\n },\n download: 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 let filename = `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`\n if (this.filename) {\n filename = this.filename\n }\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', filename)\n link.click()\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 75vh;\n position: relative;\n font-size: 16px;\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["AceEditorModes","HighlightRules","FoldMode","oop","ace.require","apis","OpenC3Api","a","regex","OpenC3HighlightRules","rule","MatchingBraceOutdent","CstyleBehaviour","Mode","RubyMode","PythonMode","JsonMode","MarkdownMode","_sfc_main","languageMode","value","blob","filename","link","_hoisted_1","_hoisted_2","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_createElementVNode","_toDisplayString","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps","_component_v_icon","_createTextVNode","_component_v_card_text","_hoisted_3","_component_v_card_actions","_component_v_btn"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./WidgetComponents-utpQ592X.cjs"),e=require("vue"),P=require("./CustomIcon-Bop2mEnu.cjs");require("single-spa");const D=require("./SimpleTextDialog-Cpbt7Q-8.cjs"),T=require("./tools/admin.cjs"),w=require("./format-B22VpiOS.cjs"),b={components:{DownloadDialog:T.DownloadDialog,SimpleTextDialog:D.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(){u.oi.get("/openc3-api/packages").then(n=>{this.gems=n.data.ruby,this.python=n.data.python})},updateProcesses:function(){u.oi.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 w.format(w.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 C=this;const x=[...t].map(l=>{const a=new FormData;return a.append("package",l,l.name),u.oi.post("/openc3-api/packages",{data:a,headers:{"Content-Type":"multipart/form-data"},onUploadProgress:function(i){let s=Math.round(i.loaded*100/i.total);C.progress=s}})});Promise.all(x).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=>u.oi.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"],S=["textContent"];function O(n,t,C,x,l,a){const i=e.resolveComponent("v-btn"),s=e.resolveComponent("v-col"),v=e.resolveComponent("rux-progress"),d=e.resolveComponent("v-row"),p=e.resolveComponent("v-list-item-title"),V=e.resolveComponent("v-list-item-subtitle"),m=e.resolveComponent("v-icon"),g=e.resolveComponent("v-tooltip"),f=e.resolveComponent("v-list-item"),h=e.resolveComponent("v-divider"),_=e.resolveComponent("v-list"),k=e.resolveComponent("download-dialog"),N=e.resolveComponent("simple-text-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(d,{"no-gutters":"",align:"center",class:"px-2"},{default:e.withCtx(()=>[e.createVNode(s,{class:"pa-2 mt-2"},{default:e.withCtx(()=>[e.createVNode(i,{onClick:a.selectFile},{default:e.withCtx(()=>t[3]||(t[3]=[e.createTextVNode("Install Package")])),_:1},8,["onClick"]),e.createElementVNode("input",{style:{display:"none"},type:"file",ref:"fileInput",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(v,{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(d,{"no-gutters":"",class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[4]||(t[4]=[e.createTextVNode("Process List")])),_:1}),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(f,null,e.createSlots({default:e.withCtx(()=>[e.createVNode(p,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,S)]),_:2},1024)]),_:2},[o.state!=="Running"?{name:"append",fn:e.withCtx(()=>[e.createVNode(g,{location:"top"},{activator:e.withCtx(({props:r})=>[e.createVNode(m,e.mergeProps({ref_for:!0},r,{onClick:c=>a.showOutput(o)}),{default:e.withCtx(()=>t[6]||(t[6]=[e.createTextVNode(" mdi-eye ")])),_:2},1040,["onClick"])]),default:e.withCtx(()=>[t[7]||(t[7]=e.createElementVNode("span",null,"Show Output",-1))]),_:2},1024)]),key:"0"}:void 0]),1024),e.createVNode(h)]))),128))]),_:1})):e.createCommentVNode("",!0),e.createVNode(_,{class:"list","data-test":"packageList"},{default:e.withCtx(()=>[e.createVNode(d,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[8]||(t[8]=[e.createTextVNode("Ruby Gems")])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.gems,(o,r)=>(e.openBlock(),e.createElementBlock("div",{key:r},[e.createVNode(f,null,{append:e.withCtx(()=>[e.createVNode(g,{location:"top"},{activator:e.withCtx(({props:c})=>[e.createVNode(m,e.mergeProps({ref_for:!0},c,{onClick:y=>a.deletePackage(o)}),{default:e.withCtx(()=>t[9]||(t[9]=[e.createTextVNode(" mdi-delete ")])),_:2},1040,["onClick"])]),default:e.withCtx(()=>[t[10]||(t[10]=e.createElementVNode("span",null,"Delete Package",-1))]),_:2},1024)]),default:e.withCtx(()=>[e.createVNode(p,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(h)]))),128)),e.createVNode(d,{class:"px-4"},{default:e.withCtx(()=>[e.createVNode(s,{class:"text-h6"},{default:e.withCtx(()=>t[11]||(t[11]=[e.createTextVNode("Python Packages")])),_:1})]),_:1}),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.python,(o,r)=>(e.openBlock(),e.createElementBlock("div",{key:r},[e.createVNode(f,null,{append:e.withCtx(()=>[e.createVNode(g,{location:"top"},{activator:e.withCtx(({props:c})=>[e.createVNode(m,e.mergeProps({ref_for:!0},c,{onClick:y=>a.deletePackage(o)}),{default:e.withCtx(()=>t[12]||(t[12]=[e.createTextVNode(" mdi-delete ")])),_:2},1040,["onClick"])]),default:e.withCtx(()=>[t[13]||(t[13]=e.createElementVNode("span",null,"Delete Package",-1))]),_:2},1024)]),default:e.withCtx(()=>[e.createVNode(p,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o),1)]),_:2},1024)]),_:2},1024),e.createVNode(h)]))),128))]),_:1}),e.createVNode(k,{modelValue:l.showDownloadDialog,"onUpdate:modelValue":t[1]||(t[1]=o=>l.showDownloadDialog=o)},null,8,["modelValue"]),e.createVNode(N,{modelValue:l.showProcessOutput,"onUpdate:modelValue":t[2]||(t[2]=o=>l.showProcessOutput=o),title:"Process Output",text:l.processOutput},null,8,["modelValue","text"])])}const E=P._export_sfc(b,[["render",O],["__scopeId","data-v-a9a7750b"]]);exports.default=E;
|
|
2
|
-
//# sourceMappingURL=PackagesTab-CvT2JyMA.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PackagesTab-CvT2JyMA.cjs","sources":["../src/tools/admin/tabs/PackagesTab.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 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-row no-gutters align=\"center\" class=\"px-2\">\n <v-col class=\"pa-2 mt-2\">\n <v-btn @click=\"selectFile\">Install Package</v-btn>\n <input\n style=\"display: none\"\n type=\"file\"\n ref=\"fileInput\"\n @change=\"fileChange\"\n />\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-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 v-slot:append v-if=\"process.state !== 'Running'\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"showOutput(process)\">\n mdi-eye\n </v-icon>\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=\"packageList\">\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Ruby Gems</v-col></v-row>\n <div v-for=\"(gem, index) in gems\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ gem }}</v-list-item-title>\n\n <template v-slot:append>\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"deletePackage(gem)\">\n mdi-delete\n </v-icon>\n </template>\n <span>Delete Package</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n <v-row class=\"px-4\"><v-col class=\"text-h6\">Python Packages</v-col></v-row>\n <div v-for=\"(pkg, index) in python\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ pkg }}</v-list-item-title>\n\n <template v-slot:append>\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <v-icon v-bind=\"props\" @click=\"deletePackage(pkg)\">\n mdi-delete\n </v-icon>\n </template>\n <span>Delete Package</span>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\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 { DownloadDialog } from '@/tools/admin'\n\nexport default {\n components: {\n DownloadDialog,\n SimpleTextDialog,\n },\n data() {\n return {\n showDownloadDialog: false,\n showProcessOutput: false,\n processOutput: '',\n files: [],\n loadingPackage: false,\n progress: 0,\n gems: [],\n python: [],\n processes: {},\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() {\n Api.get('/openc3-api/packages').then((response) => {\n this.gems = response.data.ruby\n this.python = response.data.python\n })\n },\n updateProcesses: function () {\n Api.get('/openc3-api/process_status/package_?substr=true').then(\n (response) => {\n this.processes = response.data\n if (Object.keys(this.processes).length > 0) {\n // process_manager.rb script operates on a 5 second cycle\n setTimeout(() => {\n this.updateProcesses()\n this.update()\n }, 2500)\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 selectFile() {\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.loadingPackage = true\n let self = this\n const promises = [...files].map((file) => {\n const formData = new FormData()\n formData.append('package', file, file.name)\n return Api.post('/openc3-api/packages', {\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 })\n Promise.all(promises)\n .then((responses) => {\n this.$notify.normal({\n body: `Uploaded ${responses.length} package${\n responses.length > 1 ? 's' : ''\n }`,\n })\n this.loadingPackage = false\n this.files = []\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n .catch((error) => {\n this.loadingPackage = false\n })\n }\n },\n deletePackage(pkg) {\n this.$dialog\n .confirm(`Are you sure you want to remove: ${pkg}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/packages/${pkg}`)\n })\n .then((response) => {\n this.$notify.normal({\n body: `Removed package ${pkg}`,\n })\n setTimeout(() => {\n this.updateProcesses()\n }, 2500)\n })\n // Error will probably never happen because we spawn the package removal\n // and then wait for the response which happens in the background\n .catch((error) => {\n this.$notify.serious({\n body: `Failed to remove package ${pkg}`,\n })\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-subheader {\n font-size: 1rem;\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","DownloadDialog","SimpleTextDialog","process","Api","response","nanoSecs","format","toDate","event","files","self","promises","file","formData","progressEvent","percentCompleted","responses","error","pkg","dialog","_hoisted_1","_hoisted_2","_createElementBlock","_createVNode","_component_v_row","_withCtx","_component_v_col","_component_v_btn","$options","_cache","_createTextVNode","_createElementVNode","args","_component_rux_progress","$data","_createBlock","_component_v_list","_openBlock","_Fragment","_renderList","_component_v_list_item","_createSlots","_component_v_list_item_title","_normalizeClass","_toDisplayString","_component_v_list_item_subtitle","_component_v_tooltip","props","_component_v_icon","_mergeProps","$event","_component_v_divider","_createCommentVNode","gem","index","_component_download_dialog","_component_simple_text_dialog"],"mappings":"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"}
|