@openc3/vue-common 6.6.0 → 6.7.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-Ck6pzAyW.js → ArrayWidget-BSG8KEtf.js} +4 -4
- package/dist/{ArrayWidget-Ck6pzAyW.js.map → ArrayWidget-BSG8KEtf.js.map} +1 -1
- package/dist/{ArrayWidget-Bb_Ldxq7.cjs → ArrayWidget-B__t3xOt.cjs} +2 -2
- package/dist/{ArrayWidget-Bb_Ldxq7.cjs.map → ArrayWidget-B__t3xOt.cjs.map} +1 -1
- package/dist/ArrayplotWidget-BduWyJlL.cjs +2 -0
- package/dist/ArrayplotWidget-BduWyJlL.cjs.map +1 -0
- package/dist/{ArrayplotWidget-ntRLh6-B.js → ArrayplotWidget-WVu76Kqn.js} +22 -22
- package/dist/ArrayplotWidget-WVu76Kqn.js.map +1 -0
- package/dist/{BarColumn-Bgz2YJ59.js → BarColumn-Cflh9pUz.js} +3 -3
- package/dist/{BarColumn-Bgz2YJ59.js.map → BarColumn-Cflh9pUz.js.map} +1 -1
- package/dist/{BarColumn-DtRNuOpa.cjs → BarColumn-DVn9f2WO.cjs} +2 -2
- package/dist/{BarColumn-DtRNuOpa.cjs.map → BarColumn-DVn9f2WO.cjs.map} +1 -1
- package/dist/{BlockWidget-DGH3Zz5p.js → BlockWidget-B7ryWGCq.js} +4 -4
- package/dist/{BlockWidget-DGH3Zz5p.js.map → BlockWidget-B7ryWGCq.js.map} +1 -1
- package/dist/{BlockWidget-DOY5lVfa.cjs → BlockWidget-CRqA09Ve.cjs} +2 -2
- package/dist/{BlockWidget-DOY5lVfa.cjs.map → BlockWidget-CRqA09Ve.cjs.map} +1 -1
- package/dist/{ButtonWidget-D_tupiPB.js → ButtonWidget-BKih3ix9.js} +17 -13
- package/dist/{ButtonWidget-D_tupiPB.js.map → ButtonWidget-BKih3ix9.js.map} +1 -1
- package/dist/{ButtonWidget-CFyZXGt6.cjs → ButtonWidget-Bb46aUCR.cjs} +3 -3
- package/dist/{ButtonWidget-CFyZXGt6.cjs.map → ButtonWidget-Bb46aUCR.cjs.map} +1 -1
- package/dist/{CanvasWidget-CzG2jYQb.js → CanvasWidget-DT9xMSfb.js} +2 -2
- package/dist/{CanvasWidget-CzG2jYQb.js.map → CanvasWidget-DT9xMSfb.js.map} +1 -1
- package/dist/{CanvasWidget-C6dc7mUw.cjs → CanvasWidget-DT_vPAoc.cjs} +2 -2
- package/dist/{CanvasWidget-C6dc7mUw.cjs.map → CanvasWidget-DT_vPAoc.cjs.map} +1 -1
- package/dist/{CanvasdotWidget-0FAaw4G2.js → CanvasdotWidget-7H5Hvcn-.js} +2 -2
- package/dist/{CanvasdotWidget-0FAaw4G2.js.map → CanvasdotWidget-7H5Hvcn-.js.map} +1 -1
- package/dist/{CanvasdotWidget-9bBVHC1l.cjs → CanvasdotWidget-DNSQriVo.cjs} +2 -2
- package/dist/{CanvasdotWidget-9bBVHC1l.cjs.map → CanvasdotWidget-DNSQriVo.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-CNJlzLqo.js → CanvasimageWidget-BbWYx6Gj.js} +3 -3
- package/dist/{CanvasimageWidget-CNJlzLqo.js.map → CanvasimageWidget-BbWYx6Gj.js.map} +1 -1
- package/dist/{CanvasimageWidget-DjvdDCRS.cjs → CanvasimageWidget-CfleScIF.cjs} +2 -2
- package/dist/{CanvasimageWidget-DjvdDCRS.cjs.map → CanvasimageWidget-CfleScIF.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-DudwwOD6.js → CanvasimagevalueWidget-Blvoe2X4.js} +3 -3
- package/dist/{CanvasimagevalueWidget-DudwwOD6.js.map → CanvasimagevalueWidget-Blvoe2X4.js.map} +1 -1
- package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs → CanvasimagevalueWidget-ouM4DBeD.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-C1fI-ftP.cjs.map → CanvasimagevalueWidget-ouM4DBeD.cjs.map} +1 -1
- package/dist/{CanvaslabelWidget-BZQp16dH.js → CanvaslabelWidget-BPx_Rm4o.js} +2 -2
- package/dist/{CanvaslabelWidget-BZQp16dH.js.map → CanvaslabelWidget-BPx_Rm4o.js.map} +1 -1
- package/dist/{CanvaslabelWidget--6Sjc4E8.cjs → CanvaslabelWidget-DB3qox5N.cjs} +2 -2
- package/dist/{CanvaslabelWidget--6Sjc4E8.cjs.map → CanvaslabelWidget-DB3qox5N.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs → CanvaslabelvalueWidget-2k6TjSNj.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-DZCxsIKk.cjs.map → CanvaslabelvalueWidget-2k6TjSNj.cjs.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-CHS36Te9.js → CanvaslabelvalueWidget-DzdWvL0W.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-CHS36Te9.js.map → CanvaslabelvalueWidget-DzdWvL0W.js.map} +1 -1
- package/dist/{CanvaslineWidget-nhKEAGhs.js → CanvaslineWidget-CqskilGk.js} +2 -2
- package/dist/{CanvaslineWidget-nhKEAGhs.js.map → CanvaslineWidget-CqskilGk.js.map} +1 -1
- package/dist/{CanvaslineWidget-Bn83Rb10.cjs → CanvaslineWidget-oAoznYZP.cjs} +2 -2
- package/dist/{CanvaslineWidget-Bn83Rb10.cjs.map → CanvaslineWidget-oAoznYZP.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs → CanvaslinevalueWidget-BmyIxGNz.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-C6x_4Gc9.cjs.map → CanvaslinevalueWidget-BmyIxGNz.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-DsyIDkJy.js → CanvaslinevalueWidget-C0JIKdvZ.js} +2 -2
- package/dist/{CanvaslinevalueWidget-DsyIDkJy.js.map → CanvaslinevalueWidget-C0JIKdvZ.js.map} +1 -1
- package/dist/{CheckbuttonWidget-BvggsGZY.cjs → CheckbuttonWidget-C548xrRy.cjs} +2 -2
- package/dist/{CheckbuttonWidget-BvggsGZY.cjs.map → CheckbuttonWidget-C548xrRy.cjs.map} +1 -1
- package/dist/{CheckbuttonWidget-DCam7Jd0.js → CheckbuttonWidget-C9FbJx2v.js} +2 -2
- package/dist/{CheckbuttonWidget-DCam7Jd0.js.map → CheckbuttonWidget-C9FbJx2v.js.map} +1 -1
- package/dist/ClassificationBanners-BTdLBSfy.cjs +2 -0
- package/dist/ClassificationBanners-BTdLBSfy.cjs.map +1 -0
- package/dist/ClassificationBanners-CgJiwgTp.js +35 -0
- package/dist/ClassificationBanners-CgJiwgTp.js.map +1 -0
- package/dist/{ComboboxWidget-BS5WSbrK.cjs → ComboboxWidget-AErojGw0.cjs} +2 -2
- package/dist/{ComboboxWidget-BS5WSbrK.cjs.map → ComboboxWidget-AErojGw0.cjs.map} +1 -1
- package/dist/{ComboboxWidget-ZX-k-_aK.js → ComboboxWidget-BbNKT0s8.js} +2 -2
- package/dist/{ComboboxWidget-ZX-k-_aK.js.map → ComboboxWidget-BbNKT0s8.js.map} +1 -1
- package/dist/{CriticalCmdDialog-Dylpoz_4.js → CriticalCmdDialog-CF7Sqjdm.js} +11 -8
- package/dist/{CriticalCmdDialog-Dylpoz_4.js.map → CriticalCmdDialog-CF7Sqjdm.js.map} +1 -1
- package/dist/CriticalCmdDialog-N06JxCHg.cjs +2 -0
- package/dist/{CriticalCmdDialog-7tOK2XQk.cjs.map → CriticalCmdDialog-N06JxCHg.cjs.map} +1 -1
- package/dist/CustomIcon-Bop2mEnu.cjs.map +1 -1
- package/dist/CustomIcon-h5X7369N.js.map +1 -1
- package/dist/{DateWidget-DuJ5uC2t.js → DateWidget-CBMsdRUE.js} +2 -2
- package/dist/{DateWidget-DuJ5uC2t.js.map → DateWidget-CBMsdRUE.js.map} +1 -1
- package/dist/{DateWidget-jejbk2-G.cjs → DateWidget-CCIkDM9_.cjs} +2 -2
- package/dist/{DateWidget-jejbk2-G.cjs.map → DateWidget-CCIkDM9_.cjs.map} +1 -1
- package/dist/DetailsDialog-CVYBgZll.cjs +2 -0
- package/dist/DetailsDialog-CVYBgZll.cjs.map +1 -0
- package/dist/{DetailsDialog-BQE0TraI.js → DetailsDialog-DRVahE5z.js} +129 -97
- package/dist/DetailsDialog-DRVahE5z.js.map +1 -0
- package/dist/DynamicWidget-BWEVCUfd.cjs.map +1 -1
- package/dist/DynamicWidget-CfMtj7H8.js.map +1 -1
- package/dist/EventListDialog-CjYLRdkb.cjs +2 -0
- package/dist/{EventListDialog-CDcJcxy5.cjs.map → EventListDialog-CjYLRdkb.cjs.map} +1 -1
- package/dist/{EventListDialog-CGUFCrJF.js → EventListDialog-DDWL9gIQ.js} +46 -31
- package/dist/{EventListDialog-CGUFCrJF.js.map → EventListDialog-DDWL9gIQ.js.map} +1 -1
- package/dist/{FormatvalueWidget-DYICPNcx.js → FormatvalueWidget-BLWsqhIZ.js} +3 -3
- package/dist/{FormatvalueWidget-DYICPNcx.js.map → FormatvalueWidget-BLWsqhIZ.js.map} +1 -1
- package/dist/{FormatvalueWidget-wu7Q3sXu.cjs → FormatvalueWidget-BiaqheLJ.cjs} +2 -2
- package/dist/{FormatvalueWidget-wu7Q3sXu.cjs.map → FormatvalueWidget-BiaqheLJ.cjs.map} +1 -1
- package/dist/Graph-BiU56Qj2.js +2669 -0
- package/dist/Graph-BiU56Qj2.js.map +1 -0
- package/dist/Graph-CWjf71TK.cjs +2 -0
- package/dist/Graph-CWjf71TK.cjs.map +1 -0
- package/dist/{GraphWidget-cTVq29cY.js → GraphWidget-Ga0AEfrJ.js} +31 -44
- package/dist/{GraphWidget-cTVq29cY.js.map → GraphWidget-Ga0AEfrJ.js.map} +1 -1
- package/dist/GraphWidget-cfgX_skM.cjs +2 -0
- package/dist/{GraphWidget-CQjKAMPR.cjs.map → GraphWidget-cfgX_skM.cjs.map} +1 -1
- package/dist/{HorizontalWidget-v1pfd94Z.js → HorizontalWidget-CsVhLwZO.js} +6 -6
- package/dist/{HorizontalWidget-v1pfd94Z.js.map → HorizontalWidget-CsVhLwZO.js.map} +1 -1
- package/dist/HorizontalWidget-i6aqMSRv.cjs +2 -0
- package/dist/{HorizontalWidget--AkRJPlL.cjs.map → HorizontalWidget-i6aqMSRv.cjs.map} +1 -1
- package/dist/HorizontalboxWidget-B_S8mswF.cjs +2 -0
- package/dist/{HorizontalboxWidget-synL-Bar.cjs.map → HorizontalboxWidget-B_S8mswF.cjs.map} +1 -1
- package/dist/{HorizontalboxWidget-B06-c_n4.js → HorizontalboxWidget-xC6PADl3.js} +15 -15
- package/dist/{HorizontalboxWidget-B06-c_n4.js.map → HorizontalboxWidget-xC6PADl3.js.map} +1 -1
- package/dist/{HorizontallineWidget-lTr2JTFY.cjs → HorizontallineWidget-Cpys-185.cjs} +2 -2
- package/dist/{HorizontallineWidget-lTr2JTFY.cjs.map → HorizontallineWidget-Cpys-185.cjs.map} +1 -1
- package/dist/{HorizontallineWidget-DEODVJCk.js → HorizontallineWidget-NZIxmRVN.js} +2 -2
- package/dist/{HorizontallineWidget-DEODVJCk.js.map → HorizontallineWidget-NZIxmRVN.js.map} +1 -1
- package/dist/{IframeWidget-n8lNXrpt.js → IframeWidget-BgzjSfag.js} +2 -2
- package/dist/{IframeWidget-n8lNXrpt.js.map → IframeWidget-BgzjSfag.js.map} +1 -1
- package/dist/{IframeWidget-ByhwW9yG.cjs → IframeWidget-CCdvd8rg.cjs} +2 -2
- package/dist/{IframeWidget-ByhwW9yG.cjs.map → IframeWidget-CCdvd8rg.cjs.map} +1 -1
- package/dist/{ImageLoader-DBWVFtNu.cjs → ImageLoader-BIKl6vGc.cjs} +2 -2
- package/dist/{ImageLoader-DBWVFtNu.cjs.map → ImageLoader-BIKl6vGc.cjs.map} +1 -1
- package/dist/{ImageLoader-CfcErydq.js → ImageLoader-DbFVK1Ui.js} +2 -2
- package/dist/{ImageLoader-CfcErydq.js.map → ImageLoader-DbFVK1Ui.js.map} +1 -1
- package/dist/{ImageviewerWidget-DE8fj06Z.js → ImageviewerWidget-BnT5m-nw.js} +2 -2
- package/dist/{ImageviewerWidget-DE8fj06Z.js.map → ImageviewerWidget-BnT5m-nw.js.map} +1 -1
- package/dist/{ImageviewerWidget-D4mU6wLX.cjs → ImageviewerWidget-lnralJZa.cjs} +2 -2
- package/dist/{ImageviewerWidget-D4mU6wLX.cjs.map → ImageviewerWidget-lnralJZa.cjs.map} +1 -1
- package/dist/{InterfacesTab-BF-Wx5gk.js → InterfacesTab-Cd_RITVP.js} +3 -3
- package/dist/{InterfacesTab-BF-Wx5gk.js.map → InterfacesTab-Cd_RITVP.js.map} +1 -1
- package/dist/{InterfacesTab-DTAAIx-y.cjs → InterfacesTab-DjlzjJYG.cjs} +2 -2
- package/dist/{InterfacesTab-DTAAIx-y.cjs.map → InterfacesTab-DjlzjJYG.cjs.map} +1 -1
- package/dist/{LabelWidget-DQZqRxKF.cjs → LabelWidget-CRHSFVPT.cjs} +2 -2
- package/dist/{LabelWidget-DQZqRxKF.cjs.map → LabelWidget-CRHSFVPT.cjs.map} +1 -1
- package/dist/{LabelWidget-iUIJLhdA.js → LabelWidget-DSDYmz6X.js} +2 -2
- package/dist/{LabelWidget-iUIJLhdA.js.map → LabelWidget-DSDYmz6X.js.map} +1 -1
- package/dist/{LabelledWidget-9HWChRmv.cjs → LabelledWidget-BXf9cTf_.cjs} +2 -2
- package/dist/{LabelledWidget-9HWChRmv.cjs.map → LabelledWidget-BXf9cTf_.cjs.map} +1 -1
- package/dist/{LabelledWidget-KI6fMlsr.js → LabelledWidget-DMb-myxs.js} +4 -4
- package/dist/{LabelledWidget-KI6fMlsr.js.map → LabelledWidget-DMb-myxs.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-DwzTP73u.cjs → LabelprogressbarWidget-BNHaAUXq.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-DwzTP73u.cjs.map → LabelprogressbarWidget-BNHaAUXq.cjs.map} +1 -1
- package/dist/{LabelprogressbarWidget-C2lzmqBH.js → LabelprogressbarWidget-CkjDJBao.js} +4 -4
- package/dist/{LabelprogressbarWidget-C2lzmqBH.js.map → LabelprogressbarWidget-CkjDJBao.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DMjBshq8.cjs → LabelsparklineWidget-BpHMkt-L.cjs} +2 -2
- package/dist/{LabelsparklineWidget-DMjBshq8.cjs.map → LabelsparklineWidget-BpHMkt-L.cjs.map} +1 -1
- package/dist/{LabelsparklineWidget-Ci6GGm29.js → LabelsparklineWidget-DBYPFz3Y.js} +4 -4
- package/dist/{LabelsparklineWidget-Ci6GGm29.js.map → LabelsparklineWidget-DBYPFz3Y.js.map} +1 -1
- package/dist/{LabelvalueWidget-mAb0eLA8.cjs → LabelvalueWidget-BFHYb64m.cjs} +2 -2
- package/dist/{LabelvalueWidget-mAb0eLA8.cjs.map → LabelvalueWidget-BFHYb64m.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-oiW-JDw6.js → LabelvalueWidget-DlTkJC4i.js} +4 -4
- package/dist/{LabelvalueWidget-oiW-JDw6.js.map → LabelvalueWidget-DlTkJC4i.js.map} +1 -1
- package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs → LabelvaluedescWidget-CUld9MqE.cjs} +2 -2
- package/dist/{LabelvaluedescWidget-CZJ0kZN-.cjs.map → LabelvaluedescWidget-CUld9MqE.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js → LabelvaluedescWidget-dRqnGZub.js} +5 -5
- package/dist/{LabelvaluedescWidget-Ck0AJ9g0.js.map → LabelvaluedescWidget-dRqnGZub.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs → LabelvaluelimitsbarWidget-Br_PXH0r.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-DjBqYxRr.cjs.map → LabelvaluelimitsbarWidget-Br_PXH0r.cjs.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js → LabelvaluelimitsbarWidget-CS4NAPJ1.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-aaVLaejn.js.map → LabelvaluelimitsbarWidget-CS4NAPJ1.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js → LabelvaluelimitscolumnWidget-D9x4Ppv8.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-Uur6aqOg.js.map → LabelvaluelimitscolumnWidget-D9x4Ppv8.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs → LabelvaluelimitscolumnWidget-DjLG10C5.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-GputlDZq.cjs.map → LabelvaluelimitscolumnWidget-DjLG10C5.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs → LabelvaluerangebarWidget-CsUfrGAM.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-Ci-n_hxk.cjs.map → LabelvaluerangebarWidget-CsUfrGAM.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-Bs9locqu.js → LabelvaluerangebarWidget-Dhyng4-n.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-Bs9locqu.js.map → LabelvaluerangebarWidget-Dhyng4-n.js.map} +1 -1
- package/dist/Layout-DDktMnzb.cjs +2 -0
- package/dist/{Layout-kOQnicRa.cjs.map → Layout-DDktMnzb.cjs.map} +1 -1
- package/dist/{Layout-1z8iJV5-.js → Layout-mWR35VAD.js} +2 -2
- package/dist/{Layout-1z8iJV5-.js.map → Layout-mWR35VAD.js.map} +1 -1
- package/dist/LedWidget-CCQWCw80.cjs +2 -0
- package/dist/LedWidget-CCQWCw80.cjs.map +1 -0
- package/dist/{LedWidget-BN8IgAxJ.js → LedWidget-D8cq4pUv.js} +6 -6
- package/dist/LedWidget-D8cq4pUv.js.map +1 -0
- package/dist/{LimitsbarWidget-Co5GAHro.cjs → LimitsbarWidget-D4O0LWuC.cjs} +2 -2
- package/dist/{LimitsbarWidget-Co5GAHro.cjs.map → LimitsbarWidget-D4O0LWuC.cjs.map} +1 -1
- package/dist/{LimitsbarWidget-BxxoKTjp.js → LimitsbarWidget-VGJnDuVM.js} +2 -2
- package/dist/{LimitsbarWidget-BxxoKTjp.js.map → LimitsbarWidget-VGJnDuVM.js.map} +1 -1
- package/dist/{LimitscolorWidget-BpTcgqRC.cjs → LimitscolorWidget-BvxsopUs.cjs} +2 -2
- package/dist/{LimitscolorWidget-BpTcgqRC.cjs.map → LimitscolorWidget-BvxsopUs.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-DFDwf4In.js → LimitscolorWidget-CG6Pqi12.js} +2 -2
- package/dist/{LimitscolorWidget-DFDwf4In.js.map → LimitscolorWidget-CG6Pqi12.js.map} +1 -1
- package/dist/{LimitscolumnWidget-CdBh2mJu.js → LimitscolumnWidget-DjovQdiT.js} +2 -2
- package/dist/{LimitscolumnWidget-CdBh2mJu.js.map → LimitscolumnWidget-DjovQdiT.js.map} +1 -1
- package/dist/{LimitscolumnWidget-CqJJKDzz.cjs → LimitscolumnWidget-Z9JnMlDS.cjs} +2 -2
- package/dist/{LimitscolumnWidget-CqJJKDzz.cjs.map → LimitscolumnWidget-Z9JnMlDS.cjs.map} +1 -1
- package/dist/LinegraphWidget-B_ECNLzU.cjs +2 -0
- package/dist/LinegraphWidget-B_ECNLzU.cjs.map +1 -0
- package/dist/{LinegraphWidget-jXksfbPb.js → LinegraphWidget-DSWAhXgZ.js} +13 -13
- package/dist/LinegraphWidget-DSWAhXgZ.js.map +1 -0
- package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js → MatrixbycolumnsWidget-C3cuhRxz.js} +4 -4
- package/dist/{MatrixbycolumnsWidget-DCwxPjwS.js.map → MatrixbycolumnsWidget-C3cuhRxz.js.map} +1 -1
- package/dist/MatrixbycolumnsWidget-CPFzRQN5.cjs +2 -0
- package/dist/{MatrixbycolumnsWidget-DxRhvPGv.cjs.map → MatrixbycolumnsWidget-CPFzRQN5.cjs.map} +1 -1
- package/dist/{MicroservicesTab-DGaTcj-y.cjs → MicroservicesTab-BGgwT56M.cjs} +2 -2
- package/dist/{MicroservicesTab-DGaTcj-y.cjs.map → MicroservicesTab-BGgwT56M.cjs.map} +1 -1
- package/dist/{MicroservicesTab-B-SdMwek.js → MicroservicesTab-Dbp02UlV.js} +4 -4
- package/dist/{MicroservicesTab-B-SdMwek.js.map → MicroservicesTab-Dbp02UlV.js.map} +1 -1
- package/dist/Openc3Screen-BP2oW88G.cjs +6 -0
- package/dist/Openc3Screen-BP2oW88G.cjs.map +1 -0
- package/dist/{Openc3Screen-BZN0Wtrm.js → Openc3Screen-CkdegNDJ.js} +438 -310
- package/dist/Openc3Screen-CkdegNDJ.js.map +1 -0
- package/dist/{OutputDialog-CxKDhrg6.cjs → OutputDialog-2CmOBAEE.cjs} +2 -2
- package/dist/{OutputDialog-CxKDhrg6.cjs.map → OutputDialog-2CmOBAEE.cjs.map} +1 -1
- package/dist/{OutputDialog-CcSp-Uqo.js → OutputDialog-M5Xc_DqH.js} +12 -11
- package/dist/{OutputDialog-CcSp-Uqo.js.map → OutputDialog-M5Xc_DqH.js.map} +1 -1
- package/dist/PackagesTab-Dwp6g8W0.cjs +2 -0
- package/dist/{PackagesTab-B4V2n4io.cjs.map → PackagesTab-Dwp6g8W0.cjs.map} +1 -1
- package/dist/{PackagesTab-Dx25CfF0.js → PackagesTab-HQCOIGZK.js} +30 -24
- package/dist/{PackagesTab-Dx25CfF0.js.map → PackagesTab-HQCOIGZK.js.map} +1 -1
- package/dist/PluginsTab-COKDXShE.cjs +6 -0
- package/dist/PluginsTab-COKDXShE.cjs.map +1 -0
- package/dist/PluginsTab-CZApRILr.js +1288 -0
- package/dist/PluginsTab-CZApRILr.js.map +1 -0
- package/dist/{ProgressbarWidget-C0AkbX_o.cjs → ProgressbarWidget-BADSYuUN.cjs} +2 -2
- package/dist/{ProgressbarWidget-C0AkbX_o.cjs.map → ProgressbarWidget-BADSYuUN.cjs.map} +1 -1
- package/dist/{ProgressbarWidget-Cdu5nJC3.js → ProgressbarWidget-oCgAEFBO.js} +2 -2
- package/dist/{ProgressbarWidget-Cdu5nJC3.js.map → ProgressbarWidget-oCgAEFBO.js.map} +1 -1
- package/dist/{RadiobuttonWidget-DslmJO31.cjs → RadiobuttonWidget-Bklx2_Au.cjs} +2 -2
- package/dist/{RadiobuttonWidget-DslmJO31.cjs.map → RadiobuttonWidget-Bklx2_Au.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-CZZGbvdG.js → RadiobuttonWidget-D4Dak3lc.js} +2 -2
- package/dist/{RadiobuttonWidget-CZZGbvdG.js.map → RadiobuttonWidget-D4Dak3lc.js.map} +1 -1
- package/dist/{RadiogroupWidget-CQN3v8Ip.js → RadiogroupWidget-Dbe9T4fp.js} +2 -2
- package/dist/{RadiogroupWidget-CQN3v8Ip.js.map → RadiogroupWidget-Dbe9T4fp.js.map} +1 -1
- package/dist/{RadiogroupWidget-DKgBAR9E.cjs → RadiogroupWidget-Z2S2tgjG.cjs} +2 -2
- package/dist/{RadiogroupWidget-DKgBAR9E.cjs.map → RadiogroupWidget-Z2S2tgjG.cjs.map} +1 -1
- package/dist/{RangebarWidget-Tq80I5zA.cjs → RangebarWidget-C0TpxFDi.cjs} +2 -2
- package/dist/{RangebarWidget-Tq80I5zA.cjs.map → RangebarWidget-C0TpxFDi.cjs.map} +1 -1
- package/dist/{RangebarWidget-dZN9WjoZ.js → RangebarWidget-CIVrgqrW.js} +2 -2
- package/dist/{RangebarWidget-dZN9WjoZ.js.map → RangebarWidget-CIVrgqrW.js.map} +1 -1
- package/dist/{RedisTab-CkSwEwTZ.js → RedisTab-B8U-vEQZ.js} +19 -16
- package/dist/{RedisTab-CkSwEwTZ.js.map → RedisTab-B8U-vEQZ.js.map} +1 -1
- package/dist/RedisTab-cgicWb81.cjs +2 -0
- package/dist/{RedisTab-CdiSo-CO.cjs.map → RedisTab-cgicWb81.cjs.map} +1 -1
- package/dist/{RollupWidget-CHdZAUCb.cjs → RollupWidget-BEDf-mfg.cjs} +2 -2
- package/dist/{RollupWidget-CHdZAUCb.cjs.map → RollupWidget-BEDf-mfg.cjs.map} +1 -1
- package/dist/{RollupWidget-i9DnNJl6.js → RollupWidget-CH1-XNLV.js} +2 -2
- package/dist/{RollupWidget-i9DnNJl6.js.map → RollupWidget-CH1-XNLV.js.map} +1 -1
- package/dist/{RoutersTab-Cp8wM-mS.cjs → RoutersTab-BA-KlYIm.cjs} +2 -2
- package/dist/{RoutersTab-Cp8wM-mS.cjs.map → RoutersTab-BA-KlYIm.cjs.map} +1 -1
- package/dist/{RoutersTab-DiYEI1Nq.js → RoutersTab-WKa6K7B8.js} +3 -3
- package/dist/{RoutersTab-DiYEI1Nq.js.map → RoutersTab-WKa6K7B8.js.map} +1 -1
- package/dist/{ScriptChooser-Cua8ObYv.js → ScriptChooser-B5TkGuZ4.js} +2 -2
- package/dist/{ScriptChooser-Cua8ObYv.js.map → ScriptChooser-B5TkGuZ4.js.map} +1 -1
- package/dist/{ScriptChooser-BnTP6ucF.cjs → ScriptChooser-LsboGSgh.cjs} +2 -2
- package/dist/{ScriptChooser-BnTP6ucF.cjs.map → ScriptChooser-LsboGSgh.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-54GU96Ve.js → ScrollwindowWidget-BwFG6Wn8.js} +15 -15
- package/dist/ScrollwindowWidget-BwFG6Wn8.js.map +1 -0
- package/dist/ScrollwindowWidget-DWxDmpFB.cjs +2 -0
- package/dist/ScrollwindowWidget-DWxDmpFB.cjs.map +1 -0
- package/dist/{SecretsTab-DY16usGc.cjs → SecretsTab-DKX5gLH_.cjs} +2 -2
- package/dist/{SecretsTab-DY16usGc.cjs.map → SecretsTab-DKX5gLH_.cjs.map} +1 -1
- package/dist/{SecretsTab-uWRVI1EE.js → SecretsTab-Vtvbb_1U.js} +7 -5
- package/dist/{SecretsTab-uWRVI1EE.js.map → SecretsTab-Vtvbb_1U.js.map} +1 -1
- package/dist/SettingsTab-Ch52foLm.cjs +3 -0
- package/dist/SettingsTab-Ch52foLm.cjs.map +1 -0
- package/dist/SettingsTab-DilFIQ3K.js +1817 -0
- package/dist/SettingsTab-DilFIQ3K.js.map +1 -0
- package/dist/{SignalWidget-COL8kXSJ.cjs → SignalWidget-1WqQFVq9.cjs} +2 -2
- package/dist/{SignalWidget-COL8kXSJ.cjs.map → SignalWidget-1WqQFVq9.cjs.map} +1 -1
- package/dist/{SignalWidget-B_kA9eCJ.js → SignalWidget-Gz2gHrUm.js} +2 -2
- package/dist/{SignalWidget-B_kA9eCJ.js.map → SignalWidget-Gz2gHrUm.js.map} +1 -1
- package/dist/{SimpleTextDialog-BWUqPlTv.cjs → SimpleTextDialog-BwOVWhRY.cjs} +2 -2
- package/dist/{SimpleTextDialog-BWUqPlTv.cjs.map → SimpleTextDialog-BwOVWhRY.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-BulqUrdH.js → SimpleTextDialog-Cmtrmt79.js} +10 -9
- package/dist/{SimpleTextDialog-BulqUrdH.js.map → SimpleTextDialog-Cmtrmt79.js.map} +1 -1
- package/dist/{SpacerWidget-XoMPHak8.js → SpacerWidget-Bg7VDB0k.js} +2 -2
- package/dist/{SpacerWidget-XoMPHak8.js.map → SpacerWidget-Bg7VDB0k.js.map} +1 -1
- package/dist/{SpacerWidget-D_Ya_b1j.cjs → SpacerWidget-Bzp3aI40.cjs} +2 -2
- package/dist/{SpacerWidget-D_Ya_b1j.cjs.map → SpacerWidget-Bzp3aI40.cjs.map} +1 -1
- package/dist/{SparklineWidget-DQNsvEj9.js → SparklineWidget-D_b5rfJv.js} +4 -4
- package/dist/{SparklineWidget-DQNsvEj9.js.map → SparklineWidget-D_b5rfJv.js.map} +1 -1
- package/dist/{SparklineWidget-CRzXTS5z.cjs → SparklineWidget-kMWjVDrm.cjs} +2 -2
- package/dist/{SparklineWidget-CRzXTS5z.cjs.map → SparklineWidget-kMWjVDrm.cjs.map} +1 -1
- package/dist/{TabbookWidget-_HVA72t5.js → TabbookWidget-C30f9B6z.js} +2 -2
- package/dist/{TabbookWidget-_HVA72t5.js.map → TabbookWidget-C30f9B6z.js.map} +1 -1
- package/dist/{TabbookWidget-Bh-GDBXg.cjs → TabbookWidget-DlVrU3wK.cjs} +2 -2
- package/dist/{TabbookWidget-Bh-GDBXg.cjs.map → TabbookWidget-DlVrU3wK.cjs.map} +1 -1
- package/dist/{TargetsTab-BfoRYnTP.js → TargetsTab-CEPId9dL.js} +5 -4
- package/dist/{TargetsTab-BfoRYnTP.js.map → TargetsTab-CEPId9dL.js.map} +1 -1
- package/dist/{TargetsTab-CGE-jQAz.cjs → TargetsTab-uqjueXlq.cjs} +2 -2
- package/dist/{TargetsTab-CGE-jQAz.cjs.map → TargetsTab-uqjueXlq.cjs.map} +1 -1
- package/dist/{TextBoxDialog-DWt30tB8.cjs → TextBoxDialog--uIDsNPU.cjs} +2 -2
- package/dist/{TextBoxDialog-DWt30tB8.cjs.map → TextBoxDialog--uIDsNPU.cjs.map} +1 -1
- package/dist/{TextBoxDialog-C60jmnyN.js → TextBoxDialog-BlZ6MBoW.js} +4 -3
- package/dist/{TextBoxDialog-C60jmnyN.js.map → TextBoxDialog-BlZ6MBoW.js.map} +1 -1
- package/dist/{TextboxWidget-uDptDK_z.cjs → TextboxWidget-BJka_3dT.cjs} +2 -2
- package/dist/{TextboxWidget-uDptDK_z.cjs.map → TextboxWidget-BJka_3dT.cjs.map} +1 -1
- package/dist/{TextboxWidget-0JXn4bMH.js → TextboxWidget-CDqxsgys.js} +4 -4
- package/dist/{TextboxWidget-0JXn4bMH.js.map → TextboxWidget-CDqxsgys.js.map} +1 -1
- package/dist/{TextfieldWidget-B0FCskrL.cjs → TextfieldWidget-C7_48W7n.cjs} +2 -2
- package/dist/{TextfieldWidget-B0FCskrL.cjs.map → TextfieldWidget-C7_48W7n.cjs.map} +1 -1
- package/dist/{TextfieldWidget-BXr9MkVW.js → TextfieldWidget-CAyjKJs6.js} +2 -2
- package/dist/{TextfieldWidget-BXr9MkVW.js.map → TextfieldWidget-CAyjKJs6.js.map} +1 -1
- package/dist/{TimeWidget-C67uwMGH.js → TimeWidget-BQsP0G2X.js} +2 -2
- package/dist/{TimeWidget-C67uwMGH.js.map → TimeWidget-BQsP0G2X.js.map} +1 -1
- package/dist/{TimeWidget-q5tUvHC6.cjs → TimeWidget-WPWiADCI.cjs} +2 -2
- package/dist/{TimeWidget-q5tUvHC6.cjs.map → TimeWidget-WPWiADCI.cjs.map} +1 -1
- package/dist/{TitleWidget-t_YLgUMB.js → TitleWidget-DXVba53S.js} +2 -2
- package/dist/{TitleWidget-t_YLgUMB.js.map → TitleWidget-DXVba53S.js.map} +1 -1
- package/dist/{TitleWidget-REsd7MqR.cjs → TitleWidget-DavRJ5B5.cjs} +2 -2
- package/dist/{TitleWidget-REsd7MqR.cjs.map → TitleWidget-DavRJ5B5.cjs.map} +1 -1
- package/dist/{ToolsTab-DKYeIlXu.js → ToolsTab-CSmjz1H7.js} +6 -5
- package/dist/{ToolsTab-DKYeIlXu.js.map → ToolsTab-CSmjz1H7.js.map} +1 -1
- package/dist/{ToolsTab-CGztf9_j.cjs → ToolsTab-DUwXt5hn.cjs} +3 -3
- package/dist/{ToolsTab-CGztf9_j.cjs.map → ToolsTab-DUwXt5hn.cjs.map} +1 -1
- package/dist/TopBar-C5lQcY1W.cjs +2 -0
- package/dist/{TopBar-B0UcAtIW.cjs.map → TopBar-C5lQcY1W.cjs.map} +1 -1
- package/dist/{TopBar-BrCfgCxc.js → TopBar-D_2lT9RB.js} +14 -12
- package/dist/{TopBar-BrCfgCxc.js.map → TopBar-D_2lT9RB.js.map} +1 -1
- package/dist/UpgradeToEnterpriseDialog-BHDDrj0t.cjs +2 -0
- package/dist/{UpgradeToEnterpriseDialog-DJ3oth3I.cjs.map → UpgradeToEnterpriseDialog-BHDDrj0t.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js → UpgradeToEnterpriseDialog-Cvt5MMTj.js} +19 -16
- package/dist/{UpgradeToEnterpriseDialog-CGyR2v7U.js.map → UpgradeToEnterpriseDialog-Cvt5MMTj.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js} +12491 -12383
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs +1498 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs.map +1 -0
- package/dist/VWidget-C7V6pKTg.cjs +2 -0
- package/dist/VWidget-C7V6pKTg.cjs.map +1 -0
- package/dist/{VWidget-j2GIGGSX.js → VWidget-CFTCukCL.js} +16 -10
- package/dist/VWidget-CFTCukCL.js.map +1 -0
- package/dist/{ValueWidget-CjZeSiPQ.cjs → ValueWidget-5ulSOrPw.cjs} +2 -2
- package/dist/{ValueWidget-CjZeSiPQ.cjs.map → ValueWidget-5ulSOrPw.cjs.map} +1 -1
- package/dist/{ValueWidget-3jNtnh5i.js → ValueWidget-B-TWLPdM.js} +4 -4
- package/dist/{ValueWidget-3jNtnh5i.js.map → ValueWidget-B-TWLPdM.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs → ValuelimitsbarWidget-CTFVDwcL.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-CkLbRP8P.cjs.map → ValuelimitsbarWidget-CTFVDwcL.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-JSceOzGS.js → ValuelimitsbarWidget-jsDXdPdC.js} +4 -4
- package/dist/{ValuelimitsbarWidget-JSceOzGS.js.map → ValuelimitsbarWidget-jsDXdPdC.js.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs → ValuelimitscolumnWidget-Du3Baz6G.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-DpU4BoB7.cjs.map → ValuelimitscolumnWidget-Du3Baz6G.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js → ValuelimitscolumnWidget-I-uwnXM2.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-HR1TNHwQ.js.map → ValuelimitscolumnWidget-I-uwnXM2.js.map} +1 -1
- package/dist/{ValuerangebarWidget-CpZYmUl_.cjs → ValuerangebarWidget-BjXDCLm3.cjs} +2 -2
- package/dist/{ValuerangebarWidget-CpZYmUl_.cjs.map → ValuerangebarWidget-BjXDCLm3.cjs.map} +1 -1
- package/dist/{ValuerangebarWidget-DnZrho8S.js → ValuerangebarWidget-OyhSTScu.js} +4 -4
- package/dist/{ValuerangebarWidget-DnZrho8S.js.map → ValuerangebarWidget-OyhSTScu.js.map} +1 -1
- package/dist/VerticalWidget-CKDTGmhp.cjs +2 -0
- package/dist/{VerticalWidget-CcJMMaK_.cjs.map → VerticalWidget-CKDTGmhp.cjs.map} +1 -1
- package/dist/{VerticalWidget-DJvoxqLE.js → VerticalWidget-CkFbX1Gq.js} +13 -13
- package/dist/{VerticalWidget-DJvoxqLE.js.map → VerticalWidget-CkFbX1Gq.js.map} +1 -1
- package/dist/VerticalboxWidget-D09UbA0I.cjs +2 -0
- package/dist/{VerticalboxWidget-CJR_mOLa.cjs.map → VerticalboxWidget-D09UbA0I.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-CYYyLBoO.js → VerticalboxWidget-FEQgPM9r.js} +13 -13
- package/dist/{VerticalboxWidget-CYYyLBoO.js.map → VerticalboxWidget-FEQgPM9r.js.map} +1 -1
- package/dist/{Widget-Bn_S-zBo.js → Widget-C3-TBgP7.js} +4 -4
- package/dist/Widget-C3-TBgP7.js.map +1 -0
- package/dist/{Widget-O7wkmc39.cjs → Widget-CSBtgNwA.cjs} +2 -2
- package/dist/{Widget-O7wkmc39.cjs.map → Widget-CSBtgNwA.cjs.map} +1 -1
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.js +257 -804
- package/dist/components.js.map +1 -1
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/{index-qCq0L4jN.js → index-DDjz5VQq.js} +345 -327
- package/dist/index-DDjz5VQq.js.map +1 -0
- package/dist/index-DZh4NjG5.cjs +7 -0
- package/dist/index-DZh4NjG5.cjs.map +1 -0
- package/dist/plugins.cjs +2 -2
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +184 -175
- package/dist/plugins.js.map +1 -1
- package/dist/settings-BboN1VLt.cjs +2 -0
- package/dist/settings-BboN1VLt.cjs.map +1 -0
- package/dist/settings-spKii1fI.js +34 -0
- package/dist/settings-spKii1fI.js.map +1 -0
- package/dist/tools/admin.cjs +3 -3
- package/dist/tools/admin.cjs.map +1 -1
- package/dist/tools/admin.js +90 -59
- 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 +530 -474
- 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 -7
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +344 -293
- package/dist/tools/scriptrunner.js.map +1 -1
- package/dist/vue-common.css +1 -1
- package/dist/widgets.cjs +1 -1
- package/dist/widgets.js +63 -63
- package/package.json +14 -14
- package/dist/ArrayplotWidget-DC41cpv1.cjs +0 -2
- package/dist/ArrayplotWidget-DC41cpv1.cjs.map +0 -1
- package/dist/ArrayplotWidget-ntRLh6-B.js.map +0 -1
- package/dist/CriticalCmdDialog-7tOK2XQk.cjs +0 -2
- package/dist/DetailsDialog-BQE0TraI.js.map +0 -1
- package/dist/DetailsDialog-DmKpPDNn.cjs +0 -2
- package/dist/DetailsDialog-DmKpPDNn.cjs.map +0 -1
- package/dist/EventListDialog-CDcJcxy5.cjs +0 -2
- package/dist/Graph-DCihpnT0.js +0 -1853
- package/dist/Graph-DCihpnT0.js.map +0 -1
- package/dist/Graph-mSqImgca.cjs +0 -2
- package/dist/Graph-mSqImgca.cjs.map +0 -1
- package/dist/GraphWidget-CQjKAMPR.cjs +0 -2
- package/dist/HorizontalWidget--AkRJPlL.cjs +0 -2
- package/dist/HorizontalboxWidget-synL-Bar.cjs +0 -2
- package/dist/Layout-kOQnicRa.cjs +0 -2
- package/dist/LedWidget-BN8IgAxJ.js.map +0 -1
- package/dist/LedWidget-BUTbyEBi.cjs +0 -2
- package/dist/LedWidget-BUTbyEBi.cjs.map +0 -1
- package/dist/LinegraphWidget-Bay0EtbI.cjs +0 -2
- package/dist/LinegraphWidget-Bay0EtbI.cjs.map +0 -1
- package/dist/LinegraphWidget-jXksfbPb.js.map +0 -1
- package/dist/MatrixbycolumnsWidget-DxRhvPGv.cjs +0 -2
- package/dist/Openc3Screen-BZN0Wtrm.js.map +0 -1
- package/dist/Openc3Screen-dtpBWZdA.cjs +0 -5
- package/dist/Openc3Screen-dtpBWZdA.cjs.map +0 -1
- package/dist/PackagesTab-B4V2n4io.cjs +0 -2
- package/dist/PluginsTab-DHO1tK2S.cjs +0 -6
- package/dist/PluginsTab-DHO1tK2S.cjs.map +0 -1
- package/dist/PluginsTab-lHDR5v6S.js +0 -562
- package/dist/PluginsTab-lHDR5v6S.js.map +0 -1
- package/dist/RedisTab-CdiSo-CO.cjs +0 -2
- package/dist/ScrollwindowWidget-54GU96Ve.js.map +0 -1
- package/dist/ScrollwindowWidget-C5_X-KwQ.cjs +0 -2
- package/dist/ScrollwindowWidget-C5_X-KwQ.cjs.map +0 -1
- package/dist/SettingsTab-BVnr4OtU.js +0 -1445
- package/dist/SettingsTab-BVnr4OtU.js.map +0 -1
- package/dist/SettingsTab-BkwaDhYo.cjs +0 -3
- package/dist/SettingsTab-BkwaDhYo.cjs.map +0 -1
- package/dist/TopBar-B0UcAtIW.cjs +0 -2
- package/dist/UpgradeToEnterpriseDialog-DJ3oth3I.cjs +0 -2
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs +0 -1497
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs.map +0 -1
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NIAkCgU6.js.map +0 -1
- package/dist/VWidget-BMxLXtSO.cjs +0 -2
- package/dist/VWidget-BMxLXtSO.cjs.map +0 -1
- package/dist/VWidget-j2GIGGSX.js.map +0 -1
- package/dist/VerticalWidget-CcJMMaK_.cjs +0 -2
- package/dist/VerticalboxWidget-CJR_mOLa.cjs +0 -2
- package/dist/Widget-Bn_S-zBo.js.map +0 -1
- package/dist/index-DcL65Mqb.cjs +0 -7
- package/dist/index-DcL65Mqb.cjs.map +0 -1
- package/dist/index-qCq0L4jN.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Openc3Screen-BZN0Wtrm.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 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog v-model=\"show\" persistent width=\"75vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-delete\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"delete-screen-icon\"\n @click=\"deleteScreen\"\n />\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n />\n </v-toolbar>\n <v-card-text style=\"max-height: 90vh\">\n <v-row class=\"mt-3\"> Upload a screen file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-btn\n :disabled=\"!file\"\n color=\"primary\"\n class=\"mr-3\"\n data-test=\"edit-screen-load\"\n @click=\"loadFile\"\n >\n Load\n </v-btn>\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n />\n </v-row>\n <v-row class=\"mb-2\"> Edit the screen definition. </v-row>\n <v-row class=\"mb-2\">\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <!-- Make the error messages a max height and scrollable -->\n <v-row style=\"max-height: 120px; overflow-y: auto\">\n <div v-for=\"(error, index) in editErrors\" :key=\"index\">\n <span class=\"text-red\" v-text=\"error\" />\n </div>\n </v-row>\n <v-row class=\"mt-5\">\n <span>\n Ctrl-space brings up autocomplete. Right click keywords for\n documentation.\n </span>\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n @click=\"$emit('cancel')\"\n >\n Cancel\n </v-btn>\n <v-btn\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\n @click=\"$emit('save', editor.getValue())\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { ScreenCompleter } from './autocomplete'\nimport { AceEditorUtils } from './ace'\n\nexport default {\n props: {\n modelValue: Boolean,\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n errors: {\n type: Array,\n default: () => [],\n },\n },\n emits: ['cancel', 'delete', 'save', 'update:modelValue'],\n data() {\n return {\n file: null,\n docsKeyword: '',\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n editErrors: function () {\n if (this.definition === '' && !this.file) {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let messages = new Set()\n let result = []\n const sortedErrors = this.errors.toSorted(\n (a, b) => a.lineNumber - b.lineNumber,\n )\n for (const error of sortedErrors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n messages.add(error.message)\n }\n return result\n }\n return []\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setOption('enableBasicAutocompletion', true)\n this.editor.setOption('enableLiveAutocompletion', true)\n this.editor.completers = [new ScreenCompleter()]\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.definition)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n },\n beforeUnmount() {\n this.editor.destroy()\n this.editor.container.remove()\n },\n methods: {\n toggleVimMode: function () {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n openDocumentation() {\n window.open(\n `${\n window.location.origin\n }/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,\n '_blank',\n )\n },\n buildScreenMode() {\n let oop = ace.require('ace/lib/oop')\n let TextHighlightRules = ace.require(\n 'ace/mode/text_highlight_rules',\n ).TextHighlightRules\n\n let list = this.keywords.join('|')\n let OpenC3HighlightRules = function () {\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'string',\n regex: '\".*?\"',\n },\n {\n token: 'string',\n regex: \"'.*?'\",\n },\n {\n token: 'constant.numeric',\n regex: '\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b',\n },\n {\n token: 'keyword',\n regex: new RegExp(`^\\\\s*(${list})\\\\b`),\n },\n ],\n }\n this.normalizeRules()\n }\n oop.inherits(OpenC3HighlightRules, TextHighlightRules)\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n }\n let TextMode = ace.require('ace/mode/text').Mode\n oop.inherits(Mode, TextMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n downloadScreen: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.screen.toLowerCase()}.txt`)\n link.click()\n },\n loadFile: function () {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n const that = this\n fileReader.onload = function () {\n that.editor.setValue(fileReader.result)\n that.file = null\n }\n },\n deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n\n<style>\n.ace_autocomplete {\n width: 60vw !important;\n}\n</style>\n<style scoped>\n.editor {\n height: 45vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <form @submit.prevent=\"addEnvironment\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Global Environment Variables</span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense class=\"mb-2\">\n <v-text-field\n v-model=\"search\"\n label=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n item-key=\"name\"\n hide-default-header\n data-test=\"env-table\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"environment\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n class=\"mt-1\"\n data-test=\"item-delete\"\n aria-label=\"Delete Environment Variable\"\n @click=\"deleteEnvironment(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <v-col>\n <v-text-field v-model=\"key\" label=\"Key\" data-test=\"env-key\" />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"keyValue\"\n label=\"Value\"\n data-test=\"env-value\"\n />\n </v-col>\n </v-row>\n <v-row dense>\n <v-btn\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\n @click.prevent=\"addEnvironment\"\n >\n Add\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n search: '',\n key: '',\n keyValue: '',\n environment: [],\n headers: [\n {\n text: 'Key',\n value: 'key',\n },\n {\n text: 'Value',\n value: 'value',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted() {\n this.update()\n },\n methods: {\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n update: function () {\n Api.get('/openc3-api/environment')\n .then((response) => {\n this.environment = response.data\n })\n .catch((error) => {\n // TODO: $error.something\n })\n },\n addEnvironment: function () {\n Api.post('/openc3-api/environment', {\n data: {\n key: this.key.toUpperCase(),\n value: this.keyValue,\n },\n })\n .then((response) => {\n const alertEvent = {\n text: `New environment variable: ${response.data.name}`,\n type: 'success',\n }\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to add environment variable: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n this.key = ''\n this.keyValue = ''\n },\n deleteEnvironment: function (env) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${env.key}=${env.value}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/environment/${env.name}`)\n })\n .then((response) => {\n const alertEvent = {\n text: `Removed environment variable: ${env.name}`,\n type: 'success',\n }\n this.alertHandler(alertEvent)\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to delete environment: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<!--\n# Due to performance issues in TreeView we implement TreeNode\n# based on code example provided in https://github.com/vuetifyjs/vuetify/issues/19919\n-->\n<template>\n <div class=\"tree-node\">\n <div v-if=\"showNode\" class=\"node-content\" @click=\"handleClick(node)\">\n <div class=\"content-wrapper\">\n <v-icon\n v-if=\"node.children\"\n class=\"toggle-icon\"\n style=\"padding-right: 10px\"\n >\n {{ node.isOpen ? 'mdi-menu-down' : 'mdi-menu-right' }}\n </v-icon>\n <v-icon v-if=\"node.children\" size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-folder' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.rb')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-ruby' }}\n </v-icon>\n <v-icon\n v-else-if=\"node.title.includes('.py')\"\n size=\"small\"\n style=\"padding-right: 10px\"\n >\n {{ 'mdi-language-python' }}\n </v-icon>\n <v-icon v-else size=\"small\" style=\"padding-right: 10px\">\n {{ 'mdi-file-document' }}\n </v-icon>\n <span\n class=\"title\"\n :tabindex=\"node.children ? -1 : 0\"\n @keyup.enter=\"handleClick(node)\"\n >\n {{ node.title }}\n </span>\n\n <v-btn\n v-if=\"node.title === '__TEMP__'\"\n icon=\"mdi-delete\"\n variant=\"text\"\n style=\"margin-left: auto\"\n aria-label=\"Delete\"\n @click=\"emit('delete')\"\n />\n </div>\n </div>\n <div v-else></div>\n <div v-if=\"node.children && node.isOpen\" class=\"children\">\n <tree-node\n v-for=\"child in node.children\"\n :key=\"child.id\"\n :node=\"child\"\n :search=\"search\"\n :type=\"type\"\n @node-toggled=\"bubbleNodeToggled\"\n @request=\"bubbleNodeRequest\"\n ></tree-node>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, watch } from 'vue'\n\nconst props = defineProps({\n node: {\n type: Object,\n required: true,\n },\n search: {\n type: String,\n default: '',\n },\n type: {\n type: String,\n default: 'open',\n },\n})\n\nconst isOpen = ref(props.node.isOpen || false)\n\nconst showNode = computed(() => {\n const _nodeOrChildMatchesSearch = (node) => {\n if (!props.search) {\n return true\n }\n if (node.path.toLowerCase().includes(props.search.toLowerCase())) {\n return true\n }\n return !!node.children?.some(_nodeOrChildMatchesSearch)\n }\n\n return _nodeOrChildMatchesSearch(props.node)\n})\n\nwatch(\n () => props.node.isOpen,\n (newpath) => {\n isOpen.value = newpath\n },\n)\n\nwatch(\n () => props.search,\n (newSearch) => {\n if (newSearch) {\n if (!props.node.isOpen) toggle()\n } else {\n if (props.node.isOpen) toggle()\n }\n },\n)\n\nconst emit = defineEmits(['nodeToggled', 'request'])\n\nconst handleClick = (node) => {\n if (node.children) {\n toggle()\n // Only emit request on folder for save dialog\n if (props.type === 'save') {\n emit('request', node)\n }\n } else {\n emit('request', node)\n }\n}\nconst toggle = () => {\n if (props.node.children) {\n isOpen.value = !isOpen.value\n props.node.isOpen = isOpen.value\n emit('nodeToggled', props.node.id, isOpen.value)\n }\n}\n// Bubble up the event for the nested tree-nodes\nconst bubbleNodeToggled = (nodeName, isOpen) => {\n emit('nodeToggled', nodeName, isOpen)\n}\nconst bubbleNodeRequest = (node) => {\n emit('request', node)\n}\n</script>\n\n<style scoped>\n.children {\n padding-left: 25px;\n}\n.content-wrapper {\n align-items: center;\n display: flex;\n max-height: 38px;\n}\n.node-content {\n cursor: pointer;\n overflow: hidden;\n user-select: none;\n white-space: nowrap;\n}\n.node-content:hover {\n background-color: rgba(211, 211, 211, 0.2);\n transition: background-color 0.3s ease;\n}\n.title {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.toggle-icon {\n width: 20px;\n}\n.tree-node {\n line-height: 1.8;\n position: relative;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\" @keydown.enter=\"success()\">\n <v-card>\n <v-overlay :model-value=\"loading\">\n <v-progress-circular\n indeterminate\n absolute\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <form @submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row>{{ helpText }} </v-row>\n <v-row dense class=\"mt-5\">\n <v-text-field\n v-model=\"search\"\n flat\n autofocus\n hide-details\n clearable\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n density=\"compact\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <div class=\"overflow-y-auto tree-container\">\n <tree-node\n v-for=\"node in items\"\n :key=\"`${node.id}`\"\n :node=\"node\"\n :search=\"search\"\n :type=\"type\"\n @request=\"activeFile\"\n @delete=\"deleteTemp\"\n ></tree-node>\n </div>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <div\n v-show=\"error\"\n class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n @click=\"show = false\"\n >\n Cancel\n </v-btn>\n <v-btn\n ref=\"submitBtn\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n @click.prevent=\"success\"\n >\n {{ submit }}\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { fileIcon } from '@/util/fileIcon'\nimport TreeNode from './TreeNode.vue'\n\nexport default {\n components: {\n TreeNode,\n },\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n modelValue: Boolean,\n },\n data() {\n return {\n tree: [],\n items: [],\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\n targetsRetrieved: [],\n loading: true,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n helpText: function () {\n if (this.type === 'open') {\n return 'Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.'\n } else {\n return 'Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message +=\n 'only contain alphanumeric characters (including !-_.*) and a valid extension.\\n\\n' +\n 'For example: TGT1/procedures/test.py or TGT2/lib/inst.rb'\n return message\n }\n if (this.type === 'save' && this.selectedFile.match(/\\*$/)) {\n let message = `${this.selectedFile} is not a valid filename. Must not end in '*'.`\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n Api.get('/openc3-api/targets').then((response) => {\n this.targets = response.data\n this.targets.push('__TEMP__') // Also support __TEMP__\n this.targets.forEach((target) => {\n // Name not found so push the item and add a children array\n this.items.push({\n id: target,\n disabled: true,\n title: target,\n children: [],\n path: target,\n })\n // Load the targets 1 by 1 in the background\n this.loadFiles(target)\n })\n this.loading = false\n })\n },\n methods: {\n calcIcon: function (filename) {\n return fileIcon(filename)\n },\n loadFiles: function (target) {\n Api.get(this.apiUrl, { params: { target } })\n .then((response) => {\n if (response.data.length === 0) {\n // Delete from items since there is no data\n this.items = this.items.filter((item) => item.id !== target)\n return\n }\n for (let file of response.data.sort()) {\n // Make a copy of the entire file path before calling insertFile\n // because insertFile does recursion and needs the original path\n this.filepath = file\n this.insertFile(this.items, 2, file)\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n // Enable the target we just populated\n const index = this.items.findIndex((item) => item.id === target)\n if (index !== -1) {\n this.items[index].disabled = false\n }\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to OpenC3. ${error}`)\n })\n },\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n // Search through items to find the item with id\n this.selectedFile = this.findItem(this.items, file.id)\n // Select the Submit button so return opens the file\n setTimeout(() => {\n this.$refs.submitBtn.$el.focus()\n }, 100)\n }\n },\n findItem: function (items, id) {\n for (let item of items) {\n if (item.id === id) {\n return item.path\n }\n if (item.children) {\n const found = this.findItem(item.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.path.length > 1) {\n if (item.path[item.path.length - 1] === '*') {\n // Try without the star too\n if (item.path.slice(0, item.path.length - 1) === name) {\n return true\n }\n }\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n // Only process the success call if a file is selected and no error\n if (this.selectedFile !== null && this.error === null) {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n }\n },\n deleteTemp: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete all the temporary files?`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete('/script-api/scripts/temp_files')\n })\n .then((response) => {\n this.$emit('clear-temp')\n this.loadFiles('__TEMP__')\n })\n .catch((error) => {\n this.$notify.serious({\n title: 'Error',\n body: `Failed to remove script temporary files due to ${error}`,\n })\n })\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n .catch((error) => {}) // Cancel, do nothing\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n let parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.filepath,\n title: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.title === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n title: parts[0],\n children: [],\n path: this.filepath\n .split('/')\n .slice(0, level - 1)\n .join('/'),\n })\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/'), // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/'),\n )\n }\n },\n },\n}\n</script>\n\n<style>\n.tree-container {\n background-color: var(--color-background-base-default);\n padding: 10px;\n margin-top: 5px;\n max-height: 60vh;\n font-size: large;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# This screen expects to be inside of two parent elements.\n# An overall item, and then a container for all screens\n-->\n\n<template>\n <div ref=\"bar\" :style=\"computedStyle\">\n <v-card\n v-if=\"!inline\"\n :min-height=\"height\"\n :min-width=\"width\"\n style=\"cursor: default\"\n >\n <v-toolbar height=\"24\">\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <v-btn\n icon=\"mdi-pencil\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"edit-screen-icon\"\n aria-label=\"Edit Screen\"\n @click=\"openEdit\"\n />\n <v-tooltip v-if=\"!fixFloated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :icon=\"floated ? 'mdi-balloon' : 'mdi-view-grid-outline'\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"float-screen-icon\"\n :aria-label=\"floated ? 'Unfloat Screen' : 'Float Screen'\"\n @click=\"floatScreen\"\n />\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip v-if=\"floated\" :open-delay=\"600\" location=\"top\">\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-up\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"up-screen-icon\"\n aria-label=\"Move Screen Up\"\n @click=\"upScreen\"\n />\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip\n v-if=\"floated && zIndex > minZ\"\n :open-delay=\"600\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-arrow-down\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"down-screen-icon\"\n aria-label=\"Move Screen Down\"\n @click=\"downScreen\"\n />\n </div>\n </template>\n <span> Move Screen Down </span>\n </v-tooltip>\n <v-spacer />\n <span> {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-btn\n v-if=\"expand\"\n icon=\"mdi-window-minimize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"minimize-screen-icon\"\n aria-label=\"Minimize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-else\n icon=\"mdi-window-maximize\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"maximize-screen-icon\"\n aria-label=\"Maximize Screen\"\n @click=\"minMaxTransition\"\n />\n <v-btn\n v-if=\"showClose\"\n icon=\"mdi-close-box\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"close-screen-icon\"\n aria-label=\"Close Screen\"\n @click=\"$emit('close-screen')\"\n />\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n v-show=\"expand\"\n ref=\"screen\"\n class=\"pa-1\"\n style=\"position: relative\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n\n <div v-if=\"inline\" class=\"pa-1\" style=\"position: relative\">\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n scroll-strategy=\"none\"\n />\n <v-btn\n v-show=\"errors.length !== 0\"\n icon=\"mdi-alert\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"error-graph-icon\"\n aria-label=\"Show Errors\"\n @click=\"\n () => {\n errorDialog = true\n }\n \"\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n @add-item=\"addItem\"\n @delete-item=\"deleteItem\"\n @open=\"open\"\n @close=\"close\"\n @close-all=\"closeAll\"\n />\n </div>\n\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :keywords=\"keywords\"\n :errors=\"errors\"\n @save=\"saveEdit\"\n @cancel=\"cancelEdit\"\n @delete=\"deleteScreen\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" width=\"60vw\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-textarea class=\"errors\" readonly rows=\"13\" :model-value=\"error\" />\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { uniqueId } from 'lodash'\nimport { Api, ConfigParserService, OpenC3Api } from '@openc3/js-common/services'\nimport WidgetComponents from '@/widgets/WidgetComponents'\nimport EditScreenDialog from './EditScreenDialog.vue'\n\nconst MAX_ERRORS = 20\n\nexport default {\n components: {\n EditScreenDialog,\n },\n mixins: [WidgetComponents],\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n initialFloated: {\n type: Boolean,\n default: false,\n },\n initialTop: {\n type: Number,\n default: 0,\n },\n initialLeft: {\n type: Number,\n default: 0,\n },\n initialZ: {\n type: Number,\n default: 0,\n },\n minZ: {\n type: Number,\n default: 0,\n },\n fixFloated: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showClose: {\n type: Boolean,\n default: true,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n inline: {\n type: Boolean,\n default: false,\n },\n },\n emits: [\n 'close-screen',\n 'delete-screen',\n 'drag-screen',\n 'edit-screen',\n 'float-screen',\n 'min-max-screen',\n 'unfloat-screen',\n ],\n data() {\n return {\n api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n configError: false,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n staleTime: 30,\n cacheTimeout: 0.1,\n globalSettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n dragX: 0,\n dragY: 0,\n floated: this.initialFloated,\n top: this.initialTop,\n left: this.initialLeft,\n zIndex: this.initialZ,\n changeCounter: 0,\n screenItems: [],\n screenValues: {},\n updateCounter: 0,\n screenId: uniqueId('openc3-screen_'),\n }\n },\n computed: {\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n let messages = new Set()\n let result = ''\n for (const error of this.errors) {\n if (messages.has(error.message)) {\n continue\n }\n let msg = `${error.time}: (${error.type}) ${error.message}\\n`\n result += msg\n messages.add(error.message)\n }\n return result\n }\n return null\n },\n computedStyle() {\n let style = {}\n // note down what the width was in case it was set to AUTO, because absolute positioning will lose that\n const origWidth = this.width || this.$refs.bar?.clientWidth\n if (this.floated) {\n style['position'] = 'absolute'\n style['top'] = this.top + 'px'\n style['left'] = this.left + 'px'\n style['width'] = origWidth + 'px'\n }\n return style\n },\n },\n watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\n },\n },\n // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n if (this.errors.length < MAX_ERRORS) {\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: err,\n time: new Date().getTime(),\n })\n }\n // eslint-disable-next-line no-console\n console.log(this.errors)\n this.configError = true\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n this.updateRefreshInterval()\n if (this.floated) {\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n }\n },\n unmounted() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n // These are API methods that ButtonWidget uses to open and close screens\n open(target, screen) {\n this.$parent.showScreen(target, screen)\n },\n close(target, screen) {\n this.$parent.closeScreenByName(target, screen)\n },\n closeAll() {\n this.$parent.closeAll()\n },\n clearErrors: function () {\n this.errors = []\n this.configError = false\n },\n updateRefreshInterval: function () {\n let refreshInterval = this.pollingPeriod * 1000\n if (this.updater) {\n clearInterval(this.updater)\n }\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.clearErrors()\n this.screenItems = []\n this.namedWidgets = {}\n this.layoutStack = []\n this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period>`,\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'STALE_TIME':\n this.configParser.verify_num_parameters(\n 1,\n 1,\n `${keyword} <Time (s)>`,\n )\n this.staleTime = parseInt(parameters[0])\n break\n case 'SETTING':\n case 'SUBSETTING':\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'GLOBAL_SETTING':\n case 'GLOBAL_SUBSETTING':\n this.globalSettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n },\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n this.configError = true\n }\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n upScreen: function () {\n this.zIndex += 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n downScreen: function () {\n if (this.zIndex > this.minZ) {\n this.zIndex -= 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n floatScreen: function () {\n if (this.floated) {\n this.$refs.bar.onmousedown = null\n this.$refs.bar.parentElement.parentElement.style = 'z-index: 0'\n this.floated = false\n this.$emit('unfloat-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n } else {\n let bodyRect =\n this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect()\n let elemRect = this.$refs.bar.getBoundingClientRect()\n this.top = elemRect.top - bodyRect.top - 5\n this.left = elemRect.left - bodyRect.left - 5\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.floated = true\n this.$emit('float-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n dragMouseDown: function (e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n this.dragX = e.clientX\n this.dragY = e.clientY\n document.onmouseup = this.closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = this.elementDrag\n },\n elementDrag: function (e) {\n e = e || window.event\n e.preventDefault()\n // calculate the new cursor position:\n let xOffset = this.dragX - e.clientX\n let yOffset = this.dragY - e.clientY\n this.dragX = e.clientX\n this.dragY = e.clientY\n // set the element's new position:\n this.top = this.$refs.bar.offsetTop - yOffset\n this.left = this.$refs.bar.offsetLeft - xOffset\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n closeDragElement: function () {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n },\n rerender: function () {\n this.parseDefinition()\n this.updateRefreshInterval()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n this.$emit('edit-screen')\n })\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n this.rerender()\n },\n saveEdit: function (definition) {\n this.editDialog = false\n this.currentDefinition = definition\n this.rerender()\n this.$nextTick(function () {\n Api.post(\n '/openc3-api/screen/',\n {\n data: {\n scope: window.openc3Scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n },\n 0,\n )\n })\n },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n },\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n let widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`,\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n // Give all the widgets a reference to this screen\n // Use settings so we don't break existing custom widgets\n settings.push(['__SCREEN_ID__', this.screenId])\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword === 'VERTICAL' ||\n keyword === 'VERTICALBOX' ||\n keyword === 'HORIZONTAL' ||\n keyword === 'HORIZONTALBOX' ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else if (this.$options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\n }\n },\n applyGlobalSettings: function (widgets) {\n widgets.forEach((widget) => {\n this.globalSettings.forEach((setting) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n const existingSetting = widget.settings.find(\n (s) => s[0] === setting[1],\n )\n if (!existingSetting) {\n widget.settings.push(setting.slice(1))\n }\n }\n })\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n },\n update: function () {\n if (this.screenItems.length !== 0 && this.configError === false) {\n this.api\n .get_tlm_values(this.screenItems, this.staleTime, this.cacheTimeout)\n .then((data) => {\n this.clearErrors()\n this.updateValues(data)\n })\n .catch((error) => {\n let message = JSON.stringify(error, null, 2)\n // Anything other than 'no response received' which means the API server is down\n // is an error the user needs to fix so don't request values until they do\n if (!message.includes('no response received')) {\n this.configError = true\n }\n if (\n !this.errors.find((existing) => {\n return existing.message === message\n })\n ) {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'error',\n message: message,\n time: new Date().getTime(),\n })\n }\n }\n })\n }\n },\n updateValues: function (values) {\n this.updateCounter += 1\n for (let i = 0; i < values.length; i++) {\n values[i].push(this.updateCounter)\n this.screenValues[this.screenItems[i]] = values[i]\n }\n },\n addItem: function (valueId) {\n this.screenItems.push(valueId)\n this.screenValues[valueId] = [null, null, 0]\n },\n deleteItem: function (valueId) {\n let index = this.screenItems.indexOf(valueId)\n this.screenItems.splice(index, 1)\n },\n },\n}\n</script>\n\n<style scoped>\n.errors {\n padding-top: 0px;\n margin-top: 0px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n -webkit-mask-image: unset;\n mask-image: unset;\n}\n</style>\n"],"names":["ScreenCompleter","Api","response","OpenC3Api","editor","session","pos","prefix","callback","parsedLine","suggestions","x","result","more","current","acc","curr","target_name","pkt","packet_name","item","completions","_sfc_main","messages","sortedErrors","a","b","error","msg","value","ace.edit","screenMode","AceEditorUtils","event","position","token","oop","ace.require","TextHighlightRules","list","OpenC3HighlightRules","Mode","TextMode","blob","link","fileReader","that","dialog","_hoisted_1","_createBlock","_component_v_dialog","$options","_cache","$event","_withCtx","_createVNode","_component_v_card","_component_v_toolbar","_component_v_btn","_component_v_spacer","_createElementVNode","_toDisplayString","$props","_component_v_card_text","_component_v_row","_createTextVNode","$data","_component_v_file_input","_withModifiers","args","_component_v_menu","_component_v_list","_component_v_list_item","_component_v_list_item_title","_component_v_divider","_openBlock","_createElementBlock","_Fragment","_renderList","index","_ctx","alertEvent","env","_component_v_text_field","_component_v_data_table","_component_v_col","props","__props","isOpen","ref","showNode","computed","_nodeOrChildMatchesSearch","node","_a","watch","newpath","newSearch","toggle","emit","__emit","handleClick","bubbleNodeToggled","nodeName","bubbleNodeRequest","TreeNode","message","alphanumeric","expression","target","filename","fileIcon","file","items","id","found","root","name","locked","breakpoints","level","path","parts","_hoisted_2","_withKeys","_component_v_overlay","_component_v_progress_circular","_component_tree_node","MAX_ERRORS","EditScreenDialog","WidgetComponents","uniqueId","style","origWidth","newValue","oldValue","err","vm","info","ConfigParserService","screen","refreshInterval","keyword","parameters","line","lineNumber","names","lines","widget","bodyRect","elemRect","xOffset","yOffset","definition","widgetName","componentName","settings","layout","widgets","setting","s","data","existing","values","i","valueId","_normalizeStyle","_createCommentVNode","_vShow","_component_v_tooltip","_normalizeProps","_guardReactiveProps","_component_v_expand_transition","_withDirectives","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea"],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
"use strict";const y=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-C_HFbtFB.cjs"),e=require("vue"),C=require("./CustomIcon-Bop2mEnu.cjs"),E=require("./fileIcon-BduOQcTc.cjs"),V=require("./TopBar-B0UcAtIW.cjs");class k{constructor(){y.li.get("/openc3-api/autocomplete/data/screen").then(n=>{this.autocompleteData=n.data}),this.api=new y.pi}async getCompletions(n,i,s,o,l){let m=i.getLine(s.row).slice(0,s.column).trimStart().split(/ (?![^<]*>)/),c=this.autocompleteData;m.length>1&&(c=c.find(h=>h.caption===m[0]));let r={},a=!0;if(c&&c.params){c.params.length==m.length-1&&(a=!1);let h=c.params[m.length-2];if(h["Target name"])c=(await this.api.get_target_names()).reduce((x,v)=>(x[v]=1,x),{});else if(h["Packet name"]){let g=m[m.length-2];c=(await this.api.get_all_tlm(g)).reduce((v,f)=>(v[f.packet_name]=f.description,v),{})}else if(h["Item name"]){let g=m[m.length-3],x=m[m.length-2];c=(await this.api.get_tlm(g,x)).items.reduce((f,u)=>(f[u.name]=u.description,f),{})}else c=h;r=Object.keys(c||{}).map(g=>{let x={value:g+(a?" ":""),command:a&&"startAutocomplete"};return typeof c[g]=="string"&&(x.meta=c[g]),x})}else r=c;l(null,r)}}const T={props:{modelValue:Boolean,target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},errors:{type:Array,default:()=>[]}},emits:["cancel","delete","save","update:modelValue"],data(){return{file:null,docsKeyword:"",contextMenu:!1,menuX:0,menuY:0}},computed:{editErrors:function(){if(this.definition===""&&!this.file)return["Input can not be blank."];if(this.errors.length!==0){let t=new Set,n=[];const i=this.errors.toSorted((s,o)=>s.lineNumber-o.lineNumber);for(const s of i){let o=`At ${s.lineNumber}: (${s.line}) ${s.message}.`;s.usage&&(o+=` Usage: ${s.usage}`),n.push(o),t.add(s.message)}return n}return[]},show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},mounted:function(){this.editor=y.aceExports.edit(this.$refs.editor),this.editor.setTheme("ace/theme/twilight");const t=this.buildScreenMode();this.editor.session.setMode(new t),this.editor.session.setTabSize(2),this.editor.session.setUseWrapMode(!0),this.editor.$blockScrolling=1/0,this.editor.setOption("enableBasicAutocompletion",!0),this.editor.setOption("enableLiveAutocompletion",!0),this.editor.completers=[new k],this.editor.setHighlightActiveLine(!1),this.editor.setValue(this.definition),this.editor.clearSelection(),V.AceEditorUtils.applyVimModeIfEnabled(this.editor),this.editor.focus()},beforeUnmount(){this.editor.destroy(),this.editor.container.remove()},methods:{toggleVimMode:function(){V.AceEditorUtils.toggleVimMode(this.editor)},showContextMenu:function(t){this.menuX=t.pageX,this.menuY=t.pageY;let n=this.editor.getCursorPosition(),i=this.editor.session.getTokenAt(n.row,n.column);if(i){let s=i.value.trim();s.includes(" ")?this.docsKeyword=s.split(" ")[0]:this.docsKeyword=s,this.contextMenu=!0}},openDocumentation(){window.open(`${window.location.origin}/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,"_blank")},buildScreenMode(){let t=y.aceExports.require("ace/lib/oop"),n=y.aceExports.require("ace/mode/text_highlight_rules").TextHighlightRules,i=this.keywords.join("|"),s=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"string",regex:'".*?"'},{token:"string",regex:"'.*?'"},{token:"constant.numeric",regex:"\\b\\d+(?:\\.\\d+)?\\b"},{token:"keyword",regex:new RegExp(`^\\s*(${i})\\b`)}]},this.normalizeRules()};t.inherits(s,n);let o=function(){this.HighlightRules=s},l=y.aceExports.require("ace/mode/text").Mode;return t.inherits(o,l),(function(){this.$id="ace/mode/openc3"}).call(o.prototype),o},downloadScreen:function(){const t=new Blob([this.editor.getValue()],{type:"text/plain"}),n=document.createElement("a");n.href=URL.createObjectURL(t),n.setAttribute("download",`${this.screen.toLowerCase()}.txt`),n.click()},loadFile:function(){const t=new FileReader;t.readAsText(this.file);const n=this;t.onload=function(){n.editor.setValue(t.result),n.file=null}},deleteScreen:function(){this.$dialog.confirm("Are you sure you want to delete this screen?!",{okText:"Delete",cancelText:"Cancel"}).then(t=>{this.$emit("delete")})}}},D=["textContent"];function B(t,n,i,s,o,l){const d=e.resolveComponent("v-btn"),p=e.resolveComponent("v-spacer"),m=e.resolveComponent("v-toolbar"),c=e.resolveComponent("v-row"),r=e.resolveComponent("v-file-input"),a=e.resolveComponent("v-list-item-title"),h=e.resolveComponent("v-list-item"),g=e.resolveComponent("v-divider"),x=e.resolveComponent("v-list"),v=e.resolveComponent("v-menu"),f=e.resolveComponent("v-card-text"),u=e.resolveComponent("v-card"),N=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(N,{modelValue:l.show,"onUpdate:modelValue":n[5]||(n[5]=_=>l.show=_),persistent:"",width:"75vw"},{default:e.withCtx(()=>[e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(m,{height:"24"},{default:e.withCtx(()=>[e.createVNode(d,{class:"mx-2",icon:"mdi-delete",variant:"text",density:"compact","data-test":"delete-screen-icon",onClick:l.deleteScreen},null,8,["onClick"]),e.createVNode(p),e.createElementVNode("span",null," Edit Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(p),e.createVNode(d,{class:"mx-2",icon:"mdi-download",variant:"text",density:"compact","data-test":"download-screen-icon",onClick:l.downloadScreen},null,8,["onClick"])]),_:1}),e.createVNode(f,{style:{"max-height":"90vh"}},{default:e.withCtx(()=>[e.createVNode(c,{class:"mt-3"},{default:e.withCtx(()=>n[6]||(n[6]=[e.createTextVNode(" Upload a screen file. ")])),_:1}),e.createVNode(c,{"no-gutters":"",align:"center"},{default:e.withCtx(()=>[e.createVNode(d,{disabled:!o.file,color:"primary",class:"mr-3","data-test":"edit-screen-load",onClick:l.loadFile},{default:e.withCtx(()=>n[7]||(n[7]=[e.createTextVNode(" Load ")])),_:1},8,["disabled","onClick"]),e.createVNode(r,{modelValue:o.file,"onUpdate:modelValue":n[0]||(n[0]=_=>o.file=_),"truncate-length":"15",accept:".txt",label:"Click to select .txt screen file."},null,8,["modelValue"])]),_:1}),e.createVNode(c,{class:"mb-2"},{default:e.withCtx(()=>n[8]||(n[8]=[e.createTextVNode(" Edit the screen definition. ")])),_:1}),e.createVNode(c,{class:"mb-2"},{default:e.withCtx(()=>[e.createElementVNode("pre",{ref:"editor",class:"editor",onContextmenu:n[1]||(n[1]=e.withModifiers((..._)=>l.showContextMenu&&l.showContextMenu(..._),["prevent"]))},null,544),e.createVNode(v,{modelValue:o.contextMenu,"onUpdate:modelValue":n[2]||(n[2]=_=>o.contextMenu=_),target:[o.menuX,o.menuY]},{default:e.withCtx(()=>[e.createVNode(x,null,{default:e.withCtx(()=>[e.createVNode(h,{link:""},{default:e.withCtx(()=>[e.createVNode(a,{onClick:l.openDocumentation},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(o.docsKeyword)+" documentation ",1)]),_:1},8,["onClick"])]),_:1}),e.createVNode(g),e.createVNode(h,{title:"Toggle Vim mode","prepend-icon":"extras:vim",onClick:l.toggleVimMode},null,8,["onClick"])]),_:1})]),_:1},8,["modelValue","target"])]),_:1}),e.createVNode(c,{style:{"max-height":"120px","overflow-y":"auto"}},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.editErrors,(_,S)=>(e.openBlock(),e.createElementBlock("div",{key:S},[e.createElementVNode("span",{class:"text-red",textContent:e.toDisplayString(_)},null,8,D)]))),128))]),_:1}),e.createVNode(c,{class:"mt-5"},{default:e.withCtx(()=>[n[11]||(n[11]=e.createElementVNode("span",null," Ctrl-space brings up autocomplete. Right click keywords for documentation. ",-1)),e.createVNode(p),e.createVNode(d,{class:"mx-2",variant:"outlined","data-test":"edit-screen-cancel",onClick:n[3]||(n[3]=_=>t.$emit("cancel"))},{default:e.withCtx(()=>n[9]||(n[9]=[e.createTextVNode(" Cancel ")])),_:1}),e.createVNode(d,{class:"mx-2",color:"primary","data-test":"edit-screen-save",onClick:n[4]||(n[4]=_=>t.$emit("save",t.editor.getValue()))},{default:e.withCtx(()=>n[10]||(n[10]=[e.createTextVNode(" Save ")])),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const b=C._export_sfc(T,[["render",B],["__scopeId","data-v-65b25a74"]]),I={props:{modelValue:Boolean},data(){return{alert:"",alertType:"success",showAlert:!1,search:"",key:"",keyValue:"",environment:[],headers:[{text:"Key",value:"key"},{text:"Value",value:"value"},{text:"Actions",value:"actions",align:"end",sortable:!1}]}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}}},mounted(){this.update()},methods:{alertHandler:function(t){this.alert=t.text,this.alertType=t.type,this.showAlert=!0},update:function(){y.li.get("/openc3-api/environment").then(t=>{this.environment=t.data}).catch(t=>{})},addEnvironment:function(){y.li.post("/openc3-api/environment",{data:{key:this.key.toUpperCase(),value:this.keyValue}}).then(t=>{`${t.data.name}`,this.update()}).catch(t=>{const n={text:`Failed to add environment variable: ${t}`,type:"error"};this.alertHandler(n)}),this.key="",this.keyValue=""},deleteEnvironment:function(t){this.$dialog.confirm(`Are you sure you want to delete: ${t.key}=${t.value}`,{okText:"Delete",cancelText:"Cancel"}).then(n=>y.li.delete(`/openc3-api/environment/${t.name}`)).then(n=>{const i={text:`Removed environment variable: ${t.name}`,type:"success"};this.alertHandler(i),this.update()}).catch(n=>{const i={text:`Failed to delete environment: ${n}`,type:"error"};this.alertHandler(i)})}}},F={class:"pa-3"};function A(t,n,i,s,o,l){const d=e.resolveComponent("v-spacer"),p=e.resolveComponent("v-toolbar"),m=e.resolveComponent("v-text-field"),c=e.resolveComponent("v-row"),r=e.resolveComponent("v-btn"),a=e.resolveComponent("v-data-table"),h=e.resolveComponent("v-col"),g=e.resolveComponent("v-card-text"),x=e.resolveComponent("v-card"),v=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(v,{modelValue:l.show,"onUpdate:modelValue":n[4]||(n[4]=f=>l.show=f),width:"600"},{default:e.withCtx(()=>[e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("form",{onSubmit:n[3]||(n[3]=e.withModifiers((...f)=>l.addEnvironment&&l.addEnvironment(...f),["prevent"]))},[e.createVNode(p,{height:"24"},{default:e.withCtx(()=>[e.createVNode(d),n[5]||(n[5]=e.createElementVNode("span",null,"Global Environment Variables",-1)),e.createVNode(d)]),_:1}),e.createVNode(g,null,{default:e.withCtx(()=>[e.createElementVNode("div",F,[e.createVNode(c,{dense:"",class:"mb-2"},{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=f=>o.search=f),label:"search",type:"text","data-test":"search","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"compact","clear-icon":"mdi-close-circle-outline",autofocus:"","single-line":"","hide-details":""},null,8,["modelValue"])]),_:1}),e.createVNode(a,{"item-key":"name","hide-default-header":"","data-test":"env-table",search:o.search,headers:o.headers,items:o.environment,"items-per-page":5,"items-per-page-options":[5]},{"item.actions":e.withCtx(({item:f})=>[e.createVNode(r,{icon:"mdi-delete",variant:"text",class:"mt-1","data-test":"item-delete","aria-label":"Delete Environment Variable",onClick:u=>l.deleteEnvironment(f)},null,8,["onClick"])]),_:1},8,["search","headers","items"]),e.createVNode(c,{dense:""},{default:e.withCtx(()=>[e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.key,"onUpdate:modelValue":n[1]||(n[1]=f=>o.key=f),label:"Key","data-test":"env-key"},null,8,["modelValue"])]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[e.createVNode(m,{modelValue:o.keyValue,"onUpdate:modelValue":n[2]||(n[2]=f=>o.keyValue=f),label:"Value","data-test":"env-value"},null,8,["modelValue"])]),_:1})]),_:1}),e.createVNode(c,{dense:""},{default:e.withCtx(()=>[e.createVNode(r,{block:"",type:"submit",color:"primary","data-test":"add-env",disabled:!o.key||!o.keyValue,onClick:e.withModifiers(l.addEnvironment,["prevent"])},{default:e.withCtx(()=>n[6]||(n[6]=[e.createTextVNode(" Add ")])),_:1},8,["disabled","onClick"])]),_:1})])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const M=C._export_sfc(I,[["render",A]]),O={class:"tree-node"},R={class:"content-wrapper"},L=["tabindex"],z={key:1},U={key:2,class:"children"},P={__name:"TreeNode",props:{node:{type:Object,required:!0},search:{type:String,default:""},type:{type:String,default:"open"}},emits:["nodeToggled","request"],setup(t,{emit:n}){const i=t,s=e.ref(i.node.isOpen||!1),o=e.computed(()=>{const r=a=>{var h;return!i.search||a.path.toLowerCase().includes(i.search.toLowerCase())?!0:!!((h=a.children)!=null&&h.some(r))};return r(i.node)});e.watch(()=>i.node.isOpen,r=>{s.value=r}),e.watch(()=>i.search,r=>{r?i.node.isOpen||p():i.node.isOpen&&p()});const l=n,d=r=>{r.children?(p(),i.type==="save"&&l("request",r)):l("request",r)},p=()=>{i.node.children&&(s.value=!s.value,i.node.isOpen=s.value,l("nodeToggled",i.node.id,s.value))},m=(r,a)=>{l("nodeToggled",r,a)},c=r=>{l("request",r)};return(r,a)=>{const h=e.resolveComponent("v-icon"),g=e.resolveComponent("v-btn"),x=e.resolveComponent("tree-node",!0);return e.openBlock(),e.createElementBlock("div",O,[o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"node-content",onClick:a[2]||(a[2]=v=>d(t.node))},[e.createElementVNode("div",R,[t.node.children?(e.openBlock(),e.createBlock(h,{key:0,class:"toggle-icon",style:{"padding-right":"10px"}},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.node.isOpen?"mdi-menu-down":"mdi-menu-right"),1)]),_:1})):e.createCommentVNode("",!0),t.node.children?(e.openBlock(),e.createBlock(h,{key:1,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>a[3]||(a[3]=[e.createTextVNode(e.toDisplayString("mdi-folder"))])),_:1})):t.node.title.includes(".rb")?(e.openBlock(),e.createBlock(h,{key:2,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>a[4]||(a[4]=[e.createTextVNode(e.toDisplayString("mdi-language-ruby"))])),_:1})):t.node.title.includes(".py")?(e.openBlock(),e.createBlock(h,{key:3,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>a[5]||(a[5]=[e.createTextVNode(e.toDisplayString("mdi-language-python"))])),_:1})):(e.openBlock(),e.createBlock(h,{key:4,size:"small",style:{"padding-right":"10px"}},{default:e.withCtx(()=>a[6]||(a[6]=[e.createTextVNode(e.toDisplayString("mdi-file-document"))])),_:1})),e.createElementVNode("span",{class:"title",tabindex:t.node.children?-1:0,onKeyup:a[0]||(a[0]=e.withKeys(v=>d(t.node),["enter"]))},e.toDisplayString(t.node.title),41,L),t.node.title==="__TEMP__"?(e.openBlock(),e.createBlock(g,{key:5,icon:"mdi-delete",variant:"text",style:{"margin-left":"auto"},"aria-label":"Delete",onClick:a[1]||(a[1]=v=>l("delete"))})):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",z)),t.node.children&&t.node.isOpen?(e.openBlock(),e.createElementBlock("div",U,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.node.children,v=>(e.openBlock(),e.createBlock(x,{key:v.id,node:v,search:t.search,type:t.type,onNodeToggled:m,onRequest:c},null,8,["node","search","type"]))),128))])):e.createCommentVNode("",!0)])}}},W=C._export_sfc(P,[["__scopeId","data-v-74233c4c"]]),q={components:{TreeNode:W},props:{type:{type:String,required:!0,validator:function(t){return["open","save"].indexOf(t)!==-1}},apiUrl:String,requireTargetParentDir:Boolean,inputFilename:String,modelValue:Boolean},data(){return{tree:[],items:[],search:null,selectedFile:null,disableButtons:!1,targets:[],targetsRetrieved:[],loading:!0}},computed:{show:{get(){return this.modelValue},set(t){this.$emit("update:modelValue",t)}},title:function(){return this.type==="open"?"File Open":"File Save As..."},submit:function(){return this.type==="open"?"OPEN":"SAVE"},helpText:function(){return this.type==="open"?"Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results. You can also Tab to the files and Enter to select.":"Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results."},error:function(){if(this.selectedFile===""||this.selectedFile===null)return"No file selected must select a file";if(!this.selectedFile.match(this.validFilenameRegex)||this.selectedFile.match(/\.\.|\/\/|\.\/|\/\./)){let t=`${this.selectedFile} is not a valid filename. Must `;return this.requireTargetParentDir&&(t+="be in a target directory and "),t+=`only contain alphanumeric characters (including !-_.*) and a valid extension.
|
|
2
|
-
|
|
3
|
-
For example: TGT1/procedures/test.py or TGT2/lib/inst.rb`,t}return this.type==="save"&&this.selectedFile.match(/\*$/)?`${this.selectedFile} is not a valid filename. Must not end in '*'.`:null},validFilenameRegex:function(){const t="0-9a-zA-Z";let i=`[${`${t}\\/\\!\\-\\_\\.\\*\\'\\(\\)`}]+\\.[${t}]+`;return this.requireTargetParentDir&&(i=`\\/?${`(${this.targets.join("|")})`}\\/${i}`),new RegExp(i)}},created(){y.li.get("/openc3-api/targets").then(t=>{this.targets=t.data,this.targets.push("__TEMP__"),this.targets.forEach(n=>{this.items.push({id:n,disabled:!0,title:n,children:[],path:n}),this.loadFiles(n)}),this.loading=!1})},methods:{calcIcon:function(t){return E.fileIcon(t)},loadFiles:function(t){y.li.get(this.apiUrl,{params:{target:t}}).then(n=>{if(n.data.length===0){this.items=this.items.filter(s=>s.id!==t);return}for(let s of n.data.sort())this.filepath=s,this.insertFile(this.items,2,s);this.inputFilename&&(this.selectedFile=this.inputFilename);const i=this.items.findIndex(s=>s.id===t);i!==-1&&(this.items[i].disabled=!1)}).catch(n=>{this.$emit("error",`Failed to connect to OpenC3. ${n}`)})},clear:function(){this.show=!1,this.overwrite=!1,this.disableButtons=!1},activeFile:function(t){t.length===0?this.selectedFile=null:(this.selectedFile=this.findItem(this.items,t.id),setTimeout(()=>{this.$refs.submitBtn.$el.focus()},100))},findItem:function(t,n){for(let i of t){if(i.id===n)return i.path;if(i.children){const s=this.findItem(i.children,n);if(s)return s}}return null},exists:function(t,n){let i=!1;for(let s of t){if(s.path===n||s.path.length>1&&s.path[s.path.length-1]==="*"&&s.path.slice(0,s.path.length-1)===n)return!0;s.children&&(i=i||this.exists(s.children,n))}return i},success:function(){this.selectedFile!==null&&this.error===null&&(this.type==="open"?this.openSuccess():this.saveSuccess())},deleteTemp:function(){this.$dialog.confirm("Are you sure you want to delete all the temporary files?",{okText:"Delete",cancelText:"Cancel"}).then(t=>y.li.delete("/script-api/scripts/temp_files")).then(t=>{this.$emit("clear-temp"),this.loadFiles("__TEMP__")}).catch(t=>{this.$notify.serious({title:"Error",body:`Failed to remove script temporary files due to ${t}`})})},openSuccess:function(){this.disableButtons=!0,y.li.get(`${this.apiUrl}/${this.selectedFile}`).then(t=>{const n={name:this.selectedFile,contents:t.data.contents};t.data.suites&&(n.suites=JSON.parse(t.data.suites)),t.data.error&&(n.error=t.data.error),t.data.success&&(n.success=t.data.success);const i=t.data.locked,s=t.data.breakpoints;this.$emit("file",{file:n,locked:i,breakpoints:s}),this.clear()}).catch(t=>{this.$emit("error",`Failed to open ${this.selectedFile}. ${t}`),this.clear()})},saveSuccess:function(){this.exists(this.items,this.selectedFile)?this.$dialog.confirm(`Are you sure you want to overwrite: ${this.selectedFile}`,{okText:"Overwrite",cancelText:"Cancel"}).then(n=>{this.$emit("filename",this.selectedFile),this.clear()}).catch(n=>{}):(this.$emit("filename",this.selectedFile),this.clear())},insertFile:function(t,n,i){let s=i.split("/");if(s.length===1){t.push({id:this.filepath,title:s[0],file:"ruby",path:this.filepath});return}const o=t.findIndex(l=>l.title===s[0]);o===-1?(t.push({id:this.filepath.split("/").slice(0,n-1).join("/"),title:s[0],children:[],path:this.filepath.split("/").slice(0,n-1).join("/")}),this.insertFile(t[t.length-1].children,n+1,s.slice(1).join("/"))):this.insertFile(t[o].children,n+1,s.slice(1).join("/"))}}},K={class:"pa-3"},Z={class:"overflow-y-auto tree-container"};function G(t,n,i,s,o,l){const d=e.resolveComponent("v-progress-circular"),p=e.resolveComponent("v-overlay"),m=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-toolbar"),r=e.resolveComponent("v-row"),a=e.resolveComponent("v-text-field"),h=e.resolveComponent("tree-node"),g=e.resolveComponent("v-btn"),x=e.resolveComponent("v-card-text"),v=e.resolveComponent("v-card"),f=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(f,{modelValue:l.show,"onUpdate:modelValue":n[4]||(n[4]=u=>l.show=u),width:"600",onKeydown:n[5]||(n[5]=e.withKeys(u=>l.success(),["enter"]))},{default:e.withCtx(()=>[e.createVNode(v,null,{default:e.withCtx(()=>[e.createVNode(p,{"model-value":o.loading},{default:e.withCtx(()=>[e.createVNode(d,{indeterminate:"",absolute:"",size:"64"})]),_:1},8,["model-value"]),e.createElementVNode("form",{onSubmit:n[3]||(n[3]=e.withModifiers((...u)=>l.success&&l.success(...u),["prevent"]))},[e.createVNode(c,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(l.title),1),e.createVNode(m)]),_:1}),e.createVNode(x,null,{default:e.withCtx(()=>[e.createElementVNode("div",K,[e.createVNode(r,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.helpText),1)]),_:1}),e.createVNode(r,{dense:"",class:"mt-5"},{default:e.withCtx(()=>[e.createVNode(a,{modelValue:o.search,"onUpdate:modelValue":n[0]||(n[0]=u=>o.search=u),flat:"",autofocus:"","hide-details":"",clearable:"",label:"Search","prepend-inner-icon":"mdi-magnify",density:"compact","data-test":"file-open-save-search"},null,8,["modelValue"])]),_:1}),e.createElementVNode("div",Z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.items,u=>(e.openBlock(),e.createBlock(h,{key:`${u.id}`,node:u,search:o.search,type:i.type,onRequest:l.activeFile,onDelete:l.deleteTemp},null,8,["node","search","type","onRequest","onDelete"]))),128))]),e.createVNode(r,{class:"my-2"},{default:e.withCtx(()=>[e.createVNode(a,{modelValue:o.selectedFile,"onUpdate:modelValue":n[1]||(n[1]=u=>o.selectedFile=u),"hide-details":"",label:"Filename","data-test":"file-open-save-filename",disabled:i.type==="open"},null,8,["modelValue","disabled"])]),_:1}),e.createVNode(r,{dense:""},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:"my-2 text-red",style:{"white-space":"pre-line"}},e.toDisplayString(l.error),513),[[e.vShow,l.error]])]),_:1}),e.createVNode(r,{class:"mt-2"},{default:e.withCtx(()=>[e.createVNode(m),e.createVNode(g,{variant:"outlined",class:"mx-2","data-test":"file-open-save-cancel-btn",disabled:o.disableButtons,onClick:n[2]||(n[2]=u=>l.show=!1)},{default:e.withCtx(()=>n[6]||(n[6]=[e.createTextVNode(" Cancel ")])),_:1},8,["disabled"]),e.createVNode(g,{ref:"submitBtn",type:"submit",color:"primary",class:"mx-2","data-test":"file-open-save-submit-btn",disabled:o.disableButtons||!!l.error,onClick:e.withModifiers(l.success,["prevent"])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.submit),1)]),_:1},8,["disabled","onClick"])]),_:1})])]),_:1})],32)]),_:1})]),_:1},8,["modelValue"])}const X=C._export_sfc(q,[["render",G]]),w=20,Y={components:{EditScreenDialog:b},mixins:[y.WidgetComponents],props:{target:{type:String,default:""},screen:{type:String,default:""},definition:{type:String,default:""},keywords:{type:Array,default:()=>[]},initialFloated:{type:Boolean,default:!1},initialTop:{type:Number,default:0},initialLeft:{type:Number,default:0},initialZ:{type:Number,default:0},minZ:{type:Number,default:0},fixFloated:{type:Boolean,default:!1},count:{type:Number,default:0},showClose:{type:Boolean,default:!0},timeZone:{type:String,default:"local"},inline:{type:Boolean,default:!1}},emits:["close-screen","delete-screen","drag-screen","edit-screen","float-screen","min-max-screen","unfloat-screen"],data(){return{api:null,backup:"",currentDefinition:this.definition,editDialog:!1,expand:!0,configParser:null,configError:!1,currentLayout:null,layoutStack:[],namedWidgets:{},dynamicWidgets:[],width:null,height:null,staleTime:30,cacheTimeout:.1,globalSettings:[],substitute:!1,original_target_name:null,force_substitute:!1,pollingPeriod:1,errors:[],errorDialog:!1,screenKey:null,dragX:0,dragY:0,floated:this.initialFloated,top:this.initialTop,left:this.initialLeft,zIndex:this.initialZ,changeCounter:0,screenItems:[],screenValues:{},updateCounter:0,screenId:y.lodashExports.uniqueId("openc3-screen_")}},computed:{error:function(){if(this.errorDialog&&this.errors.length>0){let t=new Set,n="";for(const i of this.errors){if(t.has(i.message))continue;let s=`${i.time}: (${i.type}) ${i.message}
|
|
4
|
-
`;n+=s,t.add(i.message)}return n}return null},computedStyle(){var i;let t={};const n=this.width||((i=this.$refs.bar)==null?void 0:i.clientWidth);return this.floated&&(t.position="absolute",t.top=this.top+"px",t.left=this.left+"px",t.width=n+"px"),t}},watch:{count:{handler(t,n){this.currentDefinition=this.definition,this.rerender()}}},errorCaptured(t,n,i){return this.errors.length<w&&(t.usage?this.errors.push({type:"usage",message:t.message,usage:t.usage,line:t.line,lineNumber:t.lineNumber,time:new Date().getTime()}):this.errors.push({type:"error",message:t,time:new Date().getTime()}),console.log(this.errors),this.configError=!0),!1},created(){this.api=new y.pi,this.configParser=new y.fi,this.parseDefinition(),this.screenKey=Math.floor(Math.random()*1e6)},mounted(){this.updateRefreshInterval(),this.floated&&(this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex)},unmounted(){this.updater!=null&&(clearInterval(this.updater),this.updater=null)},methods:{open(t,n){this.$parent.showScreen(t,n)},close(t,n){this.$parent.closeScreenByName(t,n)},closeAll(){this.$parent.closeAll()},clearErrors:function(){this.errors=[],this.configError=!1},updateRefreshInterval:function(){let t=this.pollingPeriod*1e3;this.updater&&clearInterval(this.updater),this.updater=setInterval(()=>{this.update()},t)},parseDefinition:function(){if(this.clearErrors(),this.screenItems=[],this.namedWidgets={},this.layoutStack=[],this.dynamicWidgets=[],this.layoutStack.push({type:"VerticalWidget",parameters:[],widgets:[]}),this.currentLayout=this.layoutStack[this.layoutStack.length-1],this.configParser.parse_string(this.currentDefinition,"",!1,!0,(t,n,i,s)=>{if(t)switch(t){case"SCREEN":this.configParser.verify_num_parameters(3,4,`${t} <Width or AUTO> <Height or AUTO> <Polling Period>`),this.width=parseInt(n[0]),this.height=parseInt(n[1]),this.pollingPeriod=parseFloat(n[2]);break;case"END":this.configParser.verify_num_parameters(0,0,`${t}`),this.layoutStack.pop(),this.currentLayout=this.layoutStack[this.layoutStack.length-1];break;case"STALE_TIME":this.configParser.verify_num_parameters(1,1,`${t} <Time (s)>`),this.staleTime=parseInt(n[0]);break;case"SETTING":case"SUBSETTING":(this.currentLayout.widgets[this.currentLayout.widgets.length-1]??this.currentLayout).settings.push(n);break;case"GLOBAL_SETTING":case"GLOBAL_SUBSETTING":this.globalSettings.push(n);break;default:this.processWidget(t,n,i,s);break}}),typeof this.layoutStack[0]>"u"){let t=[],n=[];for(const i of this.dynamicWidgets)t.push(i.name),n.push(i.lineNumber);this.errors.length<w&&(this.errors.push({type:"usage",message:`Unknown widget! Are these widgets: ${t.join(",")}?`,lineNumber:n.join(","),time:new Date().getTime()}),this.configError=!0),this.layoutStack[0]={type:"VerticalWidget",parameters:[],widgets:[]}}else this.applyGlobalSettings(this.layoutStack[0].widgets)},openEdit:function(){this.backup=this.currentDefinition.repeat(1),this.editDialog=!0},upScreen:function(){this.zIndex+=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},downScreen:function(){this.zIndex>this.minZ&&(this.zIndex-=1,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex]))},floatScreen:function(){if(this.floated)this.$refs.bar.onmousedown=null,this.$refs.bar.parentElement.parentElement.style="z-index: 0",this.floated=!1,this.$emit("unfloat-screen",[this.floated,this.top,this.left,this.zIndex]);else{let t=this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect(),n=this.$refs.bar.getBoundingClientRect();this.top=n.top-t.top-5,this.left=n.left-t.left-5,this.$refs.bar.onmousedown=this.dragMouseDown,this.$refs.bar.parentElement.parentElement.style="z-index: "+this.zIndex,this.floated=!0,this.$emit("float-screen",[this.floated,this.top,this.left,this.zIndex])}},dragMouseDown:function(t){t=t||window.event,t.preventDefault(),this.dragX=t.clientX,this.dragY=t.clientY,document.onmouseup=this.closeDragElement,document.onmousemove=this.elementDrag},elementDrag:function(t){t=t||window.event,t.preventDefault();let n=this.dragX-t.clientX,i=this.dragY-t.clientY;this.dragX=t.clientX,this.dragY=t.clientY,this.top=this.$refs.bar.offsetTop-i,this.left=this.$refs.bar.offsetLeft-n,this.$emit("drag-screen",[this.floated,this.top,this.left,this.zIndex])},closeDragElement:function(){document.onmouseup=null,document.onmousemove=null},rerender:function(){this.parseDefinition(),this.updateRefreshInterval(),this.screenKey=Math.floor(Math.random()*1e6),this.$nextTick(function(){this.clearErrors(),this.$emit("edit-screen")})},cancelEdit:function(){this.file=null,this.editDialog=!1,this.currentDefinition=this.backup,this.rerender()},saveEdit:function(t){this.editDialog=!1,this.currentDefinition=t,this.rerender(),this.$nextTick(function(){y.li.post("/openc3-api/screen/",{data:{scope:window.openc3Scope,target:this.target,screen:this.screen,text:this.currentDefinition}},0)})},deleteScreen:function(){this.editDialog=!1,y.li.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(t=>{this.$emit("delete-screen")})},minMaxTransition:function(){this.expand=!this.expand,this.$emit("min-max-screen")},processWidget:function(t,n,i,s){let o=null;t==="NAMED_WIDGET"&&(this.configParser.verify_num_parameters(2,null,`${t} <Widget Name> <Widget Type> <Widget Settings... (optional)>`),o=n[0].toUpperCase(),t=n[1].toUpperCase(),n=n.slice(2,n.length));const l=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase()+"Widget";let d=[];if(d.push(["__SCREEN_ID__",this.screenId]),o!==null&&d.push(["NAMED_WIDGET",o]),t==="VERTICAL"||t==="VERTICALBOX"||t==="HORIZONTAL"||t==="HORIZONTALBOX"||t==="MATRIXBYCOLUMNS"||t==="TABBOOK"||t==="TABITEM"||t==="CANVAS"||t==="RADIOGROUP"||t==="SCROLLWINDOW"){const p={type:l,parameters:n,settings:d,screenValues:this.screenValues,screenTimeZone:this.timeZone,widgets:[]};this.layoutStack.push(p),this.currentLayout.widgets.push(p),this.currentLayout=p}else if(this.$options.components[l])this.currentLayout.widgets.push({type:l,target:this.target,parameters:n,settings:d,screenValues:this.screenValues,screenTimeZone:this.timeZone,line:i,lineNumber:s});else{let p={type:"DynamicWidget",target:this.target,parameters:n,settings:d,screenValues:this.screenValues,screenTimeZone:this.timeZone,name:l,line:i,lineNumber:s};this.currentLayout.widgets.push(p),this.dynamicWidgets.push(p)}},applyGlobalSettings:function(t){t.forEach(n=>{this.globalSettings.forEach(i=>{n.type.toLowerCase()===i[0].toLowerCase()+"widget"&&(n.settings.find(o=>o[0]===i[1])||n.settings.push(i.slice(1)))}),n.widgets&&this.applyGlobalSettings(n.widgets)})},update:function(){this.screenItems.length!==0&&this.configError===!1&&this.api.get_tlm_values(this.screenItems,this.staleTime,this.cacheTimeout).then(t=>{this.clearErrors(),this.updateValues(t)}).catch(t=>{let n=JSON.stringify(t,null,2);n.includes("no response received")||(this.configError=!0),this.errors.find(i=>i.message===n)||this.errors.length<w&&this.errors.push({type:"error",message:n,time:new Date().getTime()})})},updateValues:function(t){this.updateCounter+=1;for(let n=0;n<t.length;n++)t[n].push(this.updateCounter),this.screenValues[this.screenItems[n]]=t[n]},addItem:function(t){this.screenItems.push(t),this.screenValues[t]=[null,null,0]},deleteItem:function(t){let n=this.screenItems.indexOf(t);this.screenItems.splice(n,1)}}},H={ref:"screen",class:"pa-1",style:{position:"relative"}},j={key:1,class:"pa-1",style:{position:"relative"}};function $(t,n,i,s,o,l){const d=e.resolveComponent("v-btn"),p=e.resolveComponent("v-tooltip"),m=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-toolbar"),r=e.resolveComponent("v-overlay"),a=e.resolveComponent("vertical-widget"),h=e.resolveComponent("v-expand-transition"),g=e.resolveComponent("v-card"),x=e.resolveComponent("edit-screen-dialog"),v=e.resolveComponent("v-textarea"),f=e.resolveComponent("v-dialog");return e.openBlock(),e.createElementBlock("div",{ref:"bar",style:e.normalizeStyle(l.computedStyle)},[i.inline?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(g,{key:0,"min-height":o.height,"min-width":o.width,style:{cursor:"default"}},{default:e.withCtx(()=>[e.createVNode(c,{height:"24"},{default:e.withCtx(()=>[e.withDirectives(e.createVNode(d,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[0]||(n[0]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),e.createVNode(d,{icon:"mdi-pencil",variant:"text",density:"compact","data-test":"edit-screen-icon","aria-label":"Edit Screen",onClick:l.openEdit},null,8,["onClick"]),i.fixFloated?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(p,{key:0,"open-delay":600,location:"top"},{activator:e.withCtx(({props:u})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(u)),[e.createVNode(d,{icon:o.floated?"mdi-balloon":"mdi-view-grid-outline",variant:"text",density:"compact","data-test":"float-screen-icon","aria-label":o.floated?"Unfloat Screen":"Float Screen",onClick:l.floatScreen},null,8,["icon","aria-label","onClick"])],16)]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(o.floated?"Unfloat Screen":"Float Screen"),1)]),_:1})),o.floated?(e.openBlock(),e.createBlock(p,{key:1,"open-delay":600,location:"top"},{activator:e.withCtx(({props:u})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(u)),[e.createVNode(d,{icon:"mdi-arrow-up",variant:"text",density:"compact","data-test":"up-screen-icon","aria-label":"Move Screen Up",onClick:l.upScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[5]||(n[5]=e.createElementVNode("span",null," Move Screen Up ",-1))]),_:1})):e.createCommentVNode("",!0),o.floated&&o.zIndex>i.minZ?(e.openBlock(),e.createBlock(p,{key:2,"open-delay":600,location:"top"},{activator:e.withCtx(({props:u})=>[e.createElementVNode("div",e.normalizeProps(e.guardReactiveProps(u)),[e.createVNode(d,{icon:"mdi-arrow-down",variant:"text",density:"compact","data-test":"down-screen-icon","aria-label":"Move Screen Down",onClick:l.downScreen},null,8,["onClick"])],16)]),default:e.withCtx(()=>[n[6]||(n[6]=e.createElementVNode("span",null," Move Screen Down ",-1))]),_:1})):e.createCommentVNode("",!0),e.createVNode(m),e.createElementVNode("span",null,e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen),1),e.createVNode(m),o.expand?(e.openBlock(),e.createBlock(d,{key:3,icon:"mdi-window-minimize",variant:"text",density:"compact","data-test":"minimize-screen-icon","aria-label":"Minimize Screen",onClick:l.minMaxTransition},null,8,["onClick"])):(e.openBlock(),e.createBlock(d,{key:4,icon:"mdi-window-maximize",variant:"text",density:"compact","data-test":"maximize-screen-icon","aria-label":"Maximize Screen",onClick:l.minMaxTransition},null,8,["onClick"])),i.showClose?(e.openBlock(),e.createBlock(d,{key:5,icon:"mdi-close-box",variant:"text",density:"compact","data-test":"close-screen-icon","aria-label":"Close Screen",onClick:n[1]||(n[1]=u=>t.$emit("close-screen"))})):e.createCommentVNode("",!0)]),_:1}),o.editDialog?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(h,{key:0},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",H,[e.createVNode(r,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",absolute:"",attach:"","scroll-strategy":"none"},null,8,["model-value"]),(e.openBlock(),e.createBlock(a,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:l.addItem,onDeleteItem:l.deleteItem,onOpen:l.open,onClose:l.close,onCloseAll:l.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))],512),[[e.vShow,o.expand]])]),_:1}))]),_:1},8,["min-height","min-width"])),i.inline?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(r,{style:{"pointer-events":"none"},"model-value":o.errors.length!==0,opacity:"0.8",absolute:"",attach:"","scroll-strategy":"none"},null,8,["model-value"]),e.withDirectives(e.createVNode(d,{icon:"mdi-alert",variant:"text",density:"compact","data-test":"error-graph-icon","aria-label":"Show Errors",onClick:n[2]||(n[2]=()=>{o.errorDialog=!0})},null,512),[[e.vShow,o.errors.length!==0]]),(e.openBlock(),e.createBlock(a,{key:o.screenKey,widgets:o.layoutStack[0].widgets,"screen-values":o.screenValues,"screen-time-zone":i.timeZone,onAddItem:l.addItem,onDeleteItem:l.deleteItem,onOpen:l.open,onClose:l.close,onCloseAll:l.closeAll},null,8,["widgets","screen-values","screen-time-zone","onAddItem","onDeleteItem","onOpen","onClose","onCloseAll"]))])):e.createCommentVNode("",!0),o.editDialog?(e.openBlock(),e.createBlock(x,{key:2,modelValue:o.editDialog,"onUpdate:modelValue":n[3]||(n[3]=u=>o.editDialog=u),target:i.target,screen:i.screen,definition:o.currentDefinition,keywords:i.keywords,errors:o.errors,onSave:l.saveEdit,onCancel:l.cancelEdit,onDelete:l.deleteScreen},null,8,["modelValue","target","screen","definition","keywords","errors","onSave","onCancel","onDelete"])):e.createCommentVNode("",!0),e.createVNode(f,{modelValue:o.errorDialog,"onUpdate:modelValue":n[4]||(n[4]=u=>o.errorDialog=u),width:"60vw"},{default:e.withCtx(()=>[e.createVNode(c,{height:"24"},{default:e.withCtx(()=>[e.createVNode(m),e.createElementVNode("span",null," Screen: "+e.toDisplayString(i.target)+" "+e.toDisplayString(i.screen)+" Errors ",1),e.createVNode(m)]),_:1}),e.createVNode(g,null,{default:e.withCtx(()=>[e.createVNode(v,{class:"errors",readonly:"",rows:"13","model-value":l.error},null,8,["model-value"])]),_:1})]),_:1},8,["modelValue"])],4)}const J=C._export_sfc(Y,[["render",$],["__scopeId","data-v-66e2e816"]]);exports.EditScreenDialog=b;exports.EnvironmentDialog=M;exports.FileOpenSaveDialog=X;exports.Openc3Screen=J;exports.ScreenCompleter=k;
|
|
5
|
-
//# sourceMappingURL=Openc3Screen-dtpBWZdA.cjs.map
|