@openc3/vue-common 7.0.0-rc3 → 7.0.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-B2-n1K3r.cjs → ArrayWidget-BsAUsmBz.cjs} +2 -2
- package/dist/{ArrayWidget-B2-n1K3r.cjs.map → ArrayWidget-BsAUsmBz.cjs.map} +1 -1
- package/dist/{ArrayWidget-dQWDMMrn.js → ArrayWidget-D2UrA5Db.js} +4 -4
- package/dist/{ArrayWidget-dQWDMMrn.js.map → ArrayWidget-D2UrA5Db.js.map} +1 -1
- package/dist/{ArrayplotWidget-DCnbK37q.js → ArrayplotWidget-CDNRxI2F.js} +3 -3
- package/dist/{ArrayplotWidget-DCnbK37q.js.map → ArrayplotWidget-CDNRxI2F.js.map} +1 -1
- package/dist/{ArrayplotWidget-BmBcPGUR.cjs → ArrayplotWidget-ChHMy5_L.cjs} +2 -2
- package/dist/{ArrayplotWidget-BmBcPGUR.cjs.map → ArrayplotWidget-ChHMy5_L.cjs.map} +1 -1
- package/dist/{BarColumn-CkecDAzn.cjs → BarColumn-e-sSkSvE.cjs} +2 -2
- package/dist/{BarColumn-CkecDAzn.cjs.map → BarColumn-e-sSkSvE.cjs.map} +1 -1
- package/dist/{BarColumn-DmOxuCa9.js → BarColumn-nSFR2LZF.js} +3 -3
- package/dist/{BarColumn-DmOxuCa9.js.map → BarColumn-nSFR2LZF.js.map} +1 -1
- package/dist/{BlockWidget-UejKxAxY.js → BlockWidget-C-WB0Q2m.js} +4 -4
- package/dist/{BlockWidget-UejKxAxY.js.map → BlockWidget-C-WB0Q2m.js.map} +1 -1
- package/dist/{BlockWidget-BZXHLTJt.cjs → BlockWidget-DJpyQiec.cjs} +2 -2
- package/dist/{BlockWidget-BZXHLTJt.cjs.map → BlockWidget-DJpyQiec.cjs.map} +1 -1
- package/dist/{ButtonWidget-DtAkhzCN.js → ButtonWidget-rS7sVb7m.js} +4 -4
- package/dist/{ButtonWidget-DtAkhzCN.js.map → ButtonWidget-rS7sVb7m.js.map} +1 -1
- package/dist/{ButtonWidget-CzRyY1N5.cjs → ButtonWidget-rkOE5b8G.cjs} +2 -2
- package/dist/{ButtonWidget-CzRyY1N5.cjs.map → ButtonWidget-rkOE5b8G.cjs.map} +1 -1
- package/dist/{CanvasWidget-YXQ8TLqA.js → CanvasWidget-DuWolVCW.js} +2 -2
- package/dist/{CanvasWidget-YXQ8TLqA.js.map → CanvasWidget-DuWolVCW.js.map} +1 -1
- package/dist/{CanvasWidget-cQqNxspP.cjs → CanvasWidget-Dv7_QUJY.cjs} +2 -2
- package/dist/{CanvasWidget-cQqNxspP.cjs.map → CanvasWidget-Dv7_QUJY.cjs.map} +1 -1
- package/dist/{CanvasdotWidget-BbmhHQV_.js → CanvasdotWidget-B42YizA1.js} +2 -2
- package/dist/{CanvasdotWidget-BbmhHQV_.js.map → CanvasdotWidget-B42YizA1.js.map} +1 -1
- package/dist/{CanvasdotWidget-CMIw-ga4.cjs → CanvasdotWidget-E1OgFBVZ.cjs} +2 -2
- package/dist/{CanvasdotWidget-CMIw-ga4.cjs.map → CanvasdotWidget-E1OgFBVZ.cjs.map} +1 -1
- package/dist/{CanvasimageWidget-CJf5NYEj.js → CanvasimageWidget-DMHdDTSs.js} +3 -3
- package/dist/{CanvasimageWidget-CJf5NYEj.js.map → CanvasimageWidget-DMHdDTSs.js.map} +1 -1
- package/dist/{CanvasimageWidget-DXxtYjGG.cjs → CanvasimageWidget-ysw78z4C.cjs} +2 -2
- package/dist/{CanvasimageWidget-DXxtYjGG.cjs.map → CanvasimageWidget-ysw78z4C.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-VPKlJrxM.cjs → CanvasimagevalueWidget-Bc-VYXe7.cjs} +2 -2
- package/dist/{CanvasimagevalueWidget-VPKlJrxM.cjs.map → CanvasimagevalueWidget-Bc-VYXe7.cjs.map} +1 -1
- package/dist/{CanvasimagevalueWidget-D86eJXbs.js → CanvasimagevalueWidget-ns-5S1HA.js} +3 -3
- package/dist/{CanvasimagevalueWidget-D86eJXbs.js.map → CanvasimagevalueWidget-ns-5S1HA.js.map} +1 -1
- package/dist/{CanvaslabelWidget-BgGRS0NS.cjs → CanvaslabelWidget-6h59qJY8.cjs} +2 -2
- package/dist/{CanvaslabelWidget-BgGRS0NS.cjs.map → CanvaslabelWidget-6h59qJY8.cjs.map} +1 -1
- package/dist/{CanvaslabelWidget-TkrVd-Dg.js → CanvaslabelWidget-DElES3gU.js} +2 -2
- package/dist/{CanvaslabelWidget-TkrVd-Dg.js.map → CanvaslabelWidget-DElES3gU.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-BwsIN_MT.js → CanvaslabelvalueWidget-B2B5KlUm.js} +2 -2
- package/dist/{CanvaslabelvalueWidget-BwsIN_MT.js.map → CanvaslabelvalueWidget-B2B5KlUm.js.map} +1 -1
- package/dist/{CanvaslabelvalueWidget-W2QzOkQw.cjs → CanvaslabelvalueWidget-BLIgF8xi.cjs} +2 -2
- package/dist/{CanvaslabelvalueWidget-W2QzOkQw.cjs.map → CanvaslabelvalueWidget-BLIgF8xi.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-yT7FUWs8.cjs → CanvaslineWidget-CxZGCwVF.cjs} +2 -2
- package/dist/{CanvaslineWidget-yT7FUWs8.cjs.map → CanvaslineWidget-CxZGCwVF.cjs.map} +1 -1
- package/dist/{CanvaslineWidget-BjBvF-vY.js → CanvaslineWidget-DaHxgGyM.js} +2 -2
- package/dist/{CanvaslineWidget-BjBvF-vY.js.map → CanvaslineWidget-DaHxgGyM.js.map} +1 -1
- package/dist/{CanvaslinevalueWidget-Dj4tsTBp.cjs → CanvaslinevalueWidget-BljeuN4S.cjs} +2 -2
- package/dist/{CanvaslinevalueWidget-Dj4tsTBp.cjs.map → CanvaslinevalueWidget-BljeuN4S.cjs.map} +1 -1
- package/dist/{CanvaslinevalueWidget-krBLp9yB.js → CanvaslinevalueWidget-CrtDsSOP.js} +2 -2
- package/dist/{CanvaslinevalueWidget-krBLp9yB.js.map → CanvaslinevalueWidget-CrtDsSOP.js.map} +1 -1
- package/dist/{CheckbuttonWidget-IMrIK9q4.js → CheckbuttonWidget-BK4SgIu7.js} +2 -2
- package/dist/{CheckbuttonWidget-IMrIK9q4.js.map → CheckbuttonWidget-BK4SgIu7.js.map} +1 -1
- package/dist/{CheckbuttonWidget-CT28NPNo.cjs → CheckbuttonWidget-By46VH2e.cjs} +2 -2
- package/dist/{CheckbuttonWidget-CT28NPNo.cjs.map → CheckbuttonWidget-By46VH2e.cjs.map} +1 -1
- package/dist/{ClassificationBanners-DC__VXBX.cjs → ClassificationBanners-CHQX3t7t.cjs} +2 -2
- package/dist/{ClassificationBanners-DC__VXBX.cjs.map → ClassificationBanners-CHQX3t7t.cjs.map} +1 -1
- package/dist/{ClassificationBanners-DiIkXqna.js → ClassificationBanners-DGl2HUKd.js} +2 -2
- package/dist/{ClassificationBanners-DiIkXqna.js.map → ClassificationBanners-DGl2HUKd.js.map} +1 -1
- package/dist/{ComboboxWidget-hFBSBFwy.cjs → ComboboxWidget-CHFTOmhZ.cjs} +2 -2
- package/dist/{ComboboxWidget-hFBSBFwy.cjs.map → ComboboxWidget-CHFTOmhZ.cjs.map} +1 -1
- package/dist/{ComboboxWidget-C9Zlc2Hy.js → ComboboxWidget-CciRWuKq.js} +2 -2
- package/dist/{ComboboxWidget-C9Zlc2Hy.js.map → ComboboxWidget-CciRWuKq.js.map} +1 -1
- package/dist/{CriticalCmdDialog-CCaStsM-.cjs → CriticalCmdDialog-BWrwpTNK.cjs} +2 -2
- package/dist/{CriticalCmdDialog-CCaStsM-.cjs.map → CriticalCmdDialog-BWrwpTNK.cjs.map} +1 -1
- package/dist/{CriticalCmdDialog-Cp-ykpQb.js → CriticalCmdDialog-C5EZDRSZ.js} +2 -2
- package/dist/{CriticalCmdDialog-Cp-ykpQb.js.map → CriticalCmdDialog-C5EZDRSZ.js.map} +1 -1
- package/dist/{DateWidget-C_QpCTxN.cjs → DateWidget-Bb6juAYs.cjs} +2 -2
- package/dist/{DateWidget-C_QpCTxN.cjs.map → DateWidget-Bb6juAYs.cjs.map} +1 -1
- package/dist/{DateWidget-Y6WAFGGt.js → DateWidget-DwgQ3Jik.js} +2 -2
- package/dist/{DateWidget-Y6WAFGGt.js.map → DateWidget-DwgQ3Jik.js.map} +1 -1
- package/dist/{DetailsDialog-DznGAE6i.js → DetailsDialog-CspQjoR5.js} +3 -3
- package/dist/{DetailsDialog-DznGAE6i.js.map → DetailsDialog-CspQjoR5.js.map} +1 -1
- package/dist/{DetailsDialog-Bq9BPuoe.cjs → DetailsDialog-D_my0nhs.cjs} +2 -2
- package/dist/{DetailsDialog-Bq9BPuoe.cjs.map → DetailsDialog-D_my0nhs.cjs.map} +1 -1
- package/dist/{EventListDialog-CktWO2jn.js → EventListDialog-DL2HHNQG.js} +9 -6
- package/dist/EventListDialog-DL2HHNQG.js.map +1 -0
- package/dist/EventListDialog-DO32zY2U.cjs +2 -0
- package/dist/EventListDialog-DO32zY2U.cjs.map +1 -0
- package/dist/{FilechecksumWidget-VbLODmHh.js → FilechecksumWidget-BS281Q0h.js} +3 -3
- package/dist/{FilechecksumWidget-VbLODmHh.js.map → FilechecksumWidget-BS281Q0h.js.map} +1 -1
- package/dist/{FilechecksumWidget-BZdmiTbb.cjs → FilechecksumWidget-DMpuLZJ5.cjs} +2 -2
- package/dist/{FilechecksumWidget-BZdmiTbb.cjs.map → FilechecksumWidget-DMpuLZJ5.cjs.map} +1 -1
- package/dist/{FiledisplayWidget-BI7GAQ4d.cjs → FiledisplayWidget-BoD7LuLP.cjs} +2 -2
- package/dist/{FiledisplayWidget-BI7GAQ4d.cjs.map → FiledisplayWidget-BoD7LuLP.cjs.map} +1 -1
- package/dist/{FiledisplayWidget-kixqcLtx.js → FiledisplayWidget-C9YdXDdv.js} +3 -3
- package/dist/{FiledisplayWidget-kixqcLtx.js.map → FiledisplayWidget-C9YdXDdv.js.map} +1 -1
- package/dist/{FormatvalueWidget-I1y_kf9t.cjs → FormatvalueWidget-DfvTVSs-.cjs} +2 -2
- package/dist/{FormatvalueWidget-I1y_kf9t.cjs.map → FormatvalueWidget-DfvTVSs-.cjs.map} +1 -1
- package/dist/{FormatvalueWidget--djAS0BE.js → FormatvalueWidget-dfmQfrNA.js} +3 -3
- package/dist/{FormatvalueWidget--djAS0BE.js.map → FormatvalueWidget-dfmQfrNA.js.map} +1 -1
- package/dist/{Graph-GhpiUBKI.js → Graph-BTtGIbYG.js} +10 -6
- package/dist/Graph-BTtGIbYG.js.map +1 -0
- package/dist/Graph-Cy2LrwoK.cjs +2 -0
- package/dist/Graph-Cy2LrwoK.cjs.map +1 -0
- package/dist/{GraphWidget-8T08osON.js → GraphWidget-CWJ4Yb26.js} +2 -2
- package/dist/{GraphWidget-8T08osON.js.map → GraphWidget-CWJ4Yb26.js.map} +1 -1
- package/dist/{GraphWidget-Bzo-klWV.cjs → GraphWidget-XjxjI3og.cjs} +2 -2
- package/dist/{GraphWidget-Bzo-klWV.cjs.map → GraphWidget-XjxjI3og.cjs.map} +1 -1
- package/dist/{HorizontalWidget-CAf9I0CU.cjs → HorizontalWidget-BeW4b13V.cjs} +2 -2
- package/dist/{HorizontalWidget-CAf9I0CU.cjs.map → HorizontalWidget-BeW4b13V.cjs.map} +1 -1
- package/dist/{HorizontalWidget-CusI1RiA.js → HorizontalWidget-DFAqF95S.js} +2 -2
- package/dist/{HorizontalWidget-CusI1RiA.js.map → HorizontalWidget-DFAqF95S.js.map} +1 -1
- package/dist/{HorizontalboxWidget-D5fIhINf.js → HorizontalboxWidget-CL1xEhDj.js} +5 -5
- package/dist/{HorizontalboxWidget-D5fIhINf.js.map → HorizontalboxWidget-CL1xEhDj.js.map} +1 -1
- package/dist/{HorizontalboxWidget-B7E5GEPu.cjs → HorizontalboxWidget-DdPv_6qb.cjs} +2 -2
- package/dist/{HorizontalboxWidget-B7E5GEPu.cjs.map → HorizontalboxWidget-DdPv_6qb.cjs.map} +1 -1
- package/dist/{HorizontallineWidget-DqLKGhdz.cjs → HorizontallineWidget-BdWOnioI.cjs} +2 -2
- package/dist/{HorizontallineWidget-DqLKGhdz.cjs.map → HorizontallineWidget-BdWOnioI.cjs.map} +1 -1
- package/dist/{HorizontallineWidget-CnRlq7hi.js → HorizontallineWidget-DPiADCAy.js} +2 -2
- package/dist/{HorizontallineWidget-CnRlq7hi.js.map → HorizontallineWidget-DPiADCAy.js.map} +1 -1
- package/dist/{IframeWidget-DtF44NYM.js → IframeWidget-BsDu4b17.js} +2 -2
- package/dist/{IframeWidget-DtF44NYM.js.map → IframeWidget-BsDu4b17.js.map} +1 -1
- package/dist/{IframeWidget-BMtv8io0.cjs → IframeWidget-Z12pG6JT.cjs} +2 -2
- package/dist/{IframeWidget-BMtv8io0.cjs.map → IframeWidget-Z12pG6JT.cjs.map} +1 -1
- package/dist/{ImageLoader-B5rGuJ_H.js → ImageLoader-CT4rnwWn.js} +2 -2
- package/dist/{ImageLoader-B5rGuJ_H.js.map → ImageLoader-CT4rnwWn.js.map} +1 -1
- package/dist/{ImageLoader-jcIDHdUq.cjs → ImageLoader-CZ0Wx_Ua.cjs} +2 -2
- package/dist/{ImageLoader-jcIDHdUq.cjs.map → ImageLoader-CZ0Wx_Ua.cjs.map} +1 -1
- package/dist/{ImageviewerWidget-Ciu80vaC.js → ImageviewerWidget-BQbrz2WL.js} +2 -2
- package/dist/{ImageviewerWidget-Ciu80vaC.js.map → ImageviewerWidget-BQbrz2WL.js.map} +1 -1
- package/dist/{ImageviewerWidget-ox5FNYVP.cjs → ImageviewerWidget-CtJzQn0e.cjs} +2 -2
- package/dist/{ImageviewerWidget-ox5FNYVP.cjs.map → ImageviewerWidget-CtJzQn0e.cjs.map} +1 -1
- package/dist/{InterfacesTab-CUM5GGWs.cjs → InterfacesTab-A0g0y1n1.cjs} +2 -2
- package/dist/{InterfacesTab-CUM5GGWs.cjs.map → InterfacesTab-A0g0y1n1.cjs.map} +1 -1
- package/dist/{InterfacesTab-C14LErLZ.js → InterfacesTab-COKNyeUu.js} +3 -3
- package/dist/{InterfacesTab-C14LErLZ.js.map → InterfacesTab-COKNyeUu.js.map} +1 -1
- package/dist/{LabelWidget-78VnL1xc.js → LabelWidget-D5-IFUYW.js} +2 -2
- package/dist/{LabelWidget-78VnL1xc.js.map → LabelWidget-D5-IFUYW.js.map} +1 -1
- package/dist/{LabelWidget-B9J1Whh0.cjs → LabelWidget-rH3SsItK.cjs} +2 -2
- package/dist/{LabelWidget-B9J1Whh0.cjs.map → LabelWidget-rH3SsItK.cjs.map} +1 -1
- package/dist/{LabelledWidget-BMtqUP-E.cjs → LabelledWidget-Bca_qNSP.cjs} +2 -2
- package/dist/{LabelledWidget-BMtqUP-E.cjs.map → LabelledWidget-Bca_qNSP.cjs.map} +1 -1
- package/dist/{LabelledWidget-Cx2PI85E.js → LabelledWidget-Dt9miRtB.js} +4 -4
- package/dist/{LabelledWidget-Cx2PI85E.js.map → LabelledWidget-Dt9miRtB.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-eC7VC7lY.js → LabelprogressbarWidget-BNFgTq4D.js} +4 -4
- package/dist/{LabelprogressbarWidget-eC7VC7lY.js.map → LabelprogressbarWidget-BNFgTq4D.js.map} +1 -1
- package/dist/{LabelprogressbarWidget-Ce3PRzaA.cjs → LabelprogressbarWidget-hyK9Vqsl.cjs} +2 -2
- package/dist/{LabelprogressbarWidget-Ce3PRzaA.cjs.map → LabelprogressbarWidget-hyK9Vqsl.cjs.map} +1 -1
- package/dist/{LabelsparklineWidget-CP5rD4ob.js → LabelsparklineWidget-BByxev6X.js} +4 -4
- package/dist/{LabelsparklineWidget-CP5rD4ob.js.map → LabelsparklineWidget-BByxev6X.js.map} +1 -1
- package/dist/{LabelsparklineWidget-DuCA67yl.cjs → LabelsparklineWidget-BxkxEVwQ.cjs} +2 -2
- package/dist/{LabelsparklineWidget-DuCA67yl.cjs.map → LabelsparklineWidget-BxkxEVwQ.cjs.map} +1 -1
- package/dist/{LabelvalueWidget-PM8DFnDm.js → LabelvalueWidget-BM6L9bVw.js} +4 -4
- package/dist/{LabelvalueWidget-PM8DFnDm.js.map → LabelvalueWidget-BM6L9bVw.js.map} +1 -1
- package/dist/{LabelvalueWidget-DxEvAoHT.cjs → LabelvalueWidget-DEGmbKMG.cjs} +2 -2
- package/dist/{LabelvalueWidget-DxEvAoHT.cjs.map → LabelvalueWidget-DEGmbKMG.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-Dy3_fdkx.cjs → LabelvaluedescWidget-B7bGqqeO.cjs} +2 -2
- package/dist/{LabelvaluedescWidget-Dy3_fdkx.cjs.map → LabelvaluedescWidget-B7bGqqeO.cjs.map} +1 -1
- package/dist/{LabelvaluedescWidget-C8OmKnu-.js → LabelvaluedescWidget-DeBRjYXs.js} +5 -5
- package/dist/{LabelvaluedescWidget-C8OmKnu-.js.map → LabelvaluedescWidget-DeBRjYXs.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-DIsTQqkO.js → LabelvaluelimitsbarWidget-CqV0-c3G.js} +4 -4
- package/dist/{LabelvaluelimitsbarWidget-DIsTQqkO.js.map → LabelvaluelimitsbarWidget-CqV0-c3G.js.map} +1 -1
- package/dist/{LabelvaluelimitsbarWidget-DWvSVvXl.cjs → LabelvaluelimitsbarWidget-DzEc9ZZr.cjs} +2 -2
- package/dist/{LabelvaluelimitsbarWidget-DWvSVvXl.cjs.map → LabelvaluelimitsbarWidget-DzEc9ZZr.cjs.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-ld556rRi.js → LabelvaluelimitscolumnWidget-Bz0PKTIV.js} +5 -5
- package/dist/{LabelvaluelimitscolumnWidget-ld556rRi.js.map → LabelvaluelimitscolumnWidget-Bz0PKTIV.js.map} +1 -1
- package/dist/{LabelvaluelimitscolumnWidget-CyPuEz7E.cjs → LabelvaluelimitscolumnWidget-C0-v0q7a.cjs} +2 -2
- package/dist/{LabelvaluelimitscolumnWidget-CyPuEz7E.cjs.map → LabelvaluelimitscolumnWidget-C0-v0q7a.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-DdqgjjUc.cjs → LabelvaluerangebarWidget-CWhsb5gm.cjs} +2 -2
- package/dist/{LabelvaluerangebarWidget-DdqgjjUc.cjs.map → LabelvaluerangebarWidget-CWhsb5gm.cjs.map} +1 -1
- package/dist/{LabelvaluerangebarWidget-nCeoujui.js → LabelvaluerangebarWidget-DKuAJHLm.js} +4 -4
- package/dist/{LabelvaluerangebarWidget-nCeoujui.js.map → LabelvaluerangebarWidget-DKuAJHLm.js.map} +1 -1
- package/dist/{Layout-BcytiBn4.js → Layout-LSeXBY_W.js} +2 -2
- package/dist/{Layout-BcytiBn4.js.map → Layout-LSeXBY_W.js.map} +1 -1
- package/dist/{Layout-JCk8r88e.cjs → Layout-QcVHlWPp.cjs} +2 -2
- package/dist/{Layout-JCk8r88e.cjs.map → Layout-QcVHlWPp.cjs.map} +1 -1
- package/dist/{LedWidget-3pWKnZsD.js → LedWidget-CH4Il9R7.js} +4 -4
- package/dist/{LedWidget-3pWKnZsD.js.map → LedWidget-CH4Il9R7.js.map} +1 -1
- package/dist/{LedWidget-BEP-sFTh.cjs → LedWidget-CJwBssHl.cjs} +2 -2
- package/dist/{LedWidget-BEP-sFTh.cjs.map → LedWidget-CJwBssHl.cjs.map} +1 -1
- package/dist/{LimitsBar-BJ_cERjE.cjs → LimitsBar-B0O6RMrG.cjs} +2 -2
- package/dist/{LimitsBar-BJ_cERjE.cjs.map → LimitsBar-B0O6RMrG.cjs.map} +1 -1
- package/dist/{LimitsBar-DCco6Rwp.js → LimitsBar-BelAQFD0.js} +2 -2
- package/dist/{LimitsBar-DCco6Rwp.js.map → LimitsBar-BelAQFD0.js.map} +1 -1
- package/dist/{LimitsbarWidget-DiAnkXID.cjs → LimitsbarWidget--AwjBbtb.cjs} +2 -2
- package/dist/{LimitsbarWidget-DiAnkXID.cjs.map → LimitsbarWidget--AwjBbtb.cjs.map} +1 -1
- package/dist/{LimitsbarWidget-_BMzxWBm.js → LimitsbarWidget-PkPqlyxL.js} +3 -3
- package/dist/{LimitsbarWidget-_BMzxWBm.js.map → LimitsbarWidget-PkPqlyxL.js.map} +1 -1
- package/dist/{LimitscolorWidget-ByfzIE_O.cjs → LimitscolorWidget-1D2myv8a.cjs} +2 -2
- package/dist/{LimitscolorWidget-ByfzIE_O.cjs.map → LimitscolorWidget-1D2myv8a.cjs.map} +1 -1
- package/dist/{LimitscolorWidget-C2gZyqtI.js → LimitscolorWidget-BlA15g4A.js} +4 -4
- package/dist/{LimitscolorWidget-C2gZyqtI.js.map → LimitscolorWidget-BlA15g4A.js.map} +1 -1
- package/dist/{LimitscolumnWidget-Cv-6FXU3.js → LimitscolumnWidget-PT917BA0.js} +2 -2
- package/dist/{LimitscolumnWidget-Cv-6FXU3.js.map → LimitscolumnWidget-PT917BA0.js.map} +1 -1
- package/dist/{LimitscolumnWidget-CZwcXbLS.cjs → LimitscolumnWidget-_QPf3cUQ.cjs} +2 -2
- package/dist/{LimitscolumnWidget-CZwcXbLS.cjs.map → LimitscolumnWidget-_QPf3cUQ.cjs.map} +1 -1
- package/dist/{LinegraphWidget-BahyhwSt.js → LinegraphWidget-BW7kS_6G.js} +4 -4
- package/dist/{LinegraphWidget-BahyhwSt.js.map → LinegraphWidget-BW7kS_6G.js.map} +1 -1
- package/dist/{LinegraphWidget-so5ohfWF.cjs → LinegraphWidget-DfXd3959.cjs} +2 -2
- package/dist/{LinegraphWidget-so5ohfWF.cjs.map → LinegraphWidget-DfXd3959.cjs.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-B1Hy9but.js → MatrixbycolumnsWidget-BGNsZvjv.js} +3 -3
- package/dist/{MatrixbycolumnsWidget-B1Hy9but.js.map → MatrixbycolumnsWidget-BGNsZvjv.js.map} +1 -1
- package/dist/{MatrixbycolumnsWidget-Dma8IsO-.cjs → MatrixbycolumnsWidget-oRYGFSEt.cjs} +2 -2
- package/dist/{MatrixbycolumnsWidget-Dma8IsO-.cjs.map → MatrixbycolumnsWidget-oRYGFSEt.cjs.map} +1 -1
- package/dist/{MicroservicesTab-BSXNA_Si.js → MicroservicesTab-CiEGGavF.js} +3 -3
- package/dist/{MicroservicesTab-BSXNA_Si.js.map → MicroservicesTab-CiEGGavF.js.map} +1 -1
- package/dist/{MicroservicesTab-ARGtrfOb.cjs → MicroservicesTab-DvDK2hPW.cjs} +2 -2
- package/dist/{MicroservicesTab-ARGtrfOb.cjs.map → MicroservicesTab-DvDK2hPW.cjs.map} +1 -1
- package/dist/{OpenC3TimePicker-LN9R7V31.js → OpenC3TimePicker-CkaALgy9.js} +2 -2
- package/dist/{OpenC3TimePicker-LN9R7V31.js.map → OpenC3TimePicker-CkaALgy9.js.map} +1 -1
- package/dist/{OpenC3TimePicker-BHX9fnlR.cjs → OpenC3TimePicker-bbdbKTv_.cjs} +2 -2
- package/dist/{OpenC3TimePicker-BHX9fnlR.cjs.map → OpenC3TimePicker-bbdbKTv_.cjs.map} +1 -1
- package/dist/{Openc3Screen-BP7Ho9XC.js → Openc3Screen-BnM1bNOB.js} +11 -12
- package/dist/{Openc3Screen-BP7Ho9XC.js.map → Openc3Screen-BnM1bNOB.js.map} +1 -1
- package/dist/{Openc3Screen-CJOTF-lu.cjs → Openc3Screen-DoOAFAlJ.cjs} +4 -4
- package/dist/{Openc3Screen-CJOTF-lu.cjs.map → Openc3Screen-DoOAFAlJ.cjs.map} +1 -1
- package/dist/{OutputDialog-JdAxzpPD.js → OutputDialog-BY-TZNRl.js} +2 -2
- package/dist/{OutputDialog-JdAxzpPD.js.map → OutputDialog-BY-TZNRl.js.map} +1 -1
- package/dist/{OutputDialog-Dx5mkq19.cjs → OutputDialog-R3Xj3_yw.cjs} +2 -2
- package/dist/{OutputDialog-Dx5mkq19.cjs.map → OutputDialog-R3Xj3_yw.cjs.map} +1 -1
- package/dist/{PackagesTab-HPNAXhzf.cjs → PackagesTab-2Mu7yvxU.cjs} +2 -2
- package/dist/{PackagesTab-HPNAXhzf.cjs.map → PackagesTab-2Mu7yvxU.cjs.map} +1 -1
- package/dist/{PackagesTab-ByfVH001.js → PackagesTab-DGrqIo_Z.js} +4 -4
- package/dist/{PackagesTab-ByfVH001.js.map → PackagesTab-DGrqIo_Z.js.map} +1 -1
- package/dist/{PluginsTab-D7zpmf8s.js → PluginsTab-BXjVe_81.js} +427 -390
- package/dist/PluginsTab-BXjVe_81.js.map +1 -0
- package/dist/PluginsTab-R6i60Pih.cjs +6 -0
- package/dist/PluginsTab-R6i60Pih.cjs.map +1 -0
- package/dist/{ProgressbarWidget-mAVHKeok.js → ProgressbarWidget-Cy_ad8mb.js} +2 -2
- package/dist/{ProgressbarWidget-mAVHKeok.js.map → ProgressbarWidget-Cy_ad8mb.js.map} +1 -1
- package/dist/{ProgressbarWidget-BINuoD9p.cjs → ProgressbarWidget-XAy4iHgC.cjs} +2 -2
- package/dist/{ProgressbarWidget-BINuoD9p.cjs.map → ProgressbarWidget-XAy4iHgC.cjs.map} +1 -1
- package/dist/{RadiobuttonWidget-CL3QjTnZ.js → RadiobuttonWidget-aJBIz45y.js} +2 -2
- package/dist/{RadiobuttonWidget-CL3QjTnZ.js.map → RadiobuttonWidget-aJBIz45y.js.map} +1 -1
- package/dist/{RadiobuttonWidget-DDmgt0su.cjs → RadiobuttonWidget-fAqkUUTb.cjs} +2 -2
- package/dist/{RadiobuttonWidget-DDmgt0su.cjs.map → RadiobuttonWidget-fAqkUUTb.cjs.map} +1 -1
- package/dist/{RadiogroupWidget-q7h1v-ko.cjs → RadiogroupWidget-BuYMyBQd.cjs} +2 -2
- package/dist/{RadiogroupWidget-q7h1v-ko.cjs.map → RadiogroupWidget-BuYMyBQd.cjs.map} +1 -1
- package/dist/{RadiogroupWidget-RUwgtUTC.js → RadiogroupWidget-DNRlJnPE.js} +2 -2
- package/dist/{RadiogroupWidget-RUwgtUTC.js.map → RadiogroupWidget-DNRlJnPE.js.map} +1 -1
- package/dist/{RangebarWidget-BbPMpwMs.cjs → RangebarWidget-gcukfXnM.cjs} +2 -2
- package/dist/{RangebarWidget-BbPMpwMs.cjs.map → RangebarWidget-gcukfXnM.cjs.map} +1 -1
- package/dist/{RangebarWidget-CfDsKLZc.js → RangebarWidget-h4YItqPF.js} +2 -2
- package/dist/{RangebarWidget-CfDsKLZc.js.map → RangebarWidget-h4YItqPF.js.map} +1 -1
- package/dist/{RedisTab-dZE6KvLS.cjs → RedisTab-0V8f-hs1.cjs} +2 -2
- package/dist/{RedisTab-dZE6KvLS.cjs.map → RedisTab-0V8f-hs1.cjs.map} +1 -1
- package/dist/{RedisTab-YrX-5A3T.js → RedisTab-BmZWA0OG.js} +2 -2
- package/dist/{RedisTab-YrX-5A3T.js.map → RedisTab-BmZWA0OG.js.map} +1 -1
- package/dist/{RollupWidget-DCMoQUeJ.js → RollupWidget-CnxDQRQ0.js} +2 -2
- package/dist/{RollupWidget-DCMoQUeJ.js.map → RollupWidget-CnxDQRQ0.js.map} +1 -1
- package/dist/{RollupWidget-BmgRFIOo.cjs → RollupWidget-ZerASRD3.cjs} +2 -2
- package/dist/{RollupWidget-BmgRFIOo.cjs.map → RollupWidget-ZerASRD3.cjs.map} +1 -1
- package/dist/{RoutersTab-C6vejQrw.cjs → RoutersTab-CY-SmZd4.cjs} +2 -2
- package/dist/{RoutersTab-C6vejQrw.cjs.map → RoutersTab-CY-SmZd4.cjs.map} +1 -1
- package/dist/{RoutersTab-MA9KW_gu.js → RoutersTab-Db28gKLP.js} +3 -3
- package/dist/{RoutersTab-MA9KW_gu.js.map → RoutersTab-Db28gKLP.js.map} +1 -1
- package/dist/{ScriptChooser-DGbs03IW.js → ScriptChooser-Bl0wisob.js} +4 -4
- package/dist/{ScriptChooser-DGbs03IW.js.map → ScriptChooser-Bl0wisob.js.map} +1 -1
- package/dist/{ScriptChooser-Cm_HEyBf.cjs → ScriptChooser-CI4lAYZ1.cjs} +2 -2
- package/dist/{ScriptChooser-Cm_HEyBf.cjs.map → ScriptChooser-CI4lAYZ1.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-BbASNNcM.cjs → ScrollwindowWidget-BJkQ5uX_.cjs} +2 -2
- package/dist/{ScrollwindowWidget-BbASNNcM.cjs.map → ScrollwindowWidget-BJkQ5uX_.cjs.map} +1 -1
- package/dist/{ScrollwindowWidget-DarXe7-1.js → ScrollwindowWidget-DFkTJ2Ue.js} +2 -2
- package/dist/{ScrollwindowWidget-DarXe7-1.js.map → ScrollwindowWidget-DFkTJ2Ue.js.map} +1 -1
- package/dist/{SecretsTab-DwE3KJNI.cjs → SecretsTab-B8YTrfQ2.cjs} +2 -2
- package/dist/{SecretsTab-DwE3KJNI.cjs.map → SecretsTab-B8YTrfQ2.cjs.map} +1 -1
- package/dist/{SecretsTab-DTaPAHv3.js → SecretsTab-DTdVLi0I.js} +2 -2
- package/dist/{SecretsTab-DTaPAHv3.js.map → SecretsTab-DTdVLi0I.js.map} +1 -1
- package/dist/{SettingsTab-BhT5sui9.js → SettingsTab-CnybxvVj.js} +4 -4
- package/dist/{SettingsTab-BhT5sui9.js.map → SettingsTab-CnybxvVj.js.map} +1 -1
- package/dist/{SettingsTab-o9tfAuE4.cjs → SettingsTab-_SJLhuk0.cjs} +2 -2
- package/dist/{SettingsTab-o9tfAuE4.cjs.map → SettingsTab-_SJLhuk0.cjs.map} +1 -1
- package/dist/{SignalWidget-CO3UaFok.cjs → SignalWidget-DC7-NIOj.cjs} +2 -2
- package/dist/{SignalWidget-CO3UaFok.cjs.map → SignalWidget-DC7-NIOj.cjs.map} +1 -1
- package/dist/{SignalWidget-C-iEC5KL.js → SignalWidget-jYpXSIfD.js} +2 -2
- package/dist/{SignalWidget-C-iEC5KL.js.map → SignalWidget-jYpXSIfD.js.map} +1 -1
- package/dist/{SimpleTextDialog-B9ZurpdS.cjs → SimpleTextDialog-DLdHGmmb.cjs} +2 -2
- package/dist/{SimpleTextDialog-B9ZurpdS.cjs.map → SimpleTextDialog-DLdHGmmb.cjs.map} +1 -1
- package/dist/{SimpleTextDialog-Bqh3eT2B.js → SimpleTextDialog-Dd3BoNG-.js} +2 -2
- package/dist/{SimpleTextDialog-Bqh3eT2B.js.map → SimpleTextDialog-Dd3BoNG-.js.map} +1 -1
- package/dist/{SpacerWidget-CQh-LB4u.cjs → SpacerWidget-BwwxG8k3.cjs} +2 -2
- package/dist/{SpacerWidget-CQh-LB4u.cjs.map → SpacerWidget-BwwxG8k3.cjs.map} +1 -1
- package/dist/{SpacerWidget-FHxUhs1G.js → SpacerWidget-CUqvml6o.js} +2 -2
- package/dist/{SpacerWidget-FHxUhs1G.js.map → SpacerWidget-CUqvml6o.js.map} +1 -1
- package/dist/{SparklineWidget-BsMIozYC.cjs → SparklineWidget-05TlKC-x.cjs} +2 -2
- package/dist/{SparklineWidget-BsMIozYC.cjs.map → SparklineWidget-05TlKC-x.cjs.map} +1 -1
- package/dist/{SparklineWidget-ClT5Umm2.js → SparklineWidget-CVf1TtjV.js} +4 -4
- package/dist/{SparklineWidget-ClT5Umm2.js.map → SparklineWidget-CVf1TtjV.js.map} +1 -1
- package/dist/{TabbookWidget-D-b0v0oo.js → TabbookWidget-CTUEpDnn.js} +2 -2
- package/dist/{TabbookWidget-D-b0v0oo.js.map → TabbookWidget-CTUEpDnn.js.map} +1 -1
- package/dist/{TabbookWidget-So-oaWd4.cjs → TabbookWidget-oZre4A6Y.cjs} +2 -2
- package/dist/{TabbookWidget-So-oaWd4.cjs.map → TabbookWidget-oZre4A6Y.cjs.map} +1 -1
- package/dist/TargetPacketItemChooser-BvXBVNLj.cjs +2 -0
- package/dist/TargetPacketItemChooser-BvXBVNLj.cjs.map +1 -0
- package/dist/{TargetPacketItemChooser-DD7JgCD9.js → TargetPacketItemChooser-CS2Vvi2U.js} +22 -22
- package/dist/TargetPacketItemChooser-CS2Vvi2U.js.map +1 -0
- package/dist/{TargetsTab-BD0JGvAl.cjs → TargetsTab-Bc7-iav6.cjs} +2 -2
- package/dist/{TargetsTab-BD0JGvAl.cjs.map → TargetsTab-Bc7-iav6.cjs.map} +1 -1
- package/dist/{TargetsTab-hTLe_rba.js → TargetsTab-CGv0GwAF.js} +3 -3
- package/dist/{TargetsTab-hTLe_rba.js.map → TargetsTab-CGv0GwAF.js.map} +1 -1
- package/dist/{TextboxWidget-WM3eFUR_.js → TextboxWidget-B0Y1W7GP.js} +4 -4
- package/dist/{TextboxWidget-WM3eFUR_.js.map → TextboxWidget-B0Y1W7GP.js.map} +1 -1
- package/dist/{TextboxWidget-CF4iq315.cjs → TextboxWidget-qSbx4xxD.cjs} +2 -2
- package/dist/{TextboxWidget-CF4iq315.cjs.map → TextboxWidget-qSbx4xxD.cjs.map} +1 -1
- package/dist/{TextfieldWidget-lfc1Vg51.js → TextfieldWidget-B8TAf9oU.js} +2 -2
- package/dist/{TextfieldWidget-lfc1Vg51.js.map → TextfieldWidget-B8TAf9oU.js.map} +1 -1
- package/dist/{TextfieldWidget-D9BINKRU.cjs → TextfieldWidget-cCG7BQ25.cjs} +2 -2
- package/dist/{TextfieldWidget-D9BINKRU.cjs.map → TextfieldWidget-cCG7BQ25.cjs.map} +1 -1
- package/dist/{TimeWidget-CgtJbnnC.cjs → TimeWidget-DNkhFoZO.cjs} +2 -2
- package/dist/{TimeWidget-CgtJbnnC.cjs.map → TimeWidget-DNkhFoZO.cjs.map} +1 -1
- package/dist/{TimeWidget-B13aIVqG.js → TimeWidget-DewVXks0.js} +3 -3
- package/dist/{TimeWidget-B13aIVqG.js.map → TimeWidget-DewVXks0.js.map} +1 -1
- package/dist/{TitleWidget-CTAMgzU4.js → TitleWidget-BAq2LGJF.js} +2 -2
- package/dist/{TitleWidget-CTAMgzU4.js.map → TitleWidget-BAq2LGJF.js.map} +1 -1
- package/dist/{TitleWidget-BV2sDP_-.cjs → TitleWidget-ChGb6BJW.cjs} +2 -2
- package/dist/{TitleWidget-BV2sDP_-.cjs.map → TitleWidget-ChGb6BJW.cjs.map} +1 -1
- package/dist/{ToolsTab-DXK-L-kx.cjs → ToolsTab-CB_6hFQF.cjs} +2 -2
- package/dist/{ToolsTab-DXK-L-kx.cjs.map → ToolsTab-CB_6hFQF.cjs.map} +1 -1
- package/dist/{ToolsTab-CmhRtClS.js → ToolsTab-USmbUvDq.js} +3 -3
- package/dist/{ToolsTab-CmhRtClS.js.map → ToolsTab-USmbUvDq.js.map} +1 -1
- package/dist/{TopBar-D-lJHb6d.js → TopBar-B4RDkLs-.js} +2 -2
- package/dist/{TopBar-D-lJHb6d.js.map → TopBar-B4RDkLs-.js.map} +1 -1
- package/dist/{TopBar-BiE7GgIN.cjs → TopBar-DzL3L4ih.cjs} +2 -2
- package/dist/{TopBar-BiE7GgIN.cjs.map → TopBar-DzL3L4ih.cjs.map} +1 -1
- package/dist/TsdbTab-0aYlysh5.js +125 -0
- package/dist/TsdbTab-0aYlysh5.js.map +1 -0
- package/dist/TsdbTab-H64XGfOO.cjs +2 -0
- package/dist/TsdbTab-H64XGfOO.cjs.map +1 -0
- package/dist/{UpgradeToEnterpriseDialog-D1_viCAx.cjs → UpgradeToEnterpriseDialog-BBRXrLrL.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-D1_viCAx.cjs.map → UpgradeToEnterpriseDialog-BBRXrLrL.cjs.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog-et3RrozN.js → UpgradeToEnterpriseDialog-DTmnp8xy.js} +2 -2
- package/dist/{UpgradeToEnterpriseDialog-et3RrozN.js.map → UpgradeToEnterpriseDialog-DTmnp8xy.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js} +2 -2
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-D0cYHPwr.js.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js.map} +1 -1
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DtL207xP.cjs → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-MfH160rD.cjs} +2 -2
- package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DtL207xP.cjs.map → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-MfH160rD.cjs.map} +1 -1
- package/dist/{VWidget-0kkhOxhV.js → VWidget-0KwtSssI.js} +3 -3
- package/dist/{VWidget-0kkhOxhV.js.map → VWidget-0KwtSssI.js.map} +1 -1
- package/dist/{VWidget-Dkji3VZ0.cjs → VWidget-SWmlQP30.cjs} +2 -2
- package/dist/{VWidget-Dkji3VZ0.cjs.map → VWidget-SWmlQP30.cjs.map} +1 -1
- package/dist/{ValueWidget-BoQfnx8U.js → ValueWidget-BGNqaaRs.js} +4 -4
- package/dist/{ValueWidget-BoQfnx8U.js.map → ValueWidget-BGNqaaRs.js.map} +1 -1
- package/dist/{ValueWidget-mkXMZvdK.cjs → ValueWidget-BfxZq1LD.cjs} +2 -2
- package/dist/{ValueWidget-mkXMZvdK.cjs.map → ValueWidget-BfxZq1LD.cjs.map} +1 -1
- package/dist/{ValuelimitsbarWidget-ZfgwDNqX.js → ValuelimitsbarWidget-B6mH4PdF.js} +4 -4
- package/dist/{ValuelimitsbarWidget-ZfgwDNqX.js.map → ValuelimitsbarWidget-B6mH4PdF.js.map} +1 -1
- package/dist/{ValuelimitsbarWidget-B8IUYgYx.cjs → ValuelimitsbarWidget-m5fBewLy.cjs} +2 -2
- package/dist/{ValuelimitsbarWidget-B8IUYgYx.cjs.map → ValuelimitsbarWidget-m5fBewLy.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-B7DigaiC.cjs → ValuelimitscolumnWidget-D_5XZhiD.cjs} +2 -2
- package/dist/{ValuelimitscolumnWidget-B7DigaiC.cjs.map → ValuelimitscolumnWidget-D_5XZhiD.cjs.map} +1 -1
- package/dist/{ValuelimitscolumnWidget-B3x9DknL.js → ValuelimitscolumnWidget-DlX90_-6.js} +4 -4
- package/dist/{ValuelimitscolumnWidget-B3x9DknL.js.map → ValuelimitscolumnWidget-DlX90_-6.js.map} +1 -1
- package/dist/{ValuerangebarWidget-DA4X0MuO.cjs → ValuerangebarWidget-C3XFFRhf.cjs} +2 -2
- package/dist/{ValuerangebarWidget-DA4X0MuO.cjs.map → ValuerangebarWidget-C3XFFRhf.cjs.map} +1 -1
- package/dist/{ValuerangebarWidget-40InNHft.js → ValuerangebarWidget-C9xyLOJO.js} +4 -4
- package/dist/{ValuerangebarWidget-40InNHft.js.map → ValuerangebarWidget-C9xyLOJO.js.map} +1 -1
- package/dist/{VerticalWidget-abr1X6L7.js → VerticalWidget-0UbbE2g3.js} +2 -2
- package/dist/{VerticalWidget-abr1X6L7.js.map → VerticalWidget-0UbbE2g3.js.map} +1 -1
- package/dist/{VerticalWidget-BiFa3xbs.cjs → VerticalWidget-D-U8cue6.cjs} +2 -2
- package/dist/{VerticalWidget-BiFa3xbs.cjs.map → VerticalWidget-D-U8cue6.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-Cx30rcqe.cjs → VerticalboxWidget-C4nkJhEd.cjs} +2 -2
- package/dist/{VerticalboxWidget-Cx30rcqe.cjs.map → VerticalboxWidget-C4nkJhEd.cjs.map} +1 -1
- package/dist/{VerticalboxWidget-DsbB17o-.js → VerticalboxWidget-efbeOAKE.js} +5 -5
- package/dist/{VerticalboxWidget-DsbB17o-.js.map → VerticalboxWidget-efbeOAKE.js.map} +1 -1
- package/dist/{Widget-DksaxMdD.js → Widget-CGePksBA.js} +2 -2
- package/dist/{Widget-DksaxMdD.js.map → Widget-CGePksBA.js.map} +1 -1
- package/dist/{Widget-VL9FlMQp.cjs → Widget-D0drYWOT.cjs} +2 -2
- package/dist/{Widget-VL9FlMQp.cjs.map → Widget-D0drYWOT.cjs.map} +1 -1
- package/dist/components.cjs +1 -1
- package/dist/components.js +16 -16
- package/dist/{index-BRc4sKEF.js → index-BJrYCoCB.js} +19 -13
- package/dist/index-BJrYCoCB.js.map +1 -0
- package/dist/{index-Qy49-kGB.cjs → index-Cmp6oZpm.cjs} +2 -2
- package/dist/index-Cmp6oZpm.cjs.map +1 -0
- package/dist/plugins.cjs +1 -1
- package/dist/plugins.cjs.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/purify.es-4pyphLiB.cjs +3 -0
- package/dist/purify.es-4pyphLiB.cjs.map +1 -0
- package/dist/{purify.es-DcWaZU6I.js → purify.es-BPDBzHtc.js} +115 -115
- package/dist/purify.es-BPDBzHtc.js.map +1 -0
- package/dist/{settings-BDlsBCNk.js → settings-CjmDHCpE.js} +2 -2
- package/dist/{settings-BDlsBCNk.js.map → settings-CjmDHCpE.js.map} +1 -1
- package/dist/{settings-D3MxiRHY.cjs → settings-l1j_GGzu.cjs} +2 -2
- package/dist/{settings-D3MxiRHY.cjs.map → settings-l1j_GGzu.cjs.map} +1 -1
- package/dist/tools/admin.cjs +1 -1
- package/dist/tools/admin.js +1 -1
- package/dist/tools/base.cjs +1 -1
- package/dist/tools/base.js +4 -4
- package/dist/tools/calendar.cjs +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/scriptrunner.cjs +8 -8
- package/dist/tools/scriptrunner.cjs.map +1 -1
- package/dist/tools/scriptrunner.js +1477 -1067
- 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 +64 -64
- package/package.json +7 -7
- package/dist/EventListDialog-CktWO2jn.js.map +0 -1
- package/dist/EventListDialog-EAGLDaHc.cjs +0 -2
- package/dist/EventListDialog-EAGLDaHc.cjs.map +0 -1
- package/dist/Graph-9_EZ9aQx.cjs +0 -2
- package/dist/Graph-9_EZ9aQx.cjs.map +0 -1
- package/dist/Graph-GhpiUBKI.js.map +0 -1
- package/dist/PluginsTab-D7zpmf8s.js.map +0 -1
- package/dist/PluginsTab-DfmpvAYa.cjs +0 -6
- package/dist/PluginsTab-DfmpvAYa.cjs.map +0 -1
- package/dist/TargetPacketItemChooser-DD7JgCD9.js.map +0 -1
- package/dist/TargetPacketItemChooser-PqyXKRlT.cjs +0 -2
- package/dist/TargetPacketItemChooser-PqyXKRlT.cjs.map +0 -1
- package/dist/index-BRc4sKEF.js.map +0 -1
- package/dist/index-Qy49-kGB.cjs.map +0 -1
- package/dist/purify.es-B336bjAn.cjs +0 -3
- package/dist/purify.es-B336bjAn.cjs.map +0 -1
- package/dist/purify.es-DcWaZU6I.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LimitscolumnWidget-
|
|
1
|
+
{"version":3,"file":"LimitscolumnWidget-_QPf3cUQ.cjs","sources":["../src/widgets/LimitscolumnWidget.vue"],"sourcesContent":["<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"limitsbar\" :style=\"[cssProps, computedStyle]\">\n <div class=\"limitsbar__container\">\n <div class=\"limitsbar__redlow\" />\n <div class=\"limitsbar__redhigh\" />\n <div class=\"limitsbar__yellowlow\" />\n <div class=\"limitsbar__yellowhigh\" />\n <div class=\"limitsbar__greenlow\" />\n <div class=\"limitsbar__greenhigh\" />\n <div class=\"limitsbar__blue\" />\n\n <div class=\"limitsbar__line\" />\n <div class=\"limitsbar__arrow\" />\n </div>\n </div>\n</template>\n\n<script>\nimport BarColumn from './BarColumn'\n\nexport default {\n mixins: [BarColumn],\n data() {\n return {\n width: 22, // px\n height: 120, // users will override with px\n }\n },\n computed: {\n // TODO: Not sure why we have to reimplement this from BarColumn\n // strangely enough LimitsbarWidget.vue works fine without it\n cssProps: function () {\n if (!this.screenValues[this.valueId]) {\n return {}\n }\n let value = this.screenValues[this.valueId][0]\n let limits = this.modifyLimits(\n this.limitsSettings[this.selectedLimitsSet],\n )\n if (limits) {\n this.calcLimits(limits)\n return {\n '--height': this.height + 'px',\n '--width': this.width + 'px',\n '--container-width': this.width - 5 + 'px',\n '--position': this.calcPosition(value, limits) + '%',\n '--redlow-height': this.redLow + '%',\n '--redhigh-height': this.redHigh + '%',\n '--yellowlow-height': this.yellowLow + '%',\n '--yellowhigh-height': this.yellowHigh + '%',\n '--greenlow-height': this.greenLow + '%',\n '--greenhigh-height': this.greenHigh + '%',\n '--blue-height': this.blue + '%',\n }\n } else {\n // See errorCaptured in Openc3Screen.vue for how this is parsed\n throw {\n line: this.line,\n lineNumber: this.lineNumber,\n keyword: 'LIMITSCOLUMN',\n parameters: this.parameters,\n message: 'Item has no limits settings',\n usage: 'Only items with limits',\n }\n }\n },\n },\n created() {\n this.verifyNumParams(\n 'LIMITSCOLUMN',\n 3,\n 6,\n 'LIMITSCOLUMN <TARGET> <PACKET> <ITEM> <TYPE> <WIDTH> <HEIGHT>',\n )\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.limitsbar {\n cursor: default;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 5px;\n height: var(--height);\n margin-right: 5px;\n}\n.limitsbar__container {\n position: relative;\n flex: 1 1 100%;\n width: var(--container-width);\n border: 1px solid black;\n background-color: white;\n}\n.limitsbar__redlow {\n position: absolute;\n bottom: 0px;\n width: var(--container-width);\n height: var(--redlow-height);\n background-color: rgb(255, 45, 45);\n}\n.limitsbar__redhigh {\n position: absolute;\n top: 0px;\n width: var(--container-width);\n height: var(--redhigh-height);\n background-color: rgb(255, 45, 45);\n}\n.limitsbar__yellowlow {\n position: absolute;\n bottom: var(--redlow-height);\n height: var(--yellowlow-height);\n width: var(--container-width);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__yellowhigh {\n position: absolute;\n top: var(--redhigh-height);\n height: var(--yellowhigh-height);\n width: var(--container-width);\n background-color: rgb(255, 220, 0);\n}\n.limitsbar__greenlow {\n position: absolute;\n bottom: calc(var(--redlow-height) + var(--yellowlow-height));\n width: var(--container-width);\n height: var(--greenlow-height);\n background-color: rgb(0, 200, 0);\n}\n.limitsbar__greenhigh {\n position: absolute;\n top: calc(var(--redhigh-height) + var(--yellowhigh-height));\n width: var(--container-width);\n height: var(--greenhigh-height);\n background-color: rgb(0, 200, 0);\n}\n.limitsbar__blue {\n position: absolute;\n bottom: calc(\n var(--redlow-height) + var(--yellowlow-height) + var(--greenlow-height)\n );\n width: var(--container-width);\n height: var(--blue-height);\n background-color: rgb(0, 153, 255);\n}\n.limitsbar__line {\n position: absolute;\n bottom: var(--position);\n width: var(--container-width);\n height: 1px;\n background-color: rgb(128, 128, 128);\n}\n$arrow-size: 5px;\n.limitsbar__arrow {\n position: absolute;\n bottom: var(--position);\n left: var(--container-width);\n width: 0;\n height: 0;\n transform: translateY($arrow-size); // Transform so it sits over the line\n border-top: $arrow-size solid transparent;\n border-bottom: $arrow-size solid transparent;\n border-right: $arrow-size solid rgb(128, 128, 128);\n}\n</style>\n"],"names":["_sfc_main","BarColumn","value","limits","_createElementBlock","_normalizeStyle","$options","_ctx"],"mappings":"oLAiCKA,EAAU,CACb,OAAQ,CAACC,EAAAA,SAAS,EAClB,MAAO,CACL,MAAO,CACL,MAAO,GACP,OAAQ,GACV,CACF,EACA,SAAU,CAGR,SAAU,UAAY,CACpB,GAAI,CAAC,KAAK,aAAa,KAAK,OAAO,EACjC,MAAO,CAAA,EAET,IAAIC,EAAQ,KAAK,aAAa,KAAK,OAAO,EAAE,CAAC,EACzCC,EAAS,KAAK,aAChB,KAAK,eAAe,KAAK,iBAAiB,CAC5C,EACA,GAAIA,EACF,YAAK,WAAWA,CAAM,EACf,CACL,WAAY,KAAK,OAAS,KAC1B,UAAW,KAAK,MAAQ,KACxB,oBAAqB,KAAK,MAAQ,EAAI,KACtC,aAAc,KAAK,aAAaD,EAAOC,CAAM,EAAI,IACjD,kBAAmB,KAAK,OAAS,IACjC,mBAAoB,KAAK,QAAU,IACnC,qBAAsB,KAAK,UAAY,IACvC,sBAAuB,KAAK,WAAa,IACzC,oBAAqB,KAAK,SAAW,IACrC,qBAAsB,KAAK,UAAY,IACvC,gBAAiB,KAAK,KAAO,GAC/B,EAGA,KAAM,CACJ,KAAM,KAAK,KACX,WAAY,KAAK,WACjB,QAAS,eACT,WAAY,KAAK,WACjB,QAAS,8BACT,MAAO,wBACT,CAEJ,GAEF,SAAU,CACR,KAAK,gBACH,eACA,EACA,EACA,+DACF,CACF,CACF,+CA1EEC,EAAAA,mBAaM,MAAA,CAbD,MAAM,YAAa,MAAKC,EAAAA,eAAA,CAAGC,EAAA,SAAUC,EAAA,aAAa,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { G as s } from "./GraphWidget-
|
|
2
|
-
import "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-
|
|
1
|
+
import { G as s } from "./GraphWidget-CWJ4Yb26.js";
|
|
2
|
+
import "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js";
|
|
3
3
|
import { resolveComponent as o, createBlock as r, openBlock as a, normalizeStyle as n } from "vue";
|
|
4
4
|
import { _ as p } from "./CustomIcon-Cg3jCA_l.js";
|
|
5
|
-
import { G as d } from "./Graph-
|
|
5
|
+
import { G as d } from "./Graph-BTtGIbYG.js";
|
|
6
6
|
import "single-spa";
|
|
7
7
|
const m = {
|
|
8
8
|
components: {
|
|
@@ -36,4 +36,4 @@ const $ = /* @__PURE__ */ p(m, [["render", h]]);
|
|
|
36
36
|
export {
|
|
37
37
|
$ as default
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=LinegraphWidget-
|
|
39
|
+
//# sourceMappingURL=LinegraphWidget-BW7kS_6G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinegraphWidget-
|
|
1
|
+
{"version":3,"file":"LinegraphWidget-BW7kS_6G.js","sources":["../src/widgets/LinegraphWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <graph\n :id=\"id\"\n :ref=\"'graph' + id\"\n :state=\"state\"\n :selected-graph-id=\"id\"\n :start-time=\"startTime\"\n :seconds-graphed=\"secondsGraphed\"\n :points-saved=\"pointsSaved\"\n :points-graphed=\"pointsGraphed\"\n :initial-items=\"items\"\n :height=\"size.height\"\n :width=\"size.width\"\n :style=\"computedStyle\"\n :time-zone=\"screenTimeZone\"\n hide-toolbar\n hide-overview\n @pause=\"() => (state = 'pause')\"\n @start=\"() => (state = 'start')\"\n />\n</template>\n\n<script>\nimport GraphWidget from './GraphWidget'\nimport { Graph } from '@/components'\n\nexport default {\n components: {\n Graph,\n },\n mixins: [GraphWidget],\n}\n</script>\n"],"names":["_sfc_main","Graph","GraphWidget","_createBlock","_component_graph","_ctx"],"mappings":";;;;;;AA2CA,MAAKA,IAAU;AAAA,EACb,YAAY;AAAA,IACV,OAAAC;AAAA;EAEF,QAAQ,CAACC,CAAW;AACtB;;;cA9BEC,EAkBEC,GAAA;AAAA,IAjBC,IAAIC,EAAA;AAAA,IACJ,eAAeA,EAAA;AAAA,IACf,OAAOA,EAAA;AAAA,IACP,qBAAmBA,EAAA;AAAA,IACnB,cAAYA,EAAA;AAAA,IACZ,mBAAiBA,EAAA;AAAA,IACjB,gBAAcA,EAAA;AAAA,IACd,kBAAgBA,EAAA;AAAA,IAChB,iBAAeA,EAAA;AAAA,IACf,QAAQA,EAAA,KAAK;AAAA,IACb,OAAOA,EAAA,KAAK;AAAA,IACZ,SAAOA,EAAA,aAAa;AAAA,IACpB,aAAWA,EAAA;AAAA,IACZ,gBAAA;AAAA,IACA,iBAAA;AAAA,IACC,+BAAcA,EAAA,QAAK;AAAA,IACnB,+BAAcA,EAAA,QAAK;AAAA;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./GraphWidget-
|
|
2
|
-
//# sourceMappingURL=LinegraphWidget-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./GraphWidget-XjxjI3og.cjs");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-MfH160rD.cjs");const i=require("vue"),o=require("./CustomIcon-8F08upeg.cjs"),n=require("./Graph-Cy2LrwoK.cjs");require("single-spa");const a={components:{Graph:n.Graph},mixins:[r.GraphWidget]};function d(e,t,h,l,u,g){const s=i.resolveComponent("graph");return i.openBlock(),i.createBlock(s,{id:e.id,ref:"graph"+e.id,state:e.state,"selected-graph-id":e.id,"start-time":e.startTime,"seconds-graphed":e.secondsGraphed,"points-saved":e.pointsSaved,"points-graphed":e.pointsGraphed,"initial-items":e.items,height:e.size.height,width:e.size.width,style:i.normalizeStyle(e.computedStyle),"time-zone":e.screenTimeZone,"hide-toolbar":"","hide-overview":"",onPause:t[0]||(t[0]=()=>e.state="pause"),onStart:t[1]||(t[1]=()=>e.state="start")},null,8,["id","state","selected-graph-id","start-time","seconds-graphed","points-saved","points-graphed","initial-items","height","width","style","time-zone"])}const p=o._export_sfc(a,[["render",d]]);exports.default=p;
|
|
2
|
+
//# sourceMappingURL=LinegraphWidget-DfXd3959.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinegraphWidget-
|
|
1
|
+
{"version":3,"file":"LinegraphWidget-DfXd3959.cjs","sources":["../src/widgets/LinegraphWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <graph\n :id=\"id\"\n :ref=\"'graph' + id\"\n :state=\"state\"\n :selected-graph-id=\"id\"\n :start-time=\"startTime\"\n :seconds-graphed=\"secondsGraphed\"\n :points-saved=\"pointsSaved\"\n :points-graphed=\"pointsGraphed\"\n :initial-items=\"items\"\n :height=\"size.height\"\n :width=\"size.width\"\n :style=\"computedStyle\"\n :time-zone=\"screenTimeZone\"\n hide-toolbar\n hide-overview\n @pause=\"() => (state = 'pause')\"\n @start=\"() => (state = 'start')\"\n />\n</template>\n\n<script>\nimport GraphWidget from './GraphWidget'\nimport { Graph } from '@/components'\n\nexport default {\n components: {\n Graph,\n },\n mixins: [GraphWidget],\n}\n</script>\n"],"names":["_sfc_main","Graph","GraphWidget","_createBlock","_component_graph","_ctx"],"mappings":"wVA2CA,MAAKA,EAAU,CACb,WAAY,OACVC,EAAAA,OAEF,OAAQ,CAACC,EAAAA,WAAW,CACtB,mFA9BEC,EAAAA,YAkBEC,EAAA,CAjBC,GAAIC,EAAA,GACJ,YAAeA,EAAA,GACf,MAAOA,EAAA,MACP,oBAAmBA,EAAA,GACnB,aAAYA,EAAA,UACZ,kBAAiBA,EAAA,eACjB,eAAcA,EAAA,YACd,iBAAgBA,EAAA,cAChB,gBAAeA,EAAA,MACf,OAAQA,EAAA,KAAK,OACb,MAAOA,EAAA,KAAK,MACZ,uBAAOA,EAAA,aAAa,EACpB,YAAWA,EAAA,eACZ,eAAA,GACA,gBAAA,GACC,wBAAcA,EAAA,MAAK,SACnB,wBAAcA,EAAA,MAAK"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { L as k } from "./Layout-
|
|
2
|
-
import { _ as b } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-
|
|
1
|
+
import { L as k } from "./Layout-LSeXBY_W.js";
|
|
2
|
+
import { _ as b } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js";
|
|
3
3
|
import { resolveComponent as T, createElementBlock as n, openBlock as r, normalizeStyle as N, Fragment as l, renderList as i, createBlock as a, withCtx as m, createElementVNode as C, toDisplayString as z, resolveDynamicComponent as p, mergeProps as u } from "vue";
|
|
4
4
|
import { _ as A } from "./CustomIcon-Cg3jCA_l.js";
|
|
5
5
|
const _ = {
|
|
@@ -80,4 +80,4 @@ const G = /* @__PURE__ */ A(_, [["render", I]]);
|
|
|
80
80
|
export {
|
|
81
81
|
G as default
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=MatrixbycolumnsWidget-
|
|
83
|
+
//# sourceMappingURL=MatrixbycolumnsWidget-BGNsZvjv.js.map
|
package/dist/{MatrixbycolumnsWidget-B1Hy9but.js.map → MatrixbycolumnsWidget-BGNsZvjv.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MatrixbycolumnsWidget-
|
|
1
|
+
{"version":3,"file":"MatrixbycolumnsWidget-BGNsZvjv.js","sources":["../src/widgets/MatrixbycolumnsWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <table :style=\"computedStyle\" role=\"presentation\">\n <tr v-for=\"(chunk, rindex) in widgetChunks\" :key=\"'r' + rindex\">\n <td v-for=\"(widget, cindex) in chunk\" :key=\"'c' + cindex\">\n <v-tooltip\n v-if=\"getTooltipText(widget)\"\n :open-delay=\"getTooltipDelay(widget)\"\n location=\"top\"\n :activator-props=\"getTooltipActivatorProps(widget)\"\n >\n <template #activator=\"{ props }\">\n <component\n :is=\"widget.type\"\n v-bind=\"{ ...listeners, ...props }\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </template>\n <span>{{ getTooltipText(widget) }}</span>\n </v-tooltip>\n <component\n :is=\"widget.type\"\n v-else\n v-bind=\"listeners\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </td>\n </tr>\n </table>\n</template>\n\n<script>\nimport Layout from './Layout'\nimport _ from 'lodash'\nexport default {\n mixins: [Layout],\n computed: {\n columns() {\n return Number.parseInt(this.parameters[0])\n },\n widgetChunks() {\n return _.chunk(this.widgets, this.columns)\n },\n },\n created: function () {\n if (this.parameters[1]) {\n let margin = this.parameters[1]\n this.widgets.forEach((widget) => {\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0].startsWith('RAW') &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","_","margin","widget","setting","_createElementBlock","_ctx","_openBlock","_Fragment","_renderList","$options","chunk","rindex","cindex","_createBlock","_component_v_tooltip","_withCtx","props","_resolveDynamicComponent","_mergeProps","_createElementVNode","_toDisplayString"],"mappings":";;;;AAkEA,MAAKA,IAAU;AAAA,EACb,QAAQ,CAACC,CAAM;AAAA,EACf,UAAU;AAAA,IACR,UAAU;AACR,aAAO,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC;AAAA,IAC3C;AAAA,IACA,eAAe;AACb,aAAOC,EAAE,MAAM,KAAK,SAAS,KAAK,OAAO;AAAA,IAC3C;AAAA;EAEF,SAAS,WAAY;AACnB,QAAI,KAAK,WAAW,CAAC,GAAG;AACtB,UAAIC,IAAS,KAAK,WAAW,CAAC;AAC9B,WAAK,QAAQ,QAAQ,CAACC,MAAW;AAO/B,QANcA,EAAO,SAAS;AAAA,UAC5B,CAACC,MACCA,EAAQ,CAAC,MAAM,YACdA,EAAQ,CAAC,EAAE,WAAW,KAAK,KAC1BA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ;AAAA,QAChD,MACc,UACZD,EAAO,SAAS,KAAK,CAAC,UAAUD,CAAM,CAAC;AAAA,MAE3C,CAAC;AAAA,IACH;AAAA,EACF;AACF;;;cA1EEG,EA0CQ,SAAA;AAAA,IA1CA,SAAOC,EAAA,aAAa;AAAA,IAAE,MAAK;AAAA;KACjCC,EAAA,EAAA,GAAAF,EAwCKG,GAAA,MAAAC,EAxCyBC,EAAA,cAAY,CAA9BC,GAAOC,YAAnBP,EAwCK,MAAA;AAAA,MAxCwC,WAAWO;AAAA;OACtDL,EAAA,EAAA,GAAAF,EAsCKG,GAAA,MAAAC,EAtC0BE,GAAK,CAAxBR,GAAQU,YAApBR,EAsCK,MAAA;AAAA,QAtCkC,WAAWQ;AAAA;QAExCP,EAAA,eAAeH,CAAM,UAD7BW,EAsBYC,GAAA;AAAA;UApBT,cAAYT,EAAA,gBAAgBH,CAAM;AAAA,UACnC,UAAS;AAAA,UACR,mBAAiBG,EAAA,yBAAyBH,CAAM;AAAA;UAEtC,WAASa,EAClB,CAYE,EAboB,OAAAC,QAAK;AAAA,kBAC3BH,EAYEI,EAXKf,EAAO,IAAI,GADlBgB,EAYE,EAAA,SAAA,GAAA,GAAA,EAAA,GAVab,EAAA,WAAS,GAAKW,KAAK;AAAA,cAC/B,QAAQd,EAAO;AAAA,cACf,YAAYA,EAAO;AAAA,cACnB,UAAUA,EAAO;AAAA,cACjB,iBAAeG,EAAA;AAAA,cACf,oBAAkBA,EAAA;AAAA,cAClB,SAASH,EAAO;AAAA,cAChB,MAAMA,EAAO;AAAA,cACb,MAAMA,EAAO;AAAA,cACb,eAAaA,EAAO;AAAA;;qBAGzB,MAAyC;AAAA,YAAzCiB,EAAyC,QAAA,MAAAC,EAAhCf,EAAA,eAAeH,CAAM,CAAA,GAAA,CAAA;AAAA;;wDAEhCI,EAAA,GAAAO,EAaEI,EAZKf,EAAO,IAAI,GADlBgB,EAaE;AAAA;;WAVQb,EAAA,WAAS;AAAA,UAChB,QAAQH,EAAO;AAAA,UACf,YAAYA,EAAO;AAAA,UACnB,UAAUA,EAAO;AAAA,UACjB,iBAAeG,EAAA;AAAA,UACf,oBAAkBA,EAAA;AAAA,UAClB,SAASH,EAAO;AAAA,UAChB,MAAMA,EAAO;AAAA,UACb,MAAMA,EAAO;AAAA,UACb,eAAaA,EAAO;AAAA;;;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./Layout-
|
|
2
|
-
//# sourceMappingURL=MatrixbycolumnsWidget-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./Layout-QcVHlWPp.cjs"),k=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-MfH160rD.cjs"),e=require("vue"),y=require("./CustomIcon-8F08upeg.cjs"),f={mixins:[m.Layout],computed:{columns(){return Number.parseInt(this.parameters[0])},widgetChunks(){return k._.chunk(this.widgets,this.columns)}},created:function(){if(this.parameters[1]){let n=this.parameters[1];this.widgets.forEach(o=>{o.settings.find(r=>r[0]==="MARGIN"||r[0].startsWith("RAW")&&r[1].toUpperCase().includes("MARGIN"))===void 0&&o.settings.push(["MARGIN",n])})}}};function g(n,o,s,r,d,a){const l=e.resolveComponent("v-tooltip");return e.openBlock(),e.createElementBlock("table",{style:e.normalizeStyle(n.computedStyle),role:"presentation"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.widgetChunks,(i,c)=>(e.openBlock(),e.createElementBlock("tr",{key:"r"+c},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i,(t,u)=>(e.openBlock(),e.createElementBlock("td",{key:"c"+u},[n.getTooltipText(t)?(e.openBlock(),e.createBlock(l,{key:0,"open-delay":n.getTooltipDelay(t),location:"top","activator-props":n.getTooltipActivatorProps(t)},{activator:e.withCtx(({props:p})=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.type),e.mergeProps({ref_for:!0},{...n.listeners,...p},{target:t.target,parameters:t.parameters,settings:t.settings,"screen-values":n.screenValues,"screen-time-zone":n.screenTimeZone,widgets:t.widgets,name:t.name,line:t.line,"line-number":t.lineNumber}),null,16,["target","parameters","settings","screen-values","screen-time-zone","widgets","name","line","line-number"]))]),default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(n.getTooltipText(t)),1)]),_:2},1032,["open-delay","activator-props"])):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t.type),e.mergeProps({key:1,ref_for:!0},n.listeners,{target:t.target,parameters:t.parameters,settings:t.settings,"screen-values":n.screenValues,"screen-time-zone":n.screenTimeZone,widgets:t.widgets,name:t.name,line:t.line,"line-number":t.lineNumber}),null,16,["target","parameters","settings","screen-values","screen-time-zone","widgets","name","line","line-number"]))]))),128))]))),128))],4)}const v=y._export_sfc(f,[["render",g]]);exports.default=v;
|
|
2
|
+
//# sourceMappingURL=MatrixbycolumnsWidget-oRYGFSEt.cjs.map
|
package/dist/{MatrixbycolumnsWidget-Dma8IsO-.cjs.map → MatrixbycolumnsWidget-oRYGFSEt.cjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MatrixbycolumnsWidget-
|
|
1
|
+
{"version":3,"file":"MatrixbycolumnsWidget-oRYGFSEt.cjs","sources":["../src/widgets/MatrixbycolumnsWidget.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <table :style=\"computedStyle\" role=\"presentation\">\n <tr v-for=\"(chunk, rindex) in widgetChunks\" :key=\"'r' + rindex\">\n <td v-for=\"(widget, cindex) in chunk\" :key=\"'c' + cindex\">\n <v-tooltip\n v-if=\"getTooltipText(widget)\"\n :open-delay=\"getTooltipDelay(widget)\"\n location=\"top\"\n :activator-props=\"getTooltipActivatorProps(widget)\"\n >\n <template #activator=\"{ props }\">\n <component\n :is=\"widget.type\"\n v-bind=\"{ ...listeners, ...props }\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </template>\n <span>{{ getTooltipText(widget) }}</span>\n </v-tooltip>\n <component\n :is=\"widget.type\"\n v-else\n v-bind=\"listeners\"\n :target=\"widget.target\"\n :parameters=\"widget.parameters\"\n :settings=\"widget.settings\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"screenTimeZone\"\n :widgets=\"widget.widgets\"\n :name=\"widget.name\"\n :line=\"widget.line\"\n :line-number=\"widget.lineNumber\"\n />\n </td>\n </tr>\n </table>\n</template>\n\n<script>\nimport Layout from './Layout'\nimport _ from 'lodash'\nexport default {\n mixins: [Layout],\n computed: {\n columns() {\n return Number.parseInt(this.parameters[0])\n },\n widgetChunks() {\n return _.chunk(this.widgets, this.columns)\n },\n },\n created: function () {\n if (this.parameters[1]) {\n let margin = this.parameters[1]\n this.widgets.forEach((widget) => {\n const found = widget.settings.find(\n (setting) =>\n setting[0] === 'MARGIN' ||\n (setting[0].startsWith('RAW') &&\n setting[1].toUpperCase().includes('MARGIN')),\n )\n if (found === undefined) {\n widget.settings.push(['MARGIN', margin])\n }\n })\n }\n },\n}\n</script>\n"],"names":["_sfc_main","Layout","_","margin","widget","setting","_createElementBlock","_ctx","_openBlock","_Fragment","_renderList","$options","chunk","rindex","cindex","_createBlock","_component_v_tooltip","_withCtx","props","_resolveDynamicComponent","_mergeProps","_createElementVNode","_toDisplayString"],"mappings":"uRAkEKA,EAAU,CACb,OAAQ,CAACC,EAAAA,MAAM,EACf,SAAU,CACR,SAAU,CACR,OAAO,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAC3C,EACA,cAAe,CACb,OAAOC,EAAAA,EAAE,MAAM,KAAK,QAAS,KAAK,OAAO,CAC3C,GAEF,QAAS,UAAY,CACnB,GAAI,KAAK,WAAW,CAAC,EAAG,CACtB,IAAIC,EAAS,KAAK,WAAW,CAAC,EAC9B,KAAK,QAAQ,QAASC,GAAW,CACjBA,EAAO,SAAS,KAC3BC,GACCA,EAAQ,CAAC,IAAM,UACdA,EAAQ,CAAC,EAAE,WAAW,KAAK,GAC1BA,EAAQ,CAAC,EAAE,YAAW,EAAG,SAAS,QAAQ,CAChD,IACc,QACZD,EAAO,SAAS,KAAK,CAAC,SAAUD,CAAM,CAAC,CAE3C,CAAC,CACH,CACF,CACF,uFA1EEG,EAAAA,mBA0CQ,QAAA,CA1CA,uBAAOC,EAAA,aAAa,EAAE,KAAK,kBACjCC,EAAAA,UAAA,EAAA,EAAAF,EAAAA,mBAwCKG,WAAA,KAAAC,EAAAA,WAxCyBC,EAAA,aAAY,CAA9BC,EAAOC,mBAAnBP,EAAAA,mBAwCK,KAAA,CAxCwC,QAAWO,KACtDL,YAAA,EAAA,EAAAF,EAAAA,mBAsCKG,EAAAA,SAAA,KAAAC,EAAAA,WAtC0BE,EAAK,CAAxBR,EAAQU,mBAApBR,EAAAA,mBAsCK,KAAA,CAtCkC,QAAWQ,IAExCP,EAAA,eAAeH,CAAM,iBAD7BW,EAAAA,YAsBYC,EAAA,OApBT,aAAYT,EAAA,gBAAgBH,CAAM,EACnC,SAAS,MACR,kBAAiBG,EAAA,yBAAyBH,CAAM,IAEtC,UAASa,EAAAA,QAClB,CAYE,CAboB,MAAAC,KAAK,gBAC3BH,EAAAA,YAYEI,EAAAA,wBAXKf,EAAO,IAAI,EADlBgB,EAAAA,WAYE,CAAA,QAAA,EAAA,EAAA,CAAA,GAVab,EAAA,UAAS,GAAKW,GAAK,CAC/B,OAAQd,EAAO,OACf,WAAYA,EAAO,WACnB,SAAUA,EAAO,SACjB,gBAAeG,EAAA,aACf,mBAAkBA,EAAA,eAClB,QAASH,EAAO,QAChB,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAaA,EAAO,uJAGzB,IAAyC,CAAzCiB,qBAAyC,OAAA,KAAAC,EAAAA,gBAAhCf,EAAA,eAAeH,CAAM,CAAA,EAAA,CAAA,kDAEhCI,EAAAA,UAAA,EAAAO,EAAAA,YAaEI,EAAAA,wBAZKf,EAAO,IAAI,EADlBgB,aAaE,mBAVQb,EAAA,UAAS,CAChB,OAAQH,EAAO,OACf,WAAYA,EAAO,WACnB,SAAUA,EAAO,SACjB,gBAAeG,EAAA,aACf,mBAAkBA,EAAA,eAClB,QAASH,EAAO,QAChB,KAAMA,EAAO,KACb,KAAMA,EAAO,KACb,cAAaA,EAAO"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { F as v } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-
|
|
1
|
+
import { F as v } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js";
|
|
2
2
|
import { resolveComponent as c, createElementBlock as _, openBlock as d, createVNode as a, createElementVNode as R, createBlock as g, createCommentVNode as b, withCtx as n, createTextVNode as m, toDisplayString as p, Fragment as S, renderList as j, withDirectives as N, vShow as I, mergeProps as y } from "vue";
|
|
3
3
|
import { _ as P } from "./CustomIcon-Cg3jCA_l.js";
|
|
4
4
|
import "./store-CO68rDJT.js";
|
|
5
5
|
import "single-spa";
|
|
6
|
-
import { O as U } from "./OutputDialog-
|
|
6
|
+
import { O as U } from "./OutputDialog-BY-TZNRl.js";
|
|
7
7
|
import { T as B } from "./TextBoxDialog-BRwZOtzT.js";
|
|
8
8
|
import { f as L, t as q } from "./format-CJYjW-xx.js";
|
|
9
9
|
const J = {
|
|
@@ -458,4 +458,4 @@ const ee = /* @__PURE__ */ P(J, [["render", z], ["__scopeId", "data-v-172eefdb"]
|
|
|
458
458
|
export {
|
|
459
459
|
ee as default
|
|
460
460
|
};
|
|
461
|
-
//# sourceMappingURL=MicroservicesTab-
|
|
461
|
+
//# sourceMappingURL=MicroservicesTab-CiEGGavF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicroservicesTab-BSXNA_Si.js","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{ formatDate(microservice_status[microservice.name].updated_at) }},\n Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n formatDate(nanoSecs) {\n return format(\n toDate(Number.parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","services","s","name","ms","Api","response","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","nanoSecs","format","toDate","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MicroservicesTab-CiEGGavF.js","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{ formatDate(microservice_status[microservice.name].updated_at) }},\n Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n formatDate(nanoSecs) {\n return format(\n toDate(Number.parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","services","s","name","ms","Api","response","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","nanoSecs","format","toDate","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-MfH160rD.cjs"),e=require("vue"),k=require("./CustomIcon-8F08upeg.cjs");require("./store-CiS35N-w.cjs");require("single-spa");const T=require("./OutputDialog-R3Xj3_yw.cjs"),V=require("./TextBoxDialog-CppyxSFu.cjs"),v=require("./format-DOZQNf-X.cjs"),N={components:{OutputDialog:T.OutputDialog,TextBoxDialog:V.TextBoxDialog},data(){return{filteredMicroservices:[],allMicroservices:[],microservice_status:{},microservice_id:null,jsonContent:"",dialogTitle:"",showDialog:!1,showError:!1,alert:"",alertType:"success",showAlert:!1,updater:null,microserviceOperations:{}}},computed:{serviceFilter(){const t=this.$route.query.services;return t?t.split(",").map(r=>r.trim()).filter(r=>r):null},hasServiceFilter(){return this.serviceFilter&&this.serviceFilter.length>0},totalServiceCount(){return this.allMicroservices.length},filteredServiceCount(){return this.filteredMicroservices.length}},watch:{"$route.query.services":function(){this.applyServiceFilter()}},mounted(){this.update(),this.updater=setInterval(()=>{this.update()},2e3)},beforeUnmount(){clearInterval(this.updater),this.updater=null},methods:{isOperationInProgress:function(t){return!!this.microserviceOperations[t]},isEnabled:function(t){return this.allMicroservices.find(l=>l.name===t)?.enabled!==!1},isRestarting:function(t){return this.microserviceOperations[t]?.operation==="restarting"},isStarting:function(t){return this.microserviceOperations[t]?.operation==="starting"},isStopping:function(t){return this.microserviceOperations[t]?.operation==="stopping"},update:function(){d.Fr.get("/openc3-api/microservice_status/all").then(t=>{this.microservice_status=t.data,this.checkOperationCompletion()}),d.Fr.get("/openc3-api/microservices/all").then(t=>{let r=[];for(const[l,o]of Object.entries(t.data))r.push(o);r.sort((l,o)=>l.name.localeCompare(o.name)),this.allMicroservices=r,this.applyServiceFilter()})},checkOperationCompletion:function(){for(const[t,r]of Object.entries(this.microserviceOperations)){const l=this.allMicroservices.find(c=>c.name===t);if(!l)continue;const o=l.enabled!==!1,s=r.enabled_states[r.enabled_states.length-1];o!==s&&r.enabled_states.push(o),this.isOperationComplete(t,r)&&delete this.microserviceOperations[t]}},isOperationComplete:function(t,r){if(Date.now()-r.time_started>3e4)return this.alert=`${t} timed out when ${r.operation}.`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t],!0;if(r.operation==="stopping")return r.enabled_states.includes(!1);if(r.operation==="starting")return r.enabled_states.includes(!0);if(r.operation==="restarting"){const o=this.microservice_status[t]?.updated_at;return o&&r.initial_updated_at?o!==r.initial_updated_at:!1}return!1},applyServiceFilter:function(){this.hasServiceFilter?this.filteredMicroservices=this.allMicroservices.filter(t=>this.serviceFilter.includes(t.name)):this.filteredMicroservices=this.allMicroservices},clearServiceFilter:function(){this.$router.push({query:{}})},bulkRestartServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to restart ${t.length} microservice(s)? ${r}`;this.$dialog.confirm(l,{okText:"Restart",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(a=>a.name===o)?.enabled!==!1,c=this.microservice_status[o]?.updated_at;this.microserviceOperations[o]={operation:"restarting",enabled_states:[i],initial_updated_at:c,time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${o}/start`).catch(a=>{this.alert=`Start command failed for ${o}: ${a}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},bulkStopServices:function(){const t=this.filteredMicroservices.map(o=>o.name),r=t.join(", "),l=`Are you sure you want to stop ${t.length} microservice(s)?
|
|
2
2
|
|
|
3
3
|
${r}`;this.$dialog.confirm(l,{okText:"Stop",cancelText:"Cancel"}).then(()=>{t.forEach(o=>{const i=this.allMicroservices.find(c=>c.name===o)?.enabled!==!1;this.microserviceOperations[o]={operation:"stopping",enabled_states:[i],time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${o}/stop`).catch(c=>{this.alert=`Stop command failed for ${o}: ${c}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[o]})})}).catch(()=>{})},stopMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to stop microservice: ${t}?`,{okText:"Stop",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"stopping",enabled_states:[o],time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${t}/stop`).catch(s=>{this.alert=`Stop command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},restartMicroservice:function(t){this.$dialog.confirm(`Are you sure you want to restart microservice: ${t}?`,{okText:"Restart",cancelText:"Cancel"}).then(r=>{const o=this.allMicroservices.find(s=>s.name===t)?.enabled!==!1;this.microserviceOperations[t]={operation:"restarting",enabled_states:[o],initial_updated_at:this.microservice_status[t]?.updated_at,time_started:Date.now()},d.Fr.post(`/openc3-api/microservices/${t}/start`).catch(s=>{this.alert=`Restart command failed for ${t}: ${s}`,this.alertType="error",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),delete this.microserviceOperations[t]})})},showMicroservice:function(t){d.Fr.get(`/openc3-api/microservices/${t}`).then(r=>{this.microservice_id=t,this.dialogTitle=t,this.jsonContent=JSON.stringify(r.data,null," "),this.showDialog=!0})},showMicroserviceError:function(t){this.dialogTitle=t;const r=this.microservice_status[t].error;this.jsonContent=JSON.stringify(r,null," "),this.showError=!0},formatDate(t){return v.format(v.toDate(Number.parseInt(t)/1e6),"yyyy-MM-dd HH:mm:ss.SSS")},getStateColor(t){const r=this.microservice_status[t];return r?r.error?"red":!this.isEnabled(t)||r.state==="STOPPED"?"yellow":r.state==="RUNNING"?"green":"grey":"grey"},getStateText(t){return this.isEnabled(t)?this.microservice_status[t].state:"STOPPED"},dialogCallback:function(t){if(this.showDialog=!1,t!==null){let r=JSON.parse(t),l="put",o=`/openc3-api/microservices/${this.microservice_id}`;r.name!==this.microservice_id&&(l="post",o="/openc3-api/microservices"),d.Fr[l](o,{data:{json:t}}).then(s=>{this.alert="Modified Microservice",this.alertType="success",this.showAlert=!0,setTimeout(()=>{this.showAlert=!1},5e3),this.update()})}}}},M={class:"text-caption text-medium-emphasis mt-2 mb-2 ml-4"};function D(t,r,l,o,s,i){const c=e.resolveComponent("v-alert"),a=e.resolveComponent("v-btn"),p=e.resolveComponent("v-col"),f=e.resolveComponent("v-row"),_=e.resolveComponent("v-list-item-title"),g=e.resolveComponent("v-list-item-subtitle"),C=e.resolveComponent("v-chip"),m=e.resolveComponent("v-tooltip"),S=e.resolveComponent("v-list-item"),w=e.resolveComponent("v-divider"),b=e.resolveComponent("v-list"),x=e.resolveComponent("output-dialog"),y=e.resolveComponent("text-box-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(c,{modelValue:s.showAlert,"onUpdate:modelValue":r[0]||(r[0]=n=>s.showAlert=n),closable:"",type:s.alertType},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.alert),1)]),_:1},8,["modelValue","type"]),e.createElementVNode("div",M,[i.hasServiceFilter&&i.filteredServiceCount===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode(" No microservices match filter (showing 0 / "+e.toDisplayString(i.totalServiceCount)+") ",1)],64)):i.hasServiceFilter?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(" Showing "+e.toDisplayString(i.filteredServiceCount)+" / "+e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(i.totalServiceCount)+" microservices ",1)],64))]),i.hasServiceFilter?(e.openBlock(),e.createBlock(f,{key:0,class:"ml-1 mb-1"},{default:e.withCtx(()=>[e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"primary","prepend-icon":"mdi-filter-off","aria-label":"Filter applied. Click to clear filter and show all services.",onClick:i.clearServiceFilter},{default:e.withCtx(()=>[...r[3]||(r[3]=[e.createTextVNode(" Show All ",-1)])]),_:1},8,["onClick"])]),_:1}),e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"warning","prepend-icon":"mdi-refresh",disabled:i.filteredServiceCount===0,onClick:i.bulkRestartServices},{default:e.withCtx(()=>[...r[4]||(r[4]=[e.createTextVNode(" Restart All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1}),e.createVNode(p,{cols:"auto"},{default:e.withCtx(()=>[e.createVNode(a,{color:"error","prepend-icon":"mdi-stop",disabled:i.filteredServiceCount===0,onClick:i.bulkStopServices},{default:e.withCtx(()=>[...r[5]||(r[5]=[e.createTextVNode(" Stop All ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(b,{class:"list","data-test":"microserviceList"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.filteredMicroservices,n=>(e.openBlock(),e.createElementBlock("div",{key:n.name},[e.createVNode(S,null,{append:e.withCtx(()=>[e.withDirectives(e.createVNode(a,{icon:"mdi-alert",variant:"text",onClick:u=>i.showMicroserviceError(n.name)},null,8,["onClick"]),[[e.vShow,s.microservice_status[n.name]?.error]]),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(C,{key:0,color:i.getStateColor(n.name),size:"small",label:""},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(i.getStateText(n.name)),1)]),_:2},1032,["color"])):e.createCommentVNode("",!0),e.createVNode(m,{text:i.isEnabled(n.name)?"Restart":"Start",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":i.isEnabled(n.name)?"Restart Microservice":"Start Microservice",icon:i.isRestarting(n.name)||i.isStarting(n.name)?"mdi-loading":i.isEnabled(n.name)?"mdi-refresh":"mdi-play",class:{"rotating-icon":i.isRestarting(n.name)||i.isStarting(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.restartMicroservice(n.name)}),null,16,["aria-label","icon","class","disabled","onClick"])]),_:2},1032,["text"]),e.createVNode(m,{text:"Stop",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Stop Microservice",icon:i.isStopping(n.name)?"mdi-loading":"mdi-stop",class:{"rotating-icon":i.isStopping(n.name)},variant:"text",disabled:i.isOperationInProgress(n.name),onClick:h=>i.stopMicroservice(n.name)}),null,16,["icon","class","disabled","onClick"])]),_:2},1024),e.createVNode(m,{text:"Show Details",location:"top"},{activator:e.withCtx(({props:u})=>[e.createVNode(a,e.mergeProps({ref_for:!0},u,{"aria-label":"Show Microservice Details",icon:"mdi-eye",variant:"text",onClick:h=>i.showMicroservice(n.name)}),null,16,["onClick"])]),_:2},1024)]),default:e.withCtx(()=>[e.createVNode(_,null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.name),1)]),_:2},1024),s.microservice_status[n.name]?(e.openBlock(),e.createBlock(g,{key:0},{default:e.withCtx(()=>[e.createTextVNode(" Updated: "+e.toDisplayString(i.formatDate(s.microservice_status[n.name].updated_at))+", Enabled: "+e.toDisplayString(i.isEnabled(n.name)?"True":"False")+", Count: "+e.toDisplayString(s.microservice_status[n.name].count),1)]),_:2},1024)):e.createCommentVNode("",!0)]),_:2},1024),e.createVNode(w)]))),128))]),_:1}),s.showDialog?(e.openBlock(),e.createBlock(x,{key:1,modelValue:s.showDialog,"onUpdate:modelValue":r[1]||(r[1]=n=>s.showDialog=n),content:s.jsonContent,type:"Microservice",name:s.dialogTitle,onSubmit:i.dialogCallback},null,8,["modelValue","content","name","onSubmit"])):e.createCommentVNode("",!0),s.showError?(e.openBlock(),e.createBlock(y,{key:2,modelValue:s.showError,"onUpdate:modelValue":r[2]||(r[2]=n=>s.showError=n),text:s.jsonContent,title:s.dialogTitle},null,8,["modelValue","text","title"])):e.createCommentVNode("",!0)])}const O=k._export_sfc(N,[["render",D],["__scopeId","data-v-172eefdb"]]);exports.default=O;
|
|
4
|
-
//# sourceMappingURL=MicroservicesTab-
|
|
4
|
+
//# sourceMappingURL=MicroservicesTab-DvDK2hPW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MicroservicesTab-ARGtrfOb.cjs","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{ formatDate(microservice_status[microservice.name].updated_at) }},\n Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n formatDate(nanoSecs) {\n return format(\n toDate(Number.parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","services","s","name","ms","Api","response","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","nanoSecs","format","toDate","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MicroservicesTab-DvDK2hPW.cjs","sources":["../src/tools/admin/tabs/MicroservicesTab.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2026, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-alert v-model=\"showAlert\" closable :type=\"alertType\">{{\n alert\n }}</v-alert>\n <div class=\"text-caption text-medium-emphasis mt-2 mb-2 ml-4\">\n <template v-if=\"hasServiceFilter && filteredServiceCount === 0\">\n No microservices match filter (showing 0 / {{ totalServiceCount }})\n </template>\n <template v-else-if=\"hasServiceFilter\">\n Showing {{ filteredServiceCount }} /\n {{ totalServiceCount }} microservices\n </template>\n <template v-else> {{ totalServiceCount }} microservices </template>\n </div>\n <v-row v-if=\"hasServiceFilter\" class=\"ml-1 mb-1\">\n <v-col cols=\"auto\">\n <v-btn\n color=\"primary\"\n prepend-icon=\"mdi-filter-off\"\n aria-label=\"Filter applied. Click to clear filter and show all services.\"\n @click=\"clearServiceFilter\"\n >\n Show All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"warning\"\n prepend-icon=\"mdi-refresh\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkRestartServices\"\n >\n Restart All\n </v-btn>\n </v-col>\n <v-col cols=\"auto\">\n <v-btn\n color=\"error\"\n prepend-icon=\"mdi-stop\"\n :disabled=\"filteredServiceCount === 0\"\n @click=\"bulkStopServices\"\n >\n Stop All\n </v-btn>\n </v-col>\n </v-row>\n <v-list class=\"list\" data-test=\"microserviceList\">\n <div\n v-for=\"microservice in filteredMicroservices\"\n :key=\"microservice.name\"\n >\n <v-list-item>\n <v-list-item-title>{{ microservice.name }}</v-list-item-title>\n <v-list-item-subtitle v-if=\"microservice_status[microservice.name]\">\n Updated:\n {{ formatDate(microservice_status[microservice.name].updated_at) }},\n Enabled: {{ isEnabled(microservice.name) ? 'True' : 'False' }},\n Count:\n {{ microservice_status[microservice.name].count }}\n </v-list-item-subtitle>\n <template #append>\n <v-btn\n v-show=\"microservice_status[microservice.name]?.error\"\n icon=\"mdi-alert\"\n variant=\"text\"\n @click=\"showMicroserviceError(microservice.name)\"\n />\n <v-chip\n v-if=\"microservice_status[microservice.name]\"\n :color=\"getStateColor(microservice.name)\"\n size=\"small\"\n label\n >\n {{ getStateText(microservice.name) }}\n </v-chip>\n <v-tooltip\n :text=\"isEnabled(microservice.name) ? 'Restart' : 'Start'\"\n location=\"top\"\n >\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n :aria-label=\"\n isEnabled(microservice.name)\n ? 'Restart Microservice'\n : 'Start Microservice'\n \"\n :icon=\"\n isRestarting(microservice.name) ||\n isStarting(microservice.name)\n ? 'mdi-loading'\n : isEnabled(microservice.name)\n ? 'mdi-refresh'\n : 'mdi-play'\n \"\n :class=\"{\n 'rotating-icon':\n isRestarting(microservice.name) ||\n isStarting(microservice.name),\n }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"restartMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Stop\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Stop Microservice\"\n :icon=\"\n isStopping(microservice.name) ? 'mdi-loading' : 'mdi-stop'\n \"\n :class=\"{ 'rotating-icon': isStopping(microservice.name) }\"\n variant=\"text\"\n :disabled=\"isOperationInProgress(microservice.name)\"\n @click=\"stopMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n <v-tooltip text=\"Show Details\" location=\"top\">\n <template #activator=\"{ props }\">\n <v-btn\n v-bind=\"props\"\n aria-label=\"Show Microservice Details\"\n icon=\"mdi-eye\"\n variant=\"text\"\n @click=\"showMicroservice(microservice.name)\"\n />\n </template>\n </v-tooltip>\n </template>\n </v-list-item>\n <v-divider />\n </div>\n </v-list>\n <output-dialog\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :content=\"jsonContent\"\n type=\"Microservice\"\n :name=\"dialogTitle\"\n @submit=\"dialogCallback\"\n />\n <text-box-dialog\n v-if=\"showError\"\n v-model=\"showError\"\n :text=\"jsonContent\"\n :title=\"dialogTitle\"\n />\n </div>\n</template>\n\n<script>\nimport { toDate, format } from 'date-fns'\nimport { Api } from '@openc3/js-common/services'\nimport { OutputDialog, TextBoxDialog } from '@/components'\n\nexport default {\n components: {\n OutputDialog,\n TextBoxDialog,\n },\n data() {\n return {\n filteredMicroservices: [],\n allMicroservices: [],\n microservice_status: {},\n microservice_id: null,\n jsonContent: '',\n dialogTitle: '',\n showDialog: false,\n showError: false,\n alert: '',\n alertType: 'success',\n showAlert: false,\n updater: null,\n // { service_name:\n // { operation: 'stopping' | 'restarting' | 'starting',\n // enabled_states: []\n // initial_updated_at: timestamp\n // time_started: timestamp\n // }\n // }\n microserviceOperations: {},\n }\n },\n computed: {\n serviceFilter() {\n const services = this.$route.query.services\n if (!services) return null\n return services\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s)\n },\n hasServiceFilter() {\n return this.serviceFilter && this.serviceFilter.length > 0\n },\n totalServiceCount() {\n return this.allMicroservices.length\n },\n filteredServiceCount() {\n return this.filteredMicroservices.length\n },\n },\n watch: {\n '$route.query.services': function () {\n this.applyServiceFilter()\n },\n },\n mounted() {\n this.update()\n this.updater = setInterval(() => {\n this.update()\n }, 2000)\n },\n beforeUnmount() {\n clearInterval(this.updater)\n this.updater = null\n },\n methods: {\n isOperationInProgress: function (name) {\n return !!this.microserviceOperations[name]\n },\n isEnabled: function (name) {\n const microservice = this.allMicroservices.find((ms) => ms.name === name)\n return microservice?.enabled !== false\n },\n isRestarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'restarting'\n },\n isStarting: function (name) {\n return this.microserviceOperations[name]?.operation === 'starting'\n },\n isStopping: function (name) {\n return this.microserviceOperations[name]?.operation === 'stopping'\n },\n update: function () {\n Api.get('/openc3-api/microservice_status/all').then((response) => {\n this.microservice_status = response.data\n this.checkOperationCompletion()\n })\n Api.get('/openc3-api/microservices/all').then((response) => {\n // Convert hash of microservices to array of microservices\n let microservices = []\n for (const [_microservice_name, microservice] of Object.entries(\n response.data,\n )) {\n microservices.push(microservice)\n }\n microservices.sort((a, b) => a.name.localeCompare(b.name))\n this.allMicroservices = microservices\n this.applyServiceFilter()\n })\n },\n checkOperationCompletion: function () {\n for (const [name, tracking] of Object.entries(\n this.microserviceOperations,\n )) {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n if (!microservice) continue\n\n const currentEnabled = microservice.enabled !== false\n const lastEnabled =\n tracking.enabled_states[tracking.enabled_states.length - 1]\n\n // Only add state if it changed\n if (currentEnabled !== lastEnabled) {\n tracking.enabled_states.push(currentEnabled)\n }\n\n const isComplete = this.isOperationComplete(name, tracking)\n if (isComplete) {\n delete this.microserviceOperations[name]\n }\n }\n },\n isOperationComplete: function (serviceName, tracking) {\n // Check for timeout (30 seconds)\n const elapsed = Date.now() - tracking.time_started\n if (elapsed > 30000) {\n this.alert = `${serviceName} timed out when ${tracking.operation}.`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[serviceName]\n return true\n }\n\n if (tracking.operation === 'stopping') {\n // Track true -> false\n return tracking.enabled_states.includes(false)\n }\n if (tracking.operation === 'starting') {\n // Track false -> true\n return tracking.enabled_states.includes(true)\n }\n if (tracking.operation === 'restarting') {\n // Check if updated_at has changed\n const currentUpdatedAt =\n this.microservice_status[serviceName]?.updated_at\n if (currentUpdatedAt && tracking.initial_updated_at) {\n return currentUpdatedAt !== tracking.initial_updated_at\n }\n return false\n }\n return false\n },\n applyServiceFilter: function () {\n if (this.hasServiceFilter) {\n this.filteredMicroservices = this.allMicroservices.filter((ms) =>\n this.serviceFilter.includes(ms.name),\n )\n } else {\n this.filteredMicroservices = this.allMicroservices\n }\n },\n clearServiceFilter: function () {\n this.$router.push({ query: {} })\n },\n bulkRestartServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to restart ${microserviceNames.length} microservice(s)? ${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n const initialUpdatedAt = this.microservice_status[name]?.updated_at\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: initialUpdatedAt,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch(\n (error) => {\n this.alert = `Start command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n bulkStopServices: function () {\n const microserviceNames = this.filteredMicroservices.map((m) => m.name)\n const microserviceList = microserviceNames.join(', ')\n const confirmMessage = `Are you sure you want to stop ${microserviceNames.length} microservice(s)?\\n\\n${microserviceList}`\n\n this.$dialog\n .confirm(confirmMessage, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then(() => {\n microserviceNames.forEach((name) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch(\n (error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n },\n )\n })\n })\n .catch(() => {\n // User cancelled\n })\n },\n stopMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to stop microservice: ${name}?`, {\n okText: 'Stop',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'stopping',\n enabled_states: [currentEnabled],\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/stop`).catch((error) => {\n this.alert = `Stop command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n restartMicroservice: function (name) {\n this.$dialog\n .confirm(`Are you sure you want to restart microservice: ${name}?`, {\n okText: 'Restart',\n cancelText: 'Cancel',\n })\n .then((_dialog) => {\n const microservice = this.allMicroservices.find(\n (ms) => ms.name === name,\n )\n const currentEnabled = microservice?.enabled !== false\n this.microserviceOperations[name] = {\n operation: 'restarting',\n enabled_states: [currentEnabled],\n initial_updated_at: this.microservice_status[name]?.updated_at,\n time_started: Date.now(),\n }\n Api.post(`/openc3-api/microservices/${name}/start`).catch((error) => {\n this.alert = `Restart command failed for ${name}: ${error}`\n this.alertType = 'error'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n delete this.microserviceOperations[name]\n })\n })\n },\n showMicroservice: function (name) {\n Api.get(`/openc3-api/microservices/${name}`).then((response) => {\n this.microservice_id = name\n this.dialogTitle = name\n this.jsonContent = JSON.stringify(response.data, null, '\\t')\n this.showDialog = true\n })\n },\n showMicroserviceError: function (name) {\n this.dialogTitle = name\n const e = this.microservice_status[name].error\n this.jsonContent = JSON.stringify(e, null, '\\t')\n this.showError = true\n },\n formatDate(nanoSecs) {\n return format(\n toDate(Number.parseInt(nanoSecs) / 1000000),\n 'yyyy-MM-dd HH:mm:ss.SSS',\n )\n },\n // States are determined by the microservice and not from an explicitly defined set\n // However, we can provide useful colors for errors and common states\n getStateColor(microserviceName) {\n const status = this.microservice_status[microserviceName]\n if (!status) return 'grey'\n if (status.error) return 'red'\n // If not enabled, show as stopped even if state is \"running\"\n if (!this.isEnabled(microserviceName) || status.state === 'STOPPED')\n return 'yellow'\n if (status.state === 'RUNNING') return 'green'\n return 'grey'\n },\n getStateText(microserviceName) {\n if (!this.isEnabled(microserviceName)) {\n return 'STOPPED'\n }\n return this.microservice_status[microserviceName].state\n },\n dialogCallback: function (content) {\n this.showDialog = false\n if (content !== null) {\n let parsed = JSON.parse(content)\n let method = 'put'\n let url = `/openc3-api/microservices/${this.microservice_id}`\n if (parsed['name'] !== this.microservice_id) {\n method = 'post'\n url = '/openc3-api/microservices'\n }\n\n Api[method](url, {\n data: {\n json: content,\n },\n }).then((response) => {\n this.alert = 'Modified Microservice'\n this.alertType = 'success'\n this.showAlert = true\n setTimeout(() => {\n this.showAlert = false\n }, 5000)\n this.update()\n })\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.list {\n background-color: var(--color-background-surface-default) !important;\n overflow-x: hidden;\n}\n.rotating-icon {\n animation: spin 1s linear infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n</style>\n"],"names":["_sfc_main","OutputDialog","TextBoxDialog","services","s","name","ms","Api","response","microservices","_microservice_name","microservice","a","b","tracking","currentEnabled","lastEnabled","serviceName","currentUpdatedAt","microserviceNames","m","microserviceList","confirmMessage","initialUpdatedAt","error","_dialog","e","nanoSecs","format","toDate","microserviceName","status","content","parsed","method","url","_hoisted_1","_createElementBlock","_createVNode","_component_v_alert","$data","$event","_createElementVNode","$options","_Fragment","_toDisplayString","_createTextVNode","_createBlock","_component_v_row","_component_v_col","_component_v_btn","_cache","_component_v_list","_renderList","_component_v_list_item","_vShow","_component_v_chip","_component_v_tooltip","_withCtx","props","_mergeProps","_component_v_list_item_title","_component_v_list_item_subtitle","_component_v_divider","_component_output_dialog","_component_text_box_dialog"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { y as _ } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-
|
|
1
|
+
import { y as _ } from "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CDTSzdb-.js";
|
|
2
2
|
import { resolveComponent as s, createBlock as N, openBlock as b, withKeys as v, normalizeClass as g, normalizeStyle as T, withCtx as l, createVNode as o, createTextVNode as c, mergeProps as F } from "vue";
|
|
3
3
|
import { _ as I } from "./CustomIcon-Cg3jCA_l.js";
|
|
4
4
|
const k = {
|
|
@@ -230,4 +230,4 @@ const M = /* @__PURE__ */ I(k, [["render", C], ["__scopeId", "data-v-5606bec3"]]
|
|
|
230
230
|
export {
|
|
231
231
|
M as O
|
|
232
232
|
};
|
|
233
|
-
//# sourceMappingURL=OpenC3TimePicker-
|
|
233
|
+
//# sourceMappingURL=OpenC3TimePicker-CkaALgy9.js.map
|