@openc3/vue-common 6.0.2 → 6.2.0-fix0
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-BIQi_bWC.cjs +3 -0
- package/dist/ArrayWidget-BIQi_bWC.cjs.map +1 -0
- package/dist/ArrayWidget-BxEO5hEG.js +106 -0
- package/dist/ArrayWidget-BxEO5hEG.js.map +1 -0
- package/dist/ArrayplotWidget-B_VPoV4v.js +199 -0
- package/dist/ArrayplotWidget-B_VPoV4v.js.map +1 -0
- package/dist/ArrayplotWidget-Donxhd8_.cjs +2 -0
- package/dist/ArrayplotWidget-Donxhd8_.cjs.map +1 -0
- package/dist/AstroStatus-CILMWL6F.cjs +2 -0
- package/dist/AstroStatus-CILMWL6F.cjs.map +1 -0
- package/dist/AstroStatus-CY9VkeTN.js +40 -0
- package/dist/AstroStatus-CY9VkeTN.js.map +1 -0
- package/dist/BarColumn-C9dkpg2O.js +108 -0
- package/dist/BarColumn-C9dkpg2O.js.map +1 -0
- package/dist/BarColumn-CyRSZHMh.cjs +2 -0
- package/dist/BarColumn-CyRSZHMh.cjs.map +1 -0
- package/dist/BlockWidget-CuefOin6.js +112 -0
- package/dist/BlockWidget-CuefOin6.js.map +1 -0
- package/dist/BlockWidget-DPLN1jgj.cjs +3 -0
- package/dist/BlockWidget-DPLN1jgj.cjs.map +1 -0
- package/dist/ButtonWidget-B6HM0Doo.js +166 -0
- package/dist/ButtonWidget-B6HM0Doo.js.map +1 -0
- package/dist/ButtonWidget-DccYzIY3.cjs +3 -0
- package/dist/ButtonWidget-DccYzIY3.cjs.map +1 -0
- package/dist/CanvasWidget-BzTU9rc9.cjs +2 -0
- package/dist/CanvasWidget-BzTU9rc9.cjs.map +1 -0
- package/dist/CanvasWidget-DZQGG-yQ.js +39 -0
- package/dist/CanvasWidget-DZQGG-yQ.js.map +1 -0
- package/dist/CanvasdotWidget-6wuCSnw_.js +19 -0
- package/dist/CanvasdotWidget-6wuCSnw_.js.map +1 -0
- package/dist/CanvasdotWidget-B7VTS1QI.cjs +2 -0
- package/dist/CanvasdotWidget-B7VTS1QI.cjs.map +1 -0
- package/dist/CanvasimageWidget-BwYpfmDE.cjs +2 -0
- package/dist/CanvasimageWidget-BwYpfmDE.cjs.map +1 -0
- package/dist/CanvasimageWidget-mhcPpAuN.js +58 -0
- package/dist/CanvasimageWidget-mhcPpAuN.js.map +1 -0
- package/dist/CanvasimagevalueWidget-Cx-dH8Gc.js +107 -0
- package/dist/CanvasimagevalueWidget-Cx-dH8Gc.js.map +1 -0
- package/dist/CanvasimagevalueWidget-E_NsZ82T.cjs +2 -0
- package/dist/CanvasimagevalueWidget-E_NsZ82T.cjs.map +1 -0
- package/dist/CanvaslabelWidget-BBDuXWfU.cjs +2 -0
- package/dist/CanvaslabelWidget-BBDuXWfU.cjs.map +1 -0
- package/dist/CanvaslabelWidget-CQZCeohU.js +23 -0
- package/dist/CanvaslabelWidget-CQZCeohU.js.map +1 -0
- package/dist/CanvaslabelvalueWidget-CwmYDCjr.js +42 -0
- package/dist/CanvaslabelvalueWidget-CwmYDCjr.js.map +1 -0
- package/dist/CanvaslabelvalueWidget-DAdu7ujn.cjs +2 -0
- package/dist/CanvaslabelvalueWidget-DAdu7ujn.cjs.map +1 -0
- package/dist/CanvaslineWidget-Bv5da1Vy.cjs +2 -0
- package/dist/CanvaslineWidget-Bv5da1Vy.cjs.map +1 -0
- package/dist/CanvaslineWidget-nTP3fJB4.js +28 -0
- package/dist/CanvaslineWidget-nTP3fJB4.js.map +1 -0
- package/dist/CanvaslinevalueWidget-BVfUB96K.cjs +2 -0
- package/dist/CanvaslinevalueWidget-BVfUB96K.cjs.map +1 -0
- package/dist/CanvaslinevalueWidget-C3sJnjLQ.js +44 -0
- package/dist/CanvaslinevalueWidget-C3sJnjLQ.js.map +1 -0
- package/dist/CheckbuttonWidget-5-8YDsQL.js +37 -0
- package/dist/CheckbuttonWidget-5-8YDsQL.js.map +1 -0
- package/dist/CheckbuttonWidget-BGqD-BGc.cjs +2 -0
- package/dist/CheckbuttonWidget-BGqD-BGc.cjs.map +1 -0
- package/dist/ComboboxWidget-DoHMlSAr.cjs +2 -0
- package/dist/ComboboxWidget-DoHMlSAr.cjs.map +1 -0
- package/dist/ComboboxWidget-DzBL8h9f.js +37 -0
- package/dist/ComboboxWidget-DzBL8h9f.js.map +1 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs +2 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-BHFhmbuH.cjs.map +1 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js +10 -0
- package/dist/CosmosRuxIcon.vue_vue_type_style_index_0_scoped_9af48e85_lang-CHgC5LLL.js.map +1 -0
- package/dist/CriticalCmdDialog-DLEasFsx.js +270 -0
- package/dist/CriticalCmdDialog-DLEasFsx.js.map +1 -0
- package/dist/CriticalCmdDialog-DoLBrU2k.cjs +2 -0
- package/dist/CriticalCmdDialog-DoLBrU2k.cjs.map +1 -0
- package/dist/DateWidget-CW7Od7lB.js +40 -0
- package/dist/DateWidget-CW7Od7lB.js.map +1 -0
- package/dist/DateWidget-DKZz1J9J.cjs +2 -0
- package/dist/DateWidget-DKZz1J9J.cjs.map +1 -0
- package/dist/DetailsDialog-BvbziA7Y.js +767 -0
- package/dist/DetailsDialog-BvbziA7Y.js.map +1 -0
- package/dist/DetailsDialog-CiuQYvJK.cjs +2 -0
- package/dist/DetailsDialog-CiuQYvJK.cjs.map +1 -0
- package/dist/DynamicWidget-3wHr6Ng-.cjs +2 -0
- package/dist/DynamicWidget-3wHr6Ng-.cjs.map +1 -0
- package/dist/DynamicWidget-gFSYxzvT.js +35 -0
- package/dist/DynamicWidget-gFSYxzvT.js.map +1 -0
- package/dist/FormatvalueWidget-CGpnTqVH.js +44 -0
- package/dist/FormatvalueWidget-CGpnTqVH.js.map +1 -0
- package/dist/FormatvalueWidget-DFrbeKb9.cjs +2 -0
- package/dist/FormatvalueWidget-DFrbeKb9.cjs.map +1 -0
- package/dist/Graph-3rkhFP3G.js +1983 -0
- package/dist/Graph-3rkhFP3G.js.map +1 -0
- package/dist/Graph-C3vGMcos.cjs +2 -0
- package/dist/Graph-C3vGMcos.cjs.map +1 -0
- package/dist/GraphWidget-22NxFa9k.cjs +2 -0
- package/dist/GraphWidget-22NxFa9k.cjs.map +1 -0
- package/dist/GraphWidget-Dycey-mj.js +130 -0
- package/dist/GraphWidget-Dycey-mj.js.map +1 -0
- package/dist/HorizontalWidget-BBeB0eBI.cjs +2 -0
- package/dist/HorizontalWidget-BBeB0eBI.cjs.map +1 -0
- package/dist/HorizontalWidget-D31NRWy5.js +41 -0
- package/dist/HorizontalWidget-D31NRWy5.js.map +1 -0
- package/dist/HorizontalboxWidget-Br8dSVHD.js +38 -0
- package/dist/HorizontalboxWidget-Br8dSVHD.js.map +1 -0
- package/dist/HorizontalboxWidget-DsdzrCJx.cjs +2 -0
- package/dist/HorizontalboxWidget-DsdzrCJx.cjs.map +1 -0
- package/dist/HorizontallineWidget-BCKOQase.cjs +2 -0
- package/dist/HorizontallineWidget-BCKOQase.cjs.map +1 -0
- package/dist/HorizontallineWidget-CbxREBYI.js +11 -0
- package/dist/HorizontallineWidget-CbxREBYI.js.map +1 -0
- package/dist/IframeWidget-CZwsTgvX.cjs +2 -0
- package/dist/IframeWidget-CZwsTgvX.cjs.map +1 -0
- package/dist/IframeWidget-Ctj8OIcG.js +90 -0
- package/dist/IframeWidget-Ctj8OIcG.js.map +1 -0
- package/dist/ImageLoader-BrNrCBvi.js +36 -0
- package/dist/ImageLoader-BrNrCBvi.js.map +1 -0
- package/dist/ImageLoader-D_Gq-KxR.cjs +2 -0
- package/dist/ImageLoader-D_Gq-KxR.cjs.map +1 -0
- package/dist/ImageviewerWidget-DwRPFSLR.cjs +2 -0
- package/dist/ImageviewerWidget-DwRPFSLR.cjs.map +1 -0
- package/dist/ImageviewerWidget-XrsqxmLo.js +37 -0
- package/dist/ImageviewerWidget-XrsqxmLo.js.map +1 -0
- package/dist/InterfacesTab-CLaicsHA.cjs +2 -0
- package/dist/InterfacesTab-CLaicsHA.cjs.map +1 -0
- package/dist/InterfacesTab-DAeNlGlB.js +93 -0
- package/dist/InterfacesTab-DAeNlGlB.js.map +1 -0
- package/dist/LabelWidget-C-s8OVmA.cjs +2 -0
- package/dist/LabelWidget-C-s8OVmA.cjs.map +1 -0
- package/dist/LabelWidget-t7I87dp7.js +48 -0
- package/dist/LabelWidget-t7I87dp7.js.map +1 -0
- package/dist/LabelledWidget-C7TDf92M.js +42 -0
- package/dist/LabelledWidget-C7TDf92M.js.map +1 -0
- package/dist/LabelledWidget-DUpHxc9z.cjs +2 -0
- package/dist/LabelledWidget-DUpHxc9z.cjs.map +1 -0
- package/dist/LabelprogressbarWidget-D6cpayCR.cjs +2 -0
- package/dist/LabelprogressbarWidget-D6cpayCR.cjs.map +1 -0
- package/dist/LabelprogressbarWidget-wwLURt1u.js +43 -0
- package/dist/LabelprogressbarWidget-wwLURt1u.js.map +1 -0
- package/dist/LabelsparklineWidget-B3awLUyP.js +44 -0
- package/dist/LabelsparklineWidget-B3awLUyP.js.map +1 -0
- package/dist/LabelsparklineWidget-CJRnLETe.cjs +2 -0
- package/dist/LabelsparklineWidget-CJRnLETe.cjs.map +1 -0
- package/dist/LabelvalueWidget-Zx_yHCtl.js +58 -0
- package/dist/LabelvalueWidget-Zx_yHCtl.js.map +1 -0
- package/dist/LabelvalueWidget-owiMSCYl.cjs +2 -0
- package/dist/LabelvalueWidget-owiMSCYl.cjs.map +1 -0
- package/dist/LabelvaluedescWidget-BBSBh4vI.js +59 -0
- package/dist/LabelvaluedescWidget-BBSBh4vI.js.map +1 -0
- package/dist/LabelvaluedescWidget-MRmZBUc0.cjs +2 -0
- package/dist/LabelvaluedescWidget-MRmZBUc0.cjs.map +1 -0
- package/dist/LabelvaluelimitsbarWidget-BQ2XYPNE.cjs +2 -0
- package/dist/LabelvaluelimitsbarWidget-BQ2XYPNE.cjs.map +1 -0
- package/dist/LabelvaluelimitsbarWidget-CZueHYWG.js +57 -0
- package/dist/LabelvaluelimitsbarWidget-CZueHYWG.js.map +1 -0
- package/dist/LabelvaluelimitscolumnWidget-BTvzyQMq.js +47 -0
- package/dist/LabelvaluelimitscolumnWidget-BTvzyQMq.js.map +1 -0
- package/dist/LabelvaluelimitscolumnWidget-DNmVpU8J.cjs +2 -0
- package/dist/LabelvaluelimitscolumnWidget-DNmVpU8J.cjs.map +1 -0
- package/dist/LabelvaluerangebarWidget-BhYTBgDq.js +79 -0
- package/dist/LabelvaluerangebarWidget-BhYTBgDq.js.map +1 -0
- package/dist/LabelvaluerangebarWidget-DL0U8cbw.cjs +2 -0
- package/dist/LabelvaluerangebarWidget-DL0U8cbw.cjs.map +1 -0
- package/dist/Layout-Bh7VzCZd.js +14 -0
- package/dist/Layout-Bh7VzCZd.js.map +1 -0
- package/dist/Layout-DRL0EeSA.cjs +2 -0
- package/dist/Layout-DRL0EeSA.cjs.map +1 -0
- package/dist/LedWidget-B8rjFe1b.cjs +2 -0
- package/dist/LedWidget-B8rjFe1b.cjs.map +1 -0
- package/dist/LedWidget-CxJjJBBS.js +71 -0
- package/dist/LedWidget-CxJjJBBS.js.map +1 -0
- package/dist/LimitsbarWidget-CYIH8fdp.cjs +2 -0
- package/dist/LimitsbarWidget-CYIH8fdp.cjs.map +1 -0
- package/dist/LimitsbarWidget-Djui0IpK.js +69 -0
- package/dist/LimitsbarWidget-Djui0IpK.js.map +1 -0
- package/dist/LimitscolorWidget-CS0wpX9A.cjs +2 -0
- package/dist/LimitscolorWidget-CS0wpX9A.cjs.map +1 -0
- package/dist/LimitscolorWidget-DdmvKzmx.js +63 -0
- package/dist/LimitscolorWidget-DdmvKzmx.js.map +1 -0
- package/dist/LimitscolumnWidget-C_UW6xKq.cjs +2 -0
- package/dist/LimitscolumnWidget-C_UW6xKq.cjs.map +1 -0
- package/dist/LimitscolumnWidget-Cc19IEjq.js +66 -0
- package/dist/LimitscolumnWidget-Cc19IEjq.js.map +1 -0
- package/dist/LinegraphWidget-8td_PqgU.cjs +2 -0
- package/dist/LinegraphWidget-8td_PqgU.cjs.map +1 -0
- package/dist/LinegraphWidget-BtieJxeL.js +39 -0
- package/dist/LinegraphWidget-BtieJxeL.js.map +1 -0
- package/dist/MatrixbycolumnsWidget-CGOeCNW2.cjs +2 -0
- package/dist/MatrixbycolumnsWidget-CGOeCNW2.cjs.map +1 -0
- package/dist/MatrixbycolumnsWidget-DnExVRF8.js +56 -0
- package/dist/MatrixbycolumnsWidget-DnExVRF8.js.map +1 -0
- package/dist/MicroservicesTab-IbTmbPxO.js +268 -0
- package/dist/MicroservicesTab-IbTmbPxO.js.map +1 -0
- package/dist/MicroservicesTab-uMC8NebS.cjs +2 -0
- package/dist/MicroservicesTab-uMC8NebS.cjs.map +1 -0
- package/dist/OutputDialog-B4Q0QMJ1.cjs +2 -0
- package/dist/OutputDialog-B4Q0QMJ1.cjs.map +1 -0
- package/dist/OutputDialog-Ci5OT_fH.js +245 -0
- package/dist/OutputDialog-Ci5OT_fH.js.map +1 -0
- package/dist/PackagesTab-BX8YP3H1.js +332 -0
- package/dist/PackagesTab-BX8YP3H1.js.map +1 -0
- package/dist/PackagesTab-eYbk2vw7.cjs +2 -0
- package/dist/PackagesTab-eYbk2vw7.cjs.map +1 -0
- package/dist/PluginsTab-Ck3DvEGm.cjs +6 -0
- package/dist/PluginsTab-Ck3DvEGm.cjs.map +1 -0
- package/dist/PluginsTab-Ds3jk64b.js +599 -0
- package/dist/PluginsTab-Ds3jk64b.js.map +1 -0
- package/dist/ProgressbarWidget-CUIAYySg.cjs +2 -0
- package/dist/ProgressbarWidget-CUIAYySg.cjs.map +1 -0
- package/dist/ProgressbarWidget-DIfqhHRE.js +46 -0
- package/dist/ProgressbarWidget-DIfqhHRE.js.map +1 -0
- package/dist/RadiobuttonWidget-Cjk1JAP_.cjs +2 -0
- package/dist/RadiobuttonWidget-Cjk1JAP_.cjs.map +1 -0
- package/dist/RadiobuttonWidget-QzIkNP7m.js +34 -0
- package/dist/RadiobuttonWidget-QzIkNP7m.js.map +1 -0
- package/dist/RadiogroupWidget-B4lkYWaC.cjs +2 -0
- package/dist/RadiogroupWidget-B4lkYWaC.cjs.map +1 -0
- package/dist/RadiogroupWidget-Ci9sCX39.js +48 -0
- package/dist/RadiogroupWidget-Ci9sCX39.js.map +1 -0
- package/dist/RangebarWidget-CN0YuHqy.js +67 -0
- package/dist/RangebarWidget-CN0YuHqy.js.map +1 -0
- package/dist/RangebarWidget-nl0rzj93.cjs +2 -0
- package/dist/RangebarWidget-nl0rzj93.cjs.map +1 -0
- package/dist/RedisTab-CVimDkIE.js +135 -0
- package/dist/RedisTab-CVimDkIE.js.map +1 -0
- package/dist/RedisTab-DhS4GHDj.cjs +2 -0
- package/dist/RedisTab-DhS4GHDj.cjs.map +1 -0
- package/dist/RollupWidget-Bgudi_bt.cjs +2 -0
- package/dist/RollupWidget-Bgudi_bt.cjs.map +1 -0
- package/dist/RollupWidget-y4jBtJB2.js +83 -0
- package/dist/RollupWidget-y4jBtJB2.js.map +1 -0
- package/dist/RoutersTab-CzO10cVP.cjs +2 -0
- package/dist/RoutersTab-CzO10cVP.cjs.map +1 -0
- package/dist/RoutersTab-Dki_66av.js +95 -0
- package/dist/RoutersTab-Dki_66av.js.map +1 -0
- package/dist/ScriptChooser-BNm_zXxX.cjs +2 -0
- package/dist/ScriptChooser-BNm_zXxX.cjs.map +1 -0
- package/dist/ScriptChooser-l5i8c8KP.js +199 -0
- package/dist/ScriptChooser-l5i8c8KP.js.map +1 -0
- package/dist/ScrollwindowWidget-BIiV7xwi.cjs +2 -0
- package/dist/ScrollwindowWidget-BIiV7xwi.cjs.map +1 -0
- package/dist/ScrollwindowWidget-CBzYk4Y3.js +45 -0
- package/dist/ScrollwindowWidget-CBzYk4Y3.js.map +1 -0
- package/dist/SecretsTab-BSzFZ81X.cjs +2 -0
- package/dist/SecretsTab-BSzFZ81X.cjs.map +1 -0
- package/dist/SecretsTab-BjviaTxh.js +202 -0
- package/dist/SecretsTab-BjviaTxh.js.map +1 -0
- package/dist/SettingsTab-Bo_dYXgb.js +1382 -0
- package/dist/SettingsTab-Bo_dYXgb.js.map +1 -0
- package/dist/SettingsTab-DH8LAAoG.cjs +3 -0
- package/dist/SettingsTab-DH8LAAoG.cjs.map +1 -0
- package/dist/SignalWidget-CvZkvejy.cjs +2 -0
- package/dist/SignalWidget-CvZkvejy.cjs.map +1 -0
- package/dist/SignalWidget-DQ5Uc2uV.js +66 -0
- package/dist/SignalWidget-DQ5Uc2uV.js.map +1 -0
- package/dist/SimpleTextDialog-CheuP_ls.js +108 -0
- package/dist/SimpleTextDialog-CheuP_ls.js.map +1 -0
- package/dist/SimpleTextDialog-DmeNMMCR.cjs +2 -0
- package/dist/SimpleTextDialog-DmeNMMCR.cjs.map +1 -0
- package/dist/SpacerWidget-6rsc_dSM.js +19 -0
- package/dist/SpacerWidget-6rsc_dSM.js.map +1 -0
- package/dist/SpacerWidget-BBJR6HBQ.cjs +2 -0
- package/dist/SpacerWidget-BBJR6HBQ.cjs.map +1 -0
- package/dist/SparklineWidget-BxBLnjAO.cjs +2 -0
- package/dist/SparklineWidget-BxBLnjAO.cjs.map +1 -0
- package/dist/SparklineWidget-CZtvu2ss.js +48 -0
- package/dist/SparklineWidget-CZtvu2ss.js.map +1 -0
- package/dist/TabbookWidget-DNALU0jl.js +66 -0
- package/dist/TabbookWidget-DNALU0jl.js.map +1 -0
- package/dist/TabbookWidget-DyFQnA10.cjs +2 -0
- package/dist/TabbookWidget-DyFQnA10.cjs.map +1 -0
- package/dist/TargetsTab-Cd8U1aN_.js +129 -0
- package/dist/TargetsTab-Cd8U1aN_.js.map +1 -0
- package/dist/TargetsTab-DMiOliqg.cjs +2 -0
- package/dist/TargetsTab-DMiOliqg.cjs.map +1 -0
- package/dist/TextBoxDialog-DvUf3Cak.cjs +2 -0
- package/dist/TextBoxDialog-DvUf3Cak.cjs.map +1 -0
- package/dist/TextBoxDialog-fHkDTtzI.js +110 -0
- package/dist/TextBoxDialog-fHkDTtzI.js.map +1 -0
- package/dist/TextboxWidget-5hqPj74D.js +93 -0
- package/dist/TextboxWidget-5hqPj74D.js.map +1 -0
- package/dist/TextboxWidget-D6lW_dsU.cjs +2 -0
- package/dist/TextboxWidget-D6lW_dsU.cjs.map +1 -0
- package/dist/TextfieldWidget-Df0ANSiU.js +37 -0
- package/dist/TextfieldWidget-Df0ANSiU.js.map +1 -0
- package/dist/TextfieldWidget-iHN7-fyF.cjs +2 -0
- package/dist/TextfieldWidget-iHN7-fyF.cjs.map +1 -0
- package/dist/TimeWidget-C3NZqTEG.cjs +2 -0
- package/dist/TimeWidget-C3NZqTEG.cjs.map +1 -0
- package/dist/TimeWidget-C6XQMUG2.js +40 -0
- package/dist/TimeWidget-C6XQMUG2.js.map +1 -0
- package/dist/TitleWidget-B9SPUlbW.js +26 -0
- package/dist/TitleWidget-B9SPUlbW.js.map +1 -0
- package/dist/TitleWidget-CWZs33c4.cjs +2 -0
- package/dist/TitleWidget-CWZs33c4.cjs.map +1 -0
- package/dist/ToolsTab-CUpUmkZL.cjs +7 -0
- package/dist/ToolsTab-CUpUmkZL.cjs.map +1 -0
- package/dist/ToolsTab-Cgpb2nAW.js +1521 -0
- package/dist/ToolsTab-Cgpb2nAW.js.map +1 -0
- package/dist/TopBar-DuXL27iD.cjs +2 -0
- package/dist/TopBar-DuXL27iD.cjs.map +1 -0
- package/dist/TopBar-F1jHuFan.js +248 -0
- package/dist/TopBar-F1jHuFan.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-DVcAH30Y.js +95 -0
- package/dist/UpgradeToEnterpriseDialog-DVcAH30Y.js.map +1 -0
- package/dist/UpgradeToEnterpriseDialog-DfIKahNK.cjs +2 -0
- package/dist/UpgradeToEnterpriseDialog-DfIKahNK.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DJX55UPj.cjs +1417 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-DJX55UPj.cjs.map +1 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-iq-jp8dD.js +26941 -0
- package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_6fa47877_lang-iq-jp8dD.js.map +1 -0
- package/dist/VWidget-C2x_zSC2.cjs +2 -0
- package/dist/VWidget-C2x_zSC2.cjs.map +1 -0
- package/dist/VWidget-C4spAawK.js +323 -0
- package/dist/VWidget-C4spAawK.js.map +1 -0
- package/dist/ValueWidget-D4RrYVEK.js +116 -0
- package/dist/ValueWidget-D4RrYVEK.js.map +1 -0
- package/dist/ValueWidget-Do3Yn47P.cjs +2 -0
- package/dist/ValueWidget-Do3Yn47P.cjs.map +1 -0
- package/dist/ValuelimitsbarWidget-Bc9_Vj_f.js +41 -0
- package/dist/ValuelimitsbarWidget-Bc9_Vj_f.js.map +1 -0
- package/dist/ValuelimitsbarWidget-DJuh7FOs.cjs +2 -0
- package/dist/ValuelimitsbarWidget-DJuh7FOs.cjs.map +1 -0
- package/dist/ValuelimitscolumnWidget-BFpG-H7v.cjs +2 -0
- package/dist/ValuelimitscolumnWidget-BFpG-H7v.cjs.map +1 -0
- package/dist/ValuelimitscolumnWidget-DHKIL7sf.js +40 -0
- package/dist/ValuelimitscolumnWidget-DHKIL7sf.js.map +1 -0
- package/dist/ValuerangebarWidget-BlZSaiXo.cjs +2 -0
- package/dist/ValuerangebarWidget-BlZSaiXo.cjs.map +1 -0
- package/dist/ValuerangebarWidget-CecQRIok.js +65 -0
- package/dist/ValuerangebarWidget-CecQRIok.js.map +1 -0
- package/dist/VerticalWidget--8UErB4q.cjs +2 -0
- package/dist/VerticalWidget--8UErB4q.cjs.map +1 -0
- package/dist/VerticalWidget-D8jUFxjS.js +40 -0
- package/dist/VerticalWidget-D8jUFxjS.js.map +1 -0
- package/dist/VerticalboxWidget-B4eGUSYH.js +37 -0
- package/dist/VerticalboxWidget-B4eGUSYH.js.map +1 -0
- package/dist/VerticalboxWidget-cxHq1WKQ.cjs +2 -0
- package/dist/VerticalboxWidget-cxHq1WKQ.cjs.map +1 -0
- package/dist/Widget-DNf52jRQ.cjs +2 -0
- package/dist/Widget-DNf52jRQ.cjs.map +1 -0
- package/dist/Widget-fRCERxGf.js +197 -0
- package/dist/Widget-fRCERxGf.js.map +1 -0
- package/dist/addMonths-BtG7uZLJ.js +19 -0
- package/dist/addMonths-BtG7uZLJ.js.map +1 -0
- package/dist/addMonths-n1tnl3ab.cjs +2 -0
- package/dist/addMonths-n1tnl3ab.cjs.map +1 -0
- package/dist/components.cjs +7 -0
- package/dist/components.cjs.map +1 -0
- package/dist/components.js +2971 -0
- package/dist/components.js.map +1 -0
- package/dist/fileIcon-BduOQcTc.cjs +2 -0
- package/dist/fileIcon-BduOQcTc.cjs.map +1 -0
- package/dist/fileIcon-DqRHb1_Z.js +22 -0
- package/dist/fileIcon-DqRHb1_Z.js.map +1 -0
- package/dist/format-B22VpiOS.cjs +2 -0
- package/dist/format-B22VpiOS.cjs.map +1 -0
- package/dist/format-CVeawcIv.js +1295 -0
- package/dist/format-CVeawcIv.js.map +1 -0
- package/dist/getDefaultOptions-Batab9o8.cjs +2 -0
- package/dist/getDefaultOptions-Batab9o8.cjs.map +1 -0
- package/dist/getDefaultOptions-BhSDk-Jo.js +8 -0
- package/dist/getDefaultOptions-BhSDk-Jo.js.map +1 -0
- package/dist/icons/status-dark.png +0 -0
- package/dist/icons/status-dark.xcf +0 -0
- package/dist/icons/status-light.png +0 -0
- package/dist/icons.cjs +2 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.js +157 -0
- package/dist/icons.js.map +1 -0
- package/dist/index-Bz_jHTkl.cjs +7 -0
- package/dist/index-Bz_jHTkl.cjs.map +1 -0
- package/dist/index-CFQnWdPA.js +1705 -0
- package/dist/index-CFQnWdPA.js.map +1 -0
- package/dist/parse-DnkEsW-3.js +1603 -0
- package/dist/parse-DnkEsW-3.js.map +1 -0
- package/dist/parse-DwfgQboe.cjs +2 -0
- package/dist/parse-DwfgQboe.cjs.map +1 -0
- package/dist/plugins.cjs +9 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.js +772 -0
- package/dist/plugins.js.map +1 -0
- package/dist/timeFilters-8SaYvcH0.cjs +2 -0
- package/dist/timeFilters-8SaYvcH0.cjs.map +1 -0
- package/dist/timeFilters-CRYpYDdf.js +622 -0
- package/dist/timeFilters-CRYpYDdf.js.map +1 -0
- package/dist/tools/admin.cjs +13 -0
- package/dist/tools/admin.cjs.map +1 -0
- package/dist/tools/admin.js +1944 -0
- package/dist/tools/admin.js.map +1 -0
- package/dist/tools/base.cjs +2 -0
- package/dist/tools/base.cjs.map +1 -0
- package/dist/tools/base.js +1683 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/calendar.cjs +2 -0
- package/dist/tools/calendar.cjs.map +1 -0
- package/dist/tools/calendar.js +1586 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/util.cjs +2 -0
- package/dist/util.cjs.map +1 -0
- package/dist/util.js +9 -0
- package/dist/util.js.map +1 -0
- package/dist/vue-common.css +1 -0
- package/dist/widgets.cjs +2 -0
- package/dist/widgets.cjs.map +1 -0
- package/dist/widgets.js +132 -0
- package/dist/widgets.js.map +1 -0
- package/package.json +10 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.cjs","sources":["../src/components/autocomplete/screenCompleter.js","../src/components/config/Config.js","../src/components/config/OpenConfigDialog.vue","../src/components/config/SaveConfigDialog.vue","../src/components/EditScreenDialog.vue","../src/components/EnvironmentDialog.vue","../src/components/FileOpenSaveDialog.vue","../src/components/LogMessages.vue","../src/components/NotFound.vue","../src/components/Openc3Screen.vue","../src/components/TargetPacketItemChooser.vue"],"sourcesContent":["/*\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api, OpenC3Api } from '@openc3/js-common/services'\n\n// Test data useful for testing ScreenCompleter\n// var autocompleteData = [\n// {\n// caption: 'HORIZONTAL',\n// meta: 'Places the widgets it encapsulates horizontally',\n// snippet: 'HORIZONTAL ${1:<Margin>}',\n// },\n// {\n// caption: 'LABELVALUE',\n// meta: 'Displays a LABEL with the item name followed by a VALUE',\n// value: 'LABELVALUE ',\n// command: 'startAutocomplete',\n// params: [\n// { 'Target name': 1 },\n// { 'Packet name': 1 },\n// { 'Item name': 1 },\n// { RAW: 'raw description', CONVERTED: 1, FORMATTED: 1, WITH_UNITS: 1 },\n// { '<Number of characters>': 'characters description' },\n// ],\n// },\n// ]\n\nexport default class ScreenCompleter {\n constructor() {\n // See openc3-cosmos-cmd-tlm-api/app/controllers/script_autocomplete_controller.rb\n // for how the autocompleteData is built\n\n Api.get(`/openc3-api/autocomplete/data/screen`).then((response) => {\n this.autocompleteData = response.data\n })\n this.api = new OpenC3Api()\n }\n\n async getCompletions(editor, session, pos, prefix, callback) {\n var line = session.getLine(pos.row)\n var lineBefore = line.slice(0, pos.column)\n var parsedLine = lineBefore.trimStart().split(/ (?![^<]*>)/)\n var suggestions = this.autocompleteData\n // If we have more than 1 we've selected a keyword\n if (parsedLine.length > 1) {\n suggestions = suggestions.find((x) => x.caption === parsedLine[0])\n }\n var result = {}\n var more = true\n // If we found suggestions and the suggestions have params\n // then we do logic to substitute suggestions using the actual\n // target, packet, item data\n if (suggestions && suggestions['params']) {\n // Check if this is the last autocomplete parameter\n if (suggestions['params'].length == parsedLine.length - 1) {\n more = false\n }\n // parsedLine.length - 2 because the last element is blank\n // e.g. ['LABELVALUE', 'INST', '']\n var current = suggestions['params'][parsedLine.length - 2]\n // Check for Target name, Packet name, and Item name and use\n // api calls to substitute actual values for suggestions\n if (current['Target name']) {\n var names = await this.api.get_target_names()\n suggestions = names.reduce((acc, curr) => ((acc[curr] = 1), acc), {})\n } else if (current['Packet name']) {\n var target = parsedLine[parsedLine.length - 2]\n var packets = await this.api.get_all_tlm(target)\n suggestions = packets.reduce(\n (acc, pkt) => ((acc[pkt.packet_name] = pkt.description), acc),\n {},\n )\n } else if (current['Item name']) {\n var target = parsedLine[parsedLine.length - 3]\n var packet = parsedLine[parsedLine.length - 2]\n var packet = await this.api.get_tlm(target, packet)\n suggestions = packet.items.reduce(\n (acc, item) => ((acc[item.name] = item.description), acc),\n {},\n )\n } else {\n // Not a special case so just use the param as is\n suggestions = current\n }\n\n result = Object.keys(suggestions || {}).map((x) => {\n var completions = {\n value: x + (more ? ' ' : ''),\n // We want the autoComplete to continue right up\n // to the last parameter\n command: more && 'startAutocomplete',\n }\n // Only add the meta (description) if we have a string\n // This prevents adding (Object) descriptions\n if (typeof suggestions[x] === 'string') {\n completions['meta'] = suggestions[x]\n }\n return completions\n })\n } else {\n // The snippet case where we just inject the snippet\n result = suggestions\n }\n callback(null, result)\n }\n}\n","/*\n# Copyright 2023 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n data: {\n configKey: '',\n // Applications can set to avoid persisting default config\n // Useful when loading and setting existing config\n dontSaveDefaultConfig: false,\n },\n methods: {\n loadDefaultConfig: function () {\n if (localStorage[`${this.configKey}__default`]) {\n return JSON.parse(localStorage[`${this.configKey}__default`])\n } else {\n return {}\n }\n },\n saveDefaultConfig: function (config) {\n if (this.dontSaveDefaultConfig === true) {\n return\n }\n localStorage[`${this.configKey}__default`] = JSON.stringify(config)\n },\n openConfigBase: function (name, routed = false, callback = null) {\n new OpenC3Api()\n .load_config(this.configKey, name)\n .then((response) => {\n if (response) {\n this.$notify.normal({\n title: 'Loading configuration',\n body: name,\n })\n if (callback) callback(JSON.parse(response))\n if (!routed) {\n if (!this.$route.fullPath.includes(name)) {\n this.$router.push({\n query: {\n config: name,\n },\n })\n }\n }\n } else {\n this.$notify.caution({\n title: 'Unknown configuration',\n body: name,\n })\n }\n })\n .catch((error) => {\n if (error) {\n this.$notify.serious({\n title: `Error opening configuration: ${name}`,\n body: error,\n })\n }\n })\n },\n saveConfigBase: function (name, config) {\n new OpenC3Api()\n .save_config(this.configKey, name, JSON.stringify(config))\n .then(() => {\n this.$notify.normal({\n title: 'Saved configuration',\n body: name,\n })\n })\n .catch((error) => {\n if (error) {\n this.$notify.serious({\n title: `Error saving configuration: ${name}`,\n body: error,\n })\n }\n })\n },\n resetConfigBase: function () {\n localStorage.removeItem(`${this.configKey}__default`)\n\n const query = { ...this.$route.query }\n delete query.config\n this.$router.replace({ query })\n },\n },\n}\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Open Configuration</span>\n <v-spacer />\n </v-toolbar>\n\n <v-card-text>\n <div class=\"mt-4 pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n data-test=\"search\"\n />\n </v-row>\n <v-data-table\n v-model=\"selectedRows\"\n show-select\n select-strategy=\"single\"\n item-value=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n @click:row=\"($event, row) => selectRow(row)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n class=\"mt-1\"\n icon=\"mdi-delete\"\n variant=\"text\"\n data-test=\"item-delete\"\n @click=\"deleteConfig(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <span class=\"ma-2 text-red\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n @click=\"cancel\"\n data-test=\"open-config-cancel-btn\"\n >\n Cancel\n </v-btn>\n <v-btn\n variant=\"flat\"\n @click.prevent=\"success\"\n type=\"submit\"\n data-test=\"open-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n </v-card-actions>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n configKey: String,\n modelValue: Boolean, // modelValue is the default prop when using v-model\n },\n data() {\n return {\n configs: [],\n headers: [\n {\n title: 'Configuration',\n value: 'config',\n },\n {\n title: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedRows: [],\n }\n },\n computed: {\n selectedItem: function () {\n if (this.selectedRows.length) {\n return this.configs.find(\n (config) => config.configId === this.selectedRows[0],\n )\n }\n return null\n },\n error: function () {\n if (this.selectedItem === '' || this.selectedItem === null) {\n return 'Must select a config'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new OpenC3Api()\n .list_configs(this.configKey)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to OpenC3. ${error}`)\n })\n },\n methods: {\n selectRow: function (row) {\n this.selectedRows = [row.item.configId]\n },\n success: function () {\n if (!this.selectedItem) return\n this.$emit('success', this.selectedItem.config)\n this.show = false\n this.search = null\n this.selectedRows = []\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedRows = []\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.selectedItem?.config === item.config) {\n this.selectedRows = []\n }\n this.configs.splice(this.configs.indexOf(item), 1)\n new OpenC3Api().delete_config(this.configKey, item.config)\n })\n .catch((error) => {\n if (error !== true) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`,\n )\n }\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" @keydown.esc=\"cancel\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Save Configuration</span>\n <v-spacer />\n </v-toolbar>\n\n <v-card-text>\n <div class=\"mt-4 pa-3\">\n <v-row dense>\n <v-text-field\n label=\"search\"\n v-model=\"search\"\n type=\"text\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n single-line\n hide-details\n data-test=\"search\"\n />\n </v-row>\n <v-data-table\n v-model=\"selectedRows\"\n show-select\n select-strategy=\"single\"\n item-value=\"configId\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"configs\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n @click:row=\"($event, row) => selectRow(row)\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n class=\"mt-1\"\n icon=\"mdi-delete\"\n variant=\"text\"\n data-test=\"item-delete\"\n @click=\"deleteConfig(item)\"\n />\n </template>\n </v-data-table>\n <v-row dense>\n <v-text-field\n v-model=\"configName\"\n hide-details\n autofocus\n :disabled=\"!!selectedItem\"\n label=\"Configuration Name\"\n data-test=\"name-input-save-config-dialog\"\n />\n </v-row>\n <v-row dense>\n <span class=\"ma-2 text-red\" v-show=\"error\" v-text=\"error\" />\n </v-row>\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"outlined\" @click=\"cancel\"> Cancel </v-btn>\n <v-btn\n variant=\"flat\"\n @click.prevent=\"success\"\n type=\"submit\"\n data-test=\"save-config-submit-btn\"\n :disabled=\"!!error\"\n >\n Ok\n </v-btn>\n </v-card-actions>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n configKey: String,\n modelValue: Boolean, // modelValue is the default prop when using v-model\n },\n data() {\n return {\n configName: '',\n configs: [],\n headers: [\n {\n title: 'Configuration',\n value: 'config',\n },\n {\n title: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n search: null,\n selectedRows: [],\n }\n },\n computed: {\n selectedItem: function () {\n if (this.selectedRows.length) {\n return this.configs.find(\n (config) => config.configId === this.selectedRows[0],\n )\n }\n return null\n },\n error: function () {\n if (!this.configName) {\n return 'Config must have a name'\n }\n return null\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n mounted() {\n let configId = -1\n new OpenC3Api()\n .list_configs(this.configKey)\n .then((response) => {\n this.configs = response.map((config) => {\n configId += 1\n return { configId, config }\n })\n })\n .catch((error) => {\n this.$emit('warning', `Failed to connect to OpenC3. ${error}`)\n })\n },\n methods: {\n selectRow: function (row) {\n this.selectedRows = [row.item.configId]\n },\n success: function () {\n this.$emit('success', this.configName)\n this.show = false\n this.search = null\n this.selectedRows = []\n this.configName = ''\n },\n cancel: function () {\n this.show = false\n this.search = null\n this.selectedRows = []\n this.configName = ''\n },\n deleteConfig: function (item) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${item.config}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n if (this.selectedItem?.config === item.config) {\n this.selectedRows = []\n this.configName = ''\n }\n this.configs.splice(this.configs.indexOf(item), 1)\n new OpenC3Api().delete_config(this.configKey, item.config)\n })\n .catch((error) => {\n if (error !== true) {\n this.$emit(\n 'warning',\n `Failed to delete config ${item.config} Error: ${error}`,\n )\n }\n })\n },\n },\n watch: {\n selectedItem: function (val) {\n if (val) {\n this.configName = val.config\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <!-- Edit dialog -->\n <v-dialog persistent v-model=\"show\" width=\"75vw\">\n <v-card>\n <v-toolbar height=\"24\">\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"delete-screen-icon\" @click=\"deleteScreen\">\n mdi-delete\n </v-icon>\n </div>\n </template>\n <span> Delete Screen </span>\n </v-tooltip>\n </div>\n <v-spacer />\n <span> Edit Screen: {{ target }} {{ screen }} </span>\n <v-spacer />\n <div class=\"mx-2\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"download-screen-icon\"\n @click=\"downloadScreen\"\n >\n mdi-download\n </v-icon>\n </div>\n </template>\n <span> Download Screen </span>\n </v-tooltip>\n </div>\n </v-toolbar>\n <v-card-text style=\"max-height: 90vh\">\n <v-row class=\"mt-3\"> Upload a screen file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-btn\n @click=\"loadFile\"\n :disabled=\"!file\"\n color=\"primary\"\n class=\"mr-3\"\n data-test=\"edit-screen-load\"\n >\n Load\n </v-btn>\n <v-file-input\n v-model=\"file\"\n truncate-length=\"15\"\n accept=\".txt\"\n label=\"Click to select .txt screen file.\"\n />\n </v-row>\n <v-row class=\"mb-2\"> Edit the screen definition. </v-row>\n <v-row class=\"mb-2\">\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n </v-list>\n </v-menu>\n </v-row>\n <!-- Make the error messages a max height and scrollable -->\n <v-row style=\"max-height: 120px; overflow-y: auto\">\n <div v-for=\"(error, index) in editErrors\" :key=\"index\">\n <span class=\"text-red\" v-text=\"error\"></span>\n </div>\n </v-row>\n <v-row class=\"mt-5\">\n <span\n >Ctrl-space brings up autocomplete. Right click keywords for\n documentation.</span\n >\n <v-spacer />\n <v-btn\n @click=\"$emit('cancel')\"\n class=\"mx-2\"\n variant=\"outlined\"\n data-test=\"edit-screen-cancel\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click=\"$emit('save', editor.getValue())\"\n class=\"mx-2\"\n color=\"primary\"\n data-test=\"edit-screen-save\"\n >\n Save\n </v-btn>\n </v-row>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-text'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { ScreenCompleter } from './autocomplete'\n\nexport default {\n props: {\n modelValue: Boolean,\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n errors: {\n type: Array,\n default: () => [],\n },\n },\n data() {\n return {\n file: null,\n docsKeyword: '',\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n editErrors: function () {\n if (this.definition === '' && !this.file) {\n return ['Input can not be blank.']\n }\n if (this.errors.length !== 0) {\n let messages = new Set()\n let result = []\n const sortedErrors = this.errors.toSorted(\n (a, b) => a.lineNumber - b.lineNumber,\n )\n for (const error of sortedErrors) {\n let msg = `At ${error.lineNumber}: (${error.line}) ${error.message}.`\n if (error.usage) {\n msg += ` Usage: ${error.usage}`\n }\n result.push(msg)\n messages.add(error.message)\n }\n return result\n }\n return []\n },\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted: function () {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n const screenMode = this.buildScreenMode()\n this.editor.session.setMode(new screenMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setOption('enableBasicAutocompletion', true)\n this.editor.setOption('enableLiveAutocompletion', true)\n this.editor.completers = [new ScreenCompleter()]\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.definition)\n this.editor.clearSelection()\n this.editor.focus()\n },\n beforeUnmount() {\n this.editor.destroy()\n this.editor.container.remove()\n },\n methods: {\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n openDocumentation() {\n window.open(\n `${\n window.location.origin\n }/tools/staticdocs/docs/configuration/telemetry-screens#${this.docsKeyword.toLowerCase()}`,\n '_blank',\n )\n },\n buildScreenMode() {\n let oop = ace.require('ace/lib/oop')\n let TextHighlightRules = ace.require(\n 'ace/mode/text_highlight_rules',\n ).TextHighlightRules\n\n let list = this.keywords.join('|')\n let OpenC3HighlightRules = function () {\n this.$rules = {\n start: [\n {\n token: 'comment',\n regex: '#.*$',\n },\n {\n token: 'string',\n regex: '\".*?\"',\n },\n {\n token: 'string',\n regex: \"'.*?'\",\n },\n {\n token: 'constant.numeric',\n regex: '\\\\b\\\\d+(?:\\\\.\\\\d+)?\\\\b',\n },\n {\n token: 'keyword',\n regex: new RegExp(`^\\\\s*(${list})\\\\b`),\n },\n ],\n }\n this.normalizeRules()\n }\n oop.inherits(OpenC3HighlightRules, TextHighlightRules)\n let Mode = function () {\n this.HighlightRules = OpenC3HighlightRules\n }\n let TextMode = ace.require('ace/mode/text').Mode\n oop.inherits(Mode, TextMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n downloadScreen: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute('download', `${this.screen.toLowerCase()}.txt`)\n link.click()\n },\n loadFile: function () {\n const fileReader = new FileReader()\n fileReader.readAsText(this.file)\n const that = this\n fileReader.onload = function () {\n that.editor.setValue(fileReader.result)\n that.file = null\n }\n },\n deleteScreen: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete this screen?!`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('delete')\n })\n },\n },\n}\n</script>\n\n<style>\n.ace_autocomplete {\n width: 60vw !important;\n}\n</style>\n<style scoped>\n.editor {\n height: 45vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <form v-on:submit.prevent=\"addEnvironment\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span>Global Environment Variables</span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row dense class=\"mb-2\">\n <v-text-field\n v-model=\"search\"\n label=\"search\"\n type=\"text\"\n data-test=\"search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n clear-icon=\"mdi-close-circle-outline\"\n autofocus\n single-line\n hide-details\n />\n </v-row>\n <v-data-table\n item-key=\"name\"\n hide-default-header\n data-test=\"env-table\"\n :search=\"search\"\n :headers=\"headers\"\n :items=\"environment\"\n :items-per-page=\"5\"\n :items-per-page-options=\"[5]\"\n >\n <template v-slot:item.actions=\"{ item }\">\n <v-btn\n @click=\"deleteEnvironment(item)\"\n icon\n class=\"mt-1\"\n data-test=\"item-delete\"\n >\n <v-icon>mdi-delete</v-icon>\n </v-btn>\n </template>\n </v-data-table>\n <v-row dense>\n <v-col>\n <v-text-field v-model=\"key\" label=\"Key\" data-test=\"env-key\" />\n </v-col>\n <v-col>\n <v-text-field\n v-model=\"keyValue\"\n label=\"Value\"\n data-test=\"env-value\"\n />\n </v-col>\n </v-row>\n <v-row dense>\n <v-btn\n @click.prevent=\"addEnvironment\"\n block\n type=\"submit\"\n color=\"primary\"\n data-test=\"add-env\"\n :disabled=\"!key || !keyValue\"\n >\n Add\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n alert: '',\n alertType: 'success',\n showAlert: false,\n search: '',\n key: '',\n keyValue: '',\n environment: [],\n headers: [\n {\n text: 'Key',\n value: 'key',\n },\n {\n text: 'Value',\n value: 'value',\n },\n {\n text: 'Actions',\n value: 'actions',\n align: 'end',\n sortable: false,\n },\n ],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n mounted() {\n this.update()\n },\n methods: {\n alertHandler: function (event) {\n this.alert = event.text\n this.alertType = event.type\n this.showAlert = true\n },\n update: function () {\n Api.get('/openc3-api/environment')\n .then((response) => {\n this.environment = response.data\n })\n .catch((error) => {\n // TODO: $error.something\n })\n },\n addEnvironment: function () {\n Api.post('/openc3-api/environment', {\n data: {\n key: this.key.toUpperCase(),\n value: this.keyValue,\n },\n })\n .then((response) => {\n const alertEvent = {\n text: `New environment variable: ${response.data.name}`,\n type: 'success',\n }\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to add environment variable: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n this.key = ''\n this.keyValue = ''\n },\n deleteEnvironment: function (env) {\n this.$dialog\n .confirm(`Are you sure you want to delete: ${env.key}=${env.value}`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete(`/openc3-api/environment/${env.name}`)\n })\n .then((response) => {\n const alertEvent = {\n text: `Removed environment variable: ${env.name}`,\n type: 'success',\n }\n this.alertHandler(alertEvent)\n this.update()\n })\n .catch((error) => {\n const alertEvent = {\n text: `Failed to delete environment: ${error}`,\n type: 'error',\n }\n this.alertHandler(alertEvent)\n })\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\" scrollable @keydown.enter=\"success()\">\n <v-card>\n <v-overlay :model-value=\"loading\">\n <v-progress-circular\n indeterminate\n absolute\n size=\"64\"\n ></v-progress-circular>\n </v-overlay>\n <form v-on:submit.prevent=\"success\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> {{ title }} </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row>{{ helpText }} </v-row>\n <v-row dense class=\"mt-5\">\n <v-text-field\n v-model=\"search\"\n flat\n autofocus\n hide-details\n clearable\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n density=\"compact\"\n data-test=\"file-open-save-search\"\n />\n </v-row>\n <v-row dense class=\"mt-2\">\n <!-- return-object doesn't work until vuetify 3.7.3 -->\n <v-treeview\n v-model=\"tree\"\n @update:activated=\"activeFile\"\n density=\"compact\"\n activatable\n ref=\"tree\"\n style=\"width: 100%; max-height: 60vh; overflow: auto\"\n item-value=\"id\"\n :items=\"items\"\n :search=\"search\"\n :open-on-click=\"type === 'open'\"\n :open-all=\"!!search\"\n >\n <template v-slot:prepend=\"{ item, open }\">\n <v-icon v-if=\"!item.file\">\n {{ open ? 'mdi-folder-open' : 'mdi-folder' }}\n </v-icon>\n <v-icon v-else> {{ calcIcon(item.title) }} </v-icon>\n </template>\n <template v-slot:append=\"{ item }\">\n <!-- See ScriptRunner.vue const TEMP_FOLDER -->\n <v-btn\n v-if=\"item.title === '__TEMP__'\"\n icon\n @click=\"deleteTemp\"\n >\n <v-icon> mdi-delete </v-icon>\n </v-btn>\n </template>\n </v-treeview>\n </v-row>\n <v-row class=\"my-2\">\n <v-text-field\n v-model=\"selectedFile\"\n hide-details\n label=\"Filename\"\n data-test=\"file-open-save-filename\"\n :disabled=\"type === 'open'\"\n />\n </v-row>\n <v-row dense>\n <div\n class=\"my-2 text-red\"\n style=\"white-space: pre-line\"\n v-show=\"error\"\n >\n {{ error }}\n </div>\n </v-row>\n <v-row class=\"mt-2\">\n <v-spacer />\n <v-btn\n @click=\"show = false\"\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"file-open-save-cancel-btn\"\n :disabled=\"disableButtons\"\n >\n Cancel\n </v-btn>\n <v-btn\n @click.prevent=\"success\"\n ref=\"submitBtn\"\n type=\"submit\"\n color=\"primary\"\n class=\"mx-2\"\n data-test=\"file-open-save-submit-btn\"\n :disabled=\"disableButtons || !!error\"\n >\n {{ submit }}\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\nimport { fileIcon } from '@/util/fileIcon'\n\nexport default {\n props: {\n type: {\n type: String,\n required: true,\n validator: function (value) {\n // The value must match one of these strings\n return ['open', 'save'].indexOf(value) !== -1\n },\n },\n apiUrl: String, // Base API URL for use with scripts or cmd-tlm\n requireTargetParentDir: Boolean, // Require that the save filename be nested in a directory with the name of a target\n inputFilename: String, // passed if this is a 'save' dialog\n modelValue: Boolean,\n },\n data() {\n return {\n tree: [],\n items: [],\n id: 1,\n search: null,\n selectedFile: null,\n disableButtons: false,\n targets: [],\n loading: true,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n if (this.type === 'open') {\n return 'File Open'\n } else {\n return 'File Save As...'\n }\n },\n submit: function () {\n if (this.type === 'open') {\n return 'OPEN'\n } else {\n return 'SAVE'\n }\n },\n helpText: function () {\n if (this.type === 'open') {\n return 'Click on folders to open them and then click a file to select it before clicking Open. Use the search box to filter the results.'\n } else {\n return 'Click on the folder to save into. Then complete the filename path with the desired name. Use the search box to filter the results.'\n }\n },\n error: function () {\n if (this.selectedFile === '' || this.selectedFile === null) {\n return 'No file selected must select a file'\n }\n if (\n !this.selectedFile.match(this.validFilenameRegex) ||\n this.selectedFile.match(/\\.\\.|\\/\\/|\\.\\/|\\/\\./) // Block .'s and /'s next to each other (block path traversal)\n ) {\n let message = `${this.selectedFile} is not a valid filename. Must `\n if (this.requireTargetParentDir) {\n message += 'be in a target directory and '\n }\n message +=\n 'only contain alphanumeric characters (including !-_.*) and a valid extension.\\n\\n' +\n 'For example: TGT1/procedures/test.py or TGT2/lib/inst.rb'\n return message\n }\n if (this.type === 'save' && this.selectedFile.match(/\\*$/)) {\n let message = `${this.selectedFile} is not a valid filename. Must not end in '*'.`\n return message\n }\n return null\n },\n validFilenameRegex: function () {\n const alphanumeric = '0-9a-zA-Z'\n const charset = `${alphanumeric}\\\\/\\\\!\\\\-\\\\_\\\\.\\\\*\\\\'\\\\(\\\\)` // From https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html a-z A-Z 0-9 / ! - _ . * ' ( )\n let expression = `[${charset}]+\\\\.[${alphanumeric}]+`\n if (this.requireTargetParentDir) {\n const targets = `(${this.targets.join('|')})`\n expression = `\\\\/?${targets}\\\\/${expression}`\n }\n return new RegExp(expression)\n },\n },\n created() {\n this.loadFiles()\n if (this.requireTargetParentDir) {\n Api.get('/openc3-api/targets').then((response) => {\n this.targets = response.data\n this.targets.push('__TEMP__') // Also support __TEMP__\n })\n }\n },\n methods: {\n calcIcon: function (filename) {\n return fileIcon(filename)\n },\n loadFiles: function () {\n Api.get(this.apiUrl)\n .then((response) => {\n this.items = []\n this.id = 1\n for (let file of response.data) {\n // Make a copy of the entire file path before calling insertFile\n // because insertFile does recursion and needs the original path\n this.filepath = file\n this.insertFile(this.items, 1, file)\n this.id++\n }\n if (this.inputFilename) {\n this.selectedFile = this.inputFilename\n }\n this.loading = false\n })\n .catch((error) => {\n this.$emit('error', `Failed to connect to OpenC3. ${error}`)\n })\n },\n clear: function () {\n this.show = false\n this.overwrite = false\n this.disableButtons = false\n },\n activeFile: function (file) {\n if (file.length === 0) {\n this.selectedFile = null\n } else {\n // This works when return-object is enabled\n // this.selectedFile = file[0].path\n\n // Search through items to find the item with id\n this.selectedFile = this.findItem(this.items, file[0])\n // Select the Submit button so return opens the file\n setTimeout(() => {\n this.$refs.submitBtn.$el.focus()\n }, 100)\n }\n },\n findItem: function (items, id) {\n for (let item of items) {\n if (item.id === id) {\n return item.path\n }\n if (item.children) {\n const found = this.findItem(item.children, id)\n if (found) {\n return found\n }\n }\n }\n return null\n },\n exists: function (root, name) {\n let found = false\n for (let item of root) {\n if (item.path === name) {\n return true\n }\n if (item.path.length > 1) {\n if (item.path[item.path.length - 1] === '*') {\n // Try without the star too\n if (item.path.slice(0, item.path.length - 1) === name) {\n return true\n }\n }\n }\n if (item.children) {\n found = found || this.exists(item.children, name)\n }\n }\n return found\n },\n success: function () {\n // Only process the success call if a file is selected and no error\n if (this.selectedFile !== null && this.error === null) {\n if (this.type === 'open') {\n this.openSuccess()\n } else {\n this.saveSuccess()\n }\n }\n },\n deleteTemp: function () {\n this.$dialog\n .confirm(`Are you sure you want to delete all the temporary files?`, {\n okText: 'Delete',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n return Api.delete('/script-api/scripts/temp_files')\n })\n .then((response) => {\n this.$emit('clear-temp')\n this.loadFiles()\n })\n .catch((error) => {\n this.$notify.serious({\n title: 'Error',\n body: `Failed to remove script temporary files due to ${error}`,\n })\n })\n },\n openSuccess: function () {\n // Disable the buttons because the API call can take a bit\n this.disableButtons = true\n Api.get(`${this.apiUrl}/${this.selectedFile}`)\n .then((response) => {\n const file = {\n name: this.selectedFile,\n contents: response.data.contents,\n }\n if (response.data.suites) {\n file['suites'] = JSON.parse(response.data.suites)\n }\n if (response.data.error) {\n file['error'] = response.data.error\n }\n if (response.data.success) {\n file['success'] = response.data.success\n }\n const locked = response.data.locked\n const breakpoints = response.data.breakpoints\n this.$emit('file', { file, locked, breakpoints })\n this.clear()\n })\n .catch((error) => {\n this.$emit('error', `Failed to open ${this.selectedFile}. ${error}`)\n this.clear()\n })\n },\n saveSuccess: function () {\n const found = this.exists(this.items, this.selectedFile)\n if (found) {\n this.$dialog\n .confirm(`Are you sure you want to overwrite: ${this.selectedFile}`, {\n okText: 'Overwrite',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.$emit('filename', this.selectedFile)\n this.clear()\n })\n .catch((error) => {}) // Cancel, do nothing\n } else {\n this.$emit('filename', this.selectedFile)\n this.clear()\n }\n },\n insertFile: function (root, level, path) {\n let parts = path.split('/')\n // When there is only 1 part we're at the root so push the filename\n if (parts.length === 1) {\n root.push({\n id: this.id,\n title: parts[0],\n file: 'ruby',\n path: this.filepath,\n })\n this.id++\n return\n }\n // Look for the first part of the path\n const index = root.findIndex((item) => item.title === parts[0])\n if (index === -1) {\n // Name not found so push the item and add a children array\n root.push({\n id: this.id,\n title: parts[0],\n children: [],\n path: this.filepath.split('/').slice(0, level).join('/'),\n })\n this.id++\n this.insertFile(\n root[root.length - 1].children, // Start from the node we just added\n level + 1,\n parts.slice(1).join('/'), // Strip the first part of the path\n )\n } else {\n // We already have something at this level so recursively\n // call the insertPart using the node we found and adjust the path\n this.insertFile(\n root[index].children,\n level + 1,\n parts.slice(1).join('/'),\n )\n }\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card>\n <v-card-title class=\"d-flex align-center justify-content-space-between\">\n <div class=\"d-flex align-baseline\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-download\"\n variant=\"text\"\n size=\"small\"\n class=\"mr-2\"\n data-test=\"download-log\"\n @click=\"downloadLog\"\n />\n </div>\n </template>\n <span> Download Log </span>\n </v-tooltip>\n <span> Log Messages </span>\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n :icon=\"buttonIcon\"\n variant=\"text\"\n data-test=\"pause\"\n @click=\"pause\"\n />\n </div>\n </template>\n <span> {{ buttonLabel }} </span>\n </v-tooltip>\n </div>\n <v-spacer />\n <v-select\n label=\"Filter by log level\"\n hide-details\n variant=\"outlined\"\n density=\"compact\"\n :items=\"logLevels\"\n v-model=\"logLevel\"\n class=\"mr-2\"\n style=\"max-width: 150px\"\n data-test=\"log-messages-level\"\n />\n <v-spacer />\n <v-text-field\n v-model=\"search\"\n label=\"Search\"\n prepend-inner-icon=\"mdi-magnify\"\n clearable\n variant=\"outlined\"\n density=\"compact\"\n single-line\n hide-details\n style=\"max-width: 300px\"\n class=\"search\"\n data-test=\"search-log-messages\"\n />\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-btn\n icon=\"mdi-delete\"\n variant=\"text\"\n class=\"ml-2\"\n data-test=\"clear-log\"\n @click=\"clearLog\"\n />\n </div>\n </template>\n <span> Clear Log </span>\n </v-tooltip>\n </v-card-title>\n <v-data-table\n :headers=\"headers\"\n :items=\"shownData\"\n :search=\"search\"\n :items-per-page=\"-1\"\n hide-default-footer\n multi-sort\n density=\"compact\"\n sticky\n hover\n data-test=\"log-messages\"\n >\n <template v-slot:item.timestamp=\"{ item }\">\n <time :title=\"item.timestamp\" :datetime=\"item.timestamp\">\n {{ item.timestamp }}\n </time>\n </template>\n <template v-slot:item.level=\"{ item }\">\n <span :style=\"'display: inline-flex; color:' + getColor(item.level)\">\n <rux-status class=\"mr-1\" :status=\"getStatus(item.level)\"></rux-status>\n {{ item.level }}</span\n >\n </template>\n <template v-slot:item.message=\"{ item }\">\n <div style=\"white-space: pre-wrap\">{{ item.message }}</div>\n </template>\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { format } from 'date-fns'\nimport { Cable } from '@openc3/js-common/services'\nimport { AstroStatusColors, UnknownToAstroStatus } from '@/icons'\nimport { TimeFilters } from '@/util'\n\nexport default {\n props: {\n historyCount: {\n type: Number,\n default: 200,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n mixins: [TimeFilters],\n data() {\n return {\n AstroStatusColors,\n data: [],\n shownData: [],\n logLevels: ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'],\n logLevel: 'INFO',\n search: '',\n headers: [\n { title: 'Time', value: 'timestamp', nowrap: true },\n { title: 'Level', value: 'level' },\n { title: 'Source', value: 'microservice_name' },\n { title: 'Message', value: 'message' },\n ],\n cable: new Cable(),\n subscription: null,\n paused: false,\n }\n },\n computed: {\n buttonLabel: function () {\n if (this.paused) {\n return 'Resume'\n } else {\n return 'Pause'\n }\n },\n buttonIcon: function () {\n if (this.paused) {\n return 'mdi-play'\n } else {\n return 'mdi-pause'\n }\n },\n },\n watch: {\n logLevel: function (newVal, oldVal) {\n this.createSubscription()\n },\n },\n created() {\n this.createSubscription()\n },\n unmounted() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.cable.disconnect()\n },\n methods: {\n pause: function () {\n this.paused = !this.paused\n },\n createSubscription() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n this.data = []\n this.shownData = this.data\n }\n this.cable\n .createSubscription(\n 'MessagesChannel',\n window.openc3Scope,\n {\n received: (messages) => {\n this.cable.recordPing()\n if (messages.length > this.historyCount) {\n messages.splice(0, messages.length - this.historyCount)\n }\n // Filter messages before they're added to the table\n // This prevents a bunch of invisible 'INFO' messages from pushing\n // off the 'WARN' or 'ERROR' messages if we filter inside the data-table\n messages = messages.filter((message) => {\n switch (this.logLevel) {\n case 'DEBUG':\n return true\n case 'INFO':\n if (message.level !== 'DEBUG') {\n return true\n }\n break\n case 'WARN':\n if (message.level !== 'DEBUG' && message.level !== 'INFO') {\n return true\n }\n break\n case 'ERROR':\n if (\n message.level !== 'DEBUG' &&\n message.level !== 'INFO' &&\n message.level !== 'WARN'\n ) {\n return true\n }\n break\n case 'FATAL':\n if (\n message.level !== 'DEBUG' &&\n message.level !== 'INFO' &&\n message.level !== 'WARN' &&\n message.level !== 'ERROR'\n ) {\n return true\n }\n break\n }\n return false\n })\n messages.map((message) => {\n message.timestamp = this.formatTimestamp(\n message['@timestamp'],\n this.timeZone,\n )\n if (\n message.message.raw &&\n message.message.json_class === 'String'\n ) {\n // This is binary data, display in hex.\n let result = '0x'\n for (let i = 0; i < message.message.raw.length; i++) {\n let nibble = message.message.raw[i]\n .toString(16)\n .toUpperCase()\n if (nibble.length < 2) {\n nibble = '0' + nibble\n }\n result += nibble\n }\n message.message = result\n } else {\n message.message = message.message.replaceAll('\\\\n', '\\n')\n }\n })\n this.data = messages.reverse().concat(this.data)\n if (this.data.length > this.historyCount) {\n this.data.length = this.historyCount\n }\n if (!this.paused) {\n this.shownData = this.data\n }\n },\n },\n {\n // Channel parameter is history_count with underscore\n history_count: this.historyCount,\n types: ['log', 'notification', 'alert'],\n },\n )\n .then((subscription) => {\n this.subscription = subscription\n })\n },\n getColor(level) {\n return AstroStatusColors[UnknownToAstroStatus[level]]\n },\n getStatus(level) {\n return UnknownToAstroStatus[level]\n },\n downloadLog() {\n const output = this.shownData\n .map(\n (entry) =>\n // Other fields are available like container_name, msg_id ... probably not useful\n `${entry.timestamp} | ${entry.level} | ${entry.microservice_name} | ${entry.message}`,\n )\n .join('\\n')\n const blob = new Blob([output], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n format(Date.now(), 'yyyy_MM_dd_HH_mm_ss') + '_message_log.txt',\n )\n link.click()\n },\n clearLog: function () {\n this.$dialog\n .confirm('Are you sure you want to clear the log?', {\n okText: 'Clear',\n cancelText: 'Cancel',\n })\n .then((dialog) => {\n this.data = []\n this.shownData = []\n })\n .catch(function (err) {\n // Canceling the dialog forces catch and sets err to true\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.v-card {\n /* take up any remaining vertical space\n (e.g. whatever is left after the tabs in cmdtlmserver)\n */\n flex-grow: 1;\n\n /* flex so the table can grow without making the card itself scroll */\n display: flex;\n flex-direction: column;\n}\n.v-data-table {\n height: 25vh; /* give it at least a bit of height to start with */\n flex-grow: 1; /* and then grow to fill all the space it can */\n}\n</style>\n","<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card v-if=\"show\">\n <v-card-title> 404 Not Found </v-card-title>\n <v-card-text class=\"d-flex align-center mt-3\">\n The requested URL\n <code class=\"mx-1\"> {{ $route.fullPath }} </code>\n was not routable.\n <span class=\"text-h3 mx-1\"> 🦄 </span>\n </v-card-text>\n </v-card>\n</template>\n\n<script>\nimport { getMountedApps } from 'single-spa'\n\nconst SINGLE_SPA_APP_CHANGE_EVENT = 'single-spa:app-change'\n\n// This component is actually always loaded for every route other than /login\n// because of the catch-all path in tool-base's router, so we need logic to\n// hide it when a tool is loaded.\nexport default {\n data() {\n return {\n show: false,\n }\n },\n created() {\n window.addEventListener(SINGLE_SPA_APP_CHANGE_EVENT, this.handleAppChange)\n },\n mounted() {\n // Give single-spa some time to get an app mounted to avoid flashing this\n setTimeout(() => {\n this.show = getMountedApps().length === 0\n }, 150)\n },\n unmounted() {\n window.removeEventListener(\n SINGLE_SPA_APP_CHANGE_EVENT,\n this.handleAppChange,\n )\n },\n methods: {\n handleAppChange: function (event) {\n this.show = !event.detail.appsByNewStatus.MOUNTED\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n#\n# This screen expects to be inside of two parent elements.\n# An overall item, and then a container for all screens\n-->\n\n<template>\n <div :style=\"computedStyle\" ref=\"bar\">\n <v-card :min-height=\"height\" :min-width=\"width\" style=\"cursor: default\">\n <v-toolbar height=\"24\">\n <div v-show=\"errors.length !== 0\">\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"error-graph-icon\"\n @click=\"errorDialog = true\"\n >\n mdi-alert\n </v-icon>\n </div>\n </template>\n <span> Errors </span>\n </v-tooltip>\n </div>\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"edit-screen-icon\" @click=\"openEdit\">\n mdi-pencil\n </v-icon>\n </div>\n </template>\n <span> Edit Screen </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"!fixFloated\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"float-screen-icon\" @click=\"floatScreen\">\n {{ floated ? 'mdi-balloon' : 'mdi-view-grid-outline' }}\n </v-icon>\n </div>\n </template>\n <span> {{ floated ? 'Unfloat Screen' : 'Float Screen' }} </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"floated\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"up-screen-icon\" @click=\"upScreen\">\n mdi-arrow-up\n </v-icon>\n </div>\n </template>\n <span> Move Screen Up </span>\n </v-tooltip>\n <v-tooltip location=\"top\" v-if=\"floated && zIndex > minZ\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon data-test=\"down-screen-icon\" @click=\"downScreen\">\n mdi-arrow-down\n </v-icon>\n </div>\n </template>\n <span> Move Screen Down </span>\n </v-tooltip>\n <v-spacer />\n <span> {{ target }} {{ screen }} </span>\n <v-spacer />\n <v-tooltip location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"minimize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"expand\"\n >\n mdi-window-minimize\n </v-icon>\n <v-icon\n data-test=\"maximize-screen-icon\"\n @click=\"minMaxTransition\"\n v-show=\"!expand\"\n >\n mdi-window-maximize\n </v-icon>\n </div>\n </template>\n <span v-show=\"expand\"> Minimize Screen </span>\n <span v-show=\"!expand\"> Maximize Screen </span>\n </v-tooltip>\n <v-tooltip v-if=\"showClose\" location=\"top\">\n <template v-slot:activator=\"{ props }\">\n <div v-bind=\"props\">\n <v-icon\n data-test=\"close-screen-icon\"\n @click=\"$emit('close-screen')\"\n >\n mdi-close-box\n </v-icon>\n </div>\n </template>\n <span> Close Screen </span>\n </v-tooltip>\n </v-toolbar>\n <v-expand-transition v-if=\"!editDialog\">\n <div\n class=\"pa-1\"\n style=\"position: relative\"\n ref=\"screen\"\n v-show=\"expand\"\n >\n <v-overlay\n style=\"pointer-events: none\"\n :model-value=\"errors.length !== 0\"\n opacity=\"0.8\"\n absolute\n attach\n />\n <vertical-widget\n :key=\"screenKey\"\n :widgets=\"layoutStack[0].widgets\"\n :screen-values=\"screenValues\"\n :screen-time-zone=\"timeZone\"\n v-on:add-item=\"addItem\"\n v-on:delete-item=\"deleteItem\"\n v-on:open=\"open\"\n v-on:close=\"close\"\n v-on:close-all=\"closeAll\"\n />\n </div>\n </v-expand-transition>\n </v-card>\n <edit-screen-dialog\n v-if=\"editDialog\"\n v-model=\"editDialog\"\n :target=\"target\"\n :screen=\"screen\"\n :definition=\"currentDefinition\"\n :keywords=\"keywords\"\n :errors=\"errors\"\n @save=\"saveEdit($event)\"\n @cancel=\"cancelEdit()\"\n @delete=\"deleteScreen()\"\n />\n\n <!-- Error dialog -->\n <v-dialog v-model=\"errorDialog\" width=\"60vw\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Screen: {{ target }} {{ screen }} Errors </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-textarea class=\"errors\" readonly rows=\"13\" :model-value=\"error\" />\n </v-card>\n </v-dialog>\n </div>\n</template>\n\n<script>\nimport { uniqueId } from 'lodash'\nimport { Api, ConfigParserService, OpenC3Api } from '@openc3/js-common/services'\nimport WidgetComponents from '@/widgets/WidgetComponents'\nimport EditScreenDialog from './EditScreenDialog.vue'\n\nconst MAX_ERRORS = 20\n\nexport default {\n mixins: [WidgetComponents],\n components: {\n EditScreenDialog,\n },\n props: {\n target: {\n type: String,\n default: '',\n },\n screen: {\n type: String,\n default: '',\n },\n definition: {\n type: String,\n default: '',\n },\n keywords: {\n type: Array,\n default: () => [],\n },\n initialFloated: {\n type: Boolean,\n default: false,\n },\n initialTop: {\n type: Number,\n default: 0,\n },\n initialLeft: {\n type: Number,\n default: 0,\n },\n initialZ: {\n type: Number,\n default: 0,\n },\n minZ: {\n type: Number,\n default: 0,\n },\n fixFloated: {\n type: Boolean,\n default: false,\n },\n count: {\n type: Number,\n default: 0,\n },\n showClose: {\n type: Boolean,\n default: true,\n },\n timeZone: {\n type: String,\n default: 'local',\n },\n },\n data() {\n return {\n api: null,\n backup: '',\n currentDefinition: this.definition,\n editDialog: false,\n expand: true,\n configParser: null,\n configError: false,\n currentLayout: null,\n layoutStack: [],\n namedWidgets: {},\n dynamicWidgets: [],\n width: null,\n height: null,\n staleTime: 30,\n cacheTimeout: 0.1,\n globalSettings: [],\n substitute: false,\n original_target_name: null,\n force_substitute: false,\n pollingPeriod: 1,\n errors: [],\n errorDialog: false,\n screenKey: null,\n dragX: 0,\n dragY: 0,\n floated: this.initialFloated,\n top: this.initialTop,\n left: this.initialLeft,\n zIndex: this.initialZ,\n changeCounter: 0,\n screenItems: [],\n screenValues: {},\n updateCounter: 0,\n screenId: uniqueId('openc3-screen_'),\n }\n },\n watch: {\n count: {\n handler(newValue, oldValue) {\n this.currentDefinition = this.definition\n this.rerender()\n },\n },\n },\n computed: {\n error: function () {\n if (this.errorDialog && this.errors.length > 0) {\n let messages = new Set()\n let result = ''\n for (const error of this.errors) {\n if (messages.has(error.message)) {\n continue\n }\n let msg = `${error.time}: (${error.type}) ${error.message}\\n`\n result += msg\n messages.add(error.message)\n }\n return result\n }\n return null\n },\n computedStyle() {\n let style = {}\n // note down what the width was in case it was set to AUTO, because absolute positioning will lose that\n const origWidth = this.width || this.$refs.bar?.clientWidth\n if (this.floated) {\n style['position'] = 'absolute'\n style['top'] = this.top + 'px'\n style['left'] = this.left + 'px'\n style['width'] = origWidth + 'px'\n }\n return style\n },\n },\n // Called when an error from any descendent component is captured\n // We need this because an error can occur from any of the children\n // in the widget stack and are typically thrown on create()\n errorCaptured(err, vm, info) {\n // eslint-disable-next-line no-console\n console.log({ err, vm, info })\n if (this.errors.length < MAX_ERRORS) {\n // eslint-disable-next-line no-console\n console.log({ errors: this.errors })\n if (err.usage) {\n this.errors.push({\n type: 'usage',\n message: err.message,\n usage: err.usage,\n line: err.line,\n lineNumber: err.lineNumber,\n time: new Date().getTime(),\n })\n } else {\n this.errors.push({\n type: 'error',\n message: err,\n time: new Date().getTime(),\n })\n }\n this.configError = true\n }\n return false\n },\n created() {\n this.api = new OpenC3Api()\n this.configParser = new ConfigParserService()\n this.parseDefinition()\n this.screenKey = Math.floor(Math.random() * 1000000)\n },\n mounted() {\n this.updateRefreshInterval()\n if (this.floated) {\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n }\n },\n unmounted() {\n if (this.updater != null) {\n clearInterval(this.updater)\n this.updater = null\n }\n },\n methods: {\n // These are API methods that ButtonWidget uses to open and close screens\n open(target, screen) {\n this.$parent.showScreen(target, screen)\n },\n close(target, screen) {\n this.$parent.closeScreenByName(target, screen)\n },\n closeAll() {\n this.$parent.closeAll()\n },\n clearErrors: function () {\n this.errors = []\n this.configError = false\n },\n updateRefreshInterval: function () {\n let refreshInterval = this.pollingPeriod * 1000\n if (this.updater) {\n clearInterval(this.updater)\n }\n this.updater = setInterval(() => {\n this.update()\n }, refreshInterval)\n },\n parseDefinition: function () {\n // Each time we start over and parse the screen definition\n this.clearErrors()\n this.namedWidgets = {}\n this.layoutStack = []\n this.dynamicWidgets = []\n // Every screen starts with a VerticalWidget\n this.layoutStack.push({\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n })\n this.currentLayout = this.layoutStack[this.layoutStack.length - 1]\n\n this.configParser.parse_string(\n this.currentDefinition,\n '',\n false,\n true,\n (keyword, parameters, line, lineNumber) => {\n if (keyword) {\n switch (keyword) {\n case 'SCREEN':\n this.configParser.verify_num_parameters(\n 3,\n 4,\n `${keyword} <Width or AUTO> <Height or AUTO> <Polling Period>`,\n )\n this.width = parseInt(parameters[0])\n this.height = parseInt(parameters[1])\n this.pollingPeriod = parseFloat(parameters[2])\n break\n case 'END':\n this.configParser.verify_num_parameters(0, 0, `${keyword}`)\n this.layoutStack.pop()\n this.currentLayout =\n this.layoutStack[this.layoutStack.length - 1]\n break\n case 'STALE_TIME':\n this.configParser.verify_num_parameters(\n 1,\n 1,\n `${keyword} <Time (s)>`,\n )\n this.staleTime = parseInt(parameters[0])\n break\n case 'SETTING':\n case 'SUBSETTING':\n const widget =\n this.currentLayout.widgets[\n this.currentLayout.widgets.length - 1\n ] ?? this.currentLayout\n widget.settings.push(parameters)\n break\n case 'GLOBAL_SETTING':\n case 'GLOBAL_SUBSETTING':\n this.globalSettings.push(parameters)\n break\n default:\n this.processWidget(keyword, parameters, line, lineNumber)\n break\n } // switch keyword\n } // if keyword\n },\n )\n // This can happen if there is a typo in a layout widget with a corresponding END\n if (typeof this.layoutStack[0] === 'undefined') {\n let names = []\n let lines = []\n for (const widget of this.dynamicWidgets) {\n names.push(widget.name)\n lines.push(widget.lineNumber)\n }\n // Warn about any of the Dynamic widgets we found .. they could be typos\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'usage',\n message: `Unknown widget! Are these widgets: ${names.join(',')}?`,\n lineNumber: lines.join(','),\n time: new Date().getTime(),\n })\n this.configError = true\n }\n // Create a simple VerticalWidget to replace the bad widget so\n // the layout stack can successfully unwind\n this.layoutStack[0] = {\n type: 'VerticalWidget',\n parameters: [],\n widgets: [],\n }\n } else {\n this.applyGlobalSettings(this.layoutStack[0].widgets)\n }\n },\n openEdit: function () {\n // Make a copy in case they edit and cancel\n this.backup = this.currentDefinition.repeat(1)\n this.editDialog = true\n },\n upScreen: function () {\n this.zIndex += 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n downScreen: function () {\n if (this.zIndex > this.minZ) {\n this.zIndex -= 1\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n floatScreen: function () {\n if (this.floated) {\n this.$refs.bar.onmousedown = null\n this.$refs.bar.parentElement.parentElement.style = 'z-index: 0'\n this.floated = false\n this.$emit('unfloat-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n } else {\n let bodyRect =\n this.$refs.bar.parentElement.parentElement.parentElement.getBoundingClientRect()\n let elemRect = this.$refs.bar.getBoundingClientRect()\n this.top = elemRect.top - bodyRect.top - 5\n this.left = elemRect.left - bodyRect.left - 5\n this.$refs.bar.onmousedown = this.dragMouseDown\n this.$refs.bar.parentElement.parentElement.style =\n 'z-index: ' + this.zIndex\n this.floated = true\n this.$emit('float-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n }\n },\n dragMouseDown: function (e) {\n e = e || window.event\n e.preventDefault()\n // get the mouse cursor position at startup:\n this.dragX = e.clientX\n this.dragY = e.clientY\n document.onmouseup = this.closeDragElement\n // call a function whenever the cursor moves:\n document.onmousemove = this.elementDrag\n },\n elementDrag: function (e) {\n e = e || window.event\n e.preventDefault()\n // calculate the new cursor position:\n let xOffset = this.dragX - e.clientX\n let yOffset = this.dragY - e.clientY\n this.dragX = e.clientX\n this.dragY = e.clientY\n // set the element's new position:\n this.top = this.$refs.bar.offsetTop - yOffset\n this.left = this.$refs.bar.offsetLeft - xOffset\n this.$emit('drag-screen', [\n this.floated,\n this.top,\n this.left,\n this.zIndex,\n ])\n },\n closeDragElement: function () {\n // stop moving when mouse button is released:\n document.onmouseup = null\n document.onmousemove = null\n },\n rerender: function () {\n this.parseDefinition()\n this.updateRefreshInterval()\n // Force re-render\n this.screenKey = Math.floor(Math.random() * 1000000)\n // After re-render clear any errors\n this.$nextTick(function () {\n this.clearErrors()\n this.$emit('edit-screen')\n })\n },\n cancelEdit: function () {\n this.file = null\n this.editDialog = false\n // Restore the backup since we cancelled\n this.currentDefinition = this.backup\n this.rerender()\n },\n saveEdit: function (definition) {\n this.editDialog = false\n this.currentDefinition = definition\n this.rerender()\n this.$nextTick(function () {\n Api.post(\n '/openc3-api/screen/',\n {\n data: {\n scope: window.openc3Scope,\n target: this.target,\n screen: this.screen,\n text: this.currentDefinition,\n },\n },\n 0,\n )\n })\n },\n deleteScreen: function () {\n this.editDialog = false\n Api.delete(`/openc3-api/screen/${this.target}/${this.screen}`).then(\n (response) => {\n this.$emit('delete-screen')\n },\n )\n },\n minMaxTransition: function () {\n this.expand = !this.expand\n this.$emit('min-max-screen')\n },\n processWidget: function (keyword, parameters, line, lineNumber) {\n let widgetName = null\n if (keyword === 'NAMED_WIDGET') {\n this.configParser.verify_num_parameters(\n 2,\n null,\n `${keyword} <Widget Name> <Widget Type> <Widget Settings... (optional)>`,\n )\n widgetName = parameters[0].toUpperCase()\n keyword = parameters[1].toUpperCase()\n parameters = parameters.slice(2, parameters.length)\n }\n const componentName =\n keyword.charAt(0).toUpperCase() +\n keyword.slice(1).toLowerCase() +\n 'Widget'\n let settings = []\n // Give all the widgets a reference to this screen\n // Use settings so we don't break existing custom widgets\n settings.push(['__SCREEN_ID__', this.screenId])\n if (widgetName !== null) {\n // Push a reference to the screen so the layout can register when it is created\n // We do this because the widget isn't actually created until\n // the layout happens with <component :is='type'>\n settings.push(['NAMED_WIDGET', widgetName])\n }\n // If this is a layout widget we add it to the layoutStack and reset the currentLayout\n if (\n keyword === 'VERTICAL' ||\n keyword === 'VERTICALBOX' ||\n keyword === 'HORIZONTAL' ||\n keyword === 'HORIZONTALBOX' ||\n keyword === 'MATRIXBYCOLUMNS' ||\n keyword === 'TABBOOK' ||\n keyword === 'TABITEM' ||\n keyword === 'CANVAS' ||\n keyword === 'RADIOGROUP' ||\n keyword === 'SCROLLWINDOW'\n ) {\n const layout = {\n type: componentName,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n widgets: [],\n }\n this.layoutStack.push(layout)\n this.currentLayout.widgets.push(layout)\n this.currentLayout = layout\n } else if (this.$options.components[componentName]) {\n this.currentLayout.widgets.push({\n type: componentName,\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n line: line,\n lineNumber: lineNumber,\n })\n } else {\n let widget = {\n type: 'DynamicWidget',\n target: this.target,\n parameters: parameters,\n settings: settings,\n screenValues: this.screenValues,\n screenTimeZone: this.timeZone,\n name: componentName,\n line: line,\n lineNumber: lineNumber,\n }\n this.currentLayout.widgets.push(widget)\n this.dynamicWidgets.push(widget)\n }\n },\n applyGlobalSettings: function (widgets) {\n widgets.forEach((widget) => {\n this.globalSettings.forEach((setting) => {\n // widget.type is already the full camelcase widget name like LabelWidget\n // so we have to lower case both and tack on 'widget' to compare\n if (\n widget.type.toLowerCase() ===\n setting[0].toLowerCase() + 'widget'\n ) {\n widget.settings.push(setting.slice(1))\n }\n })\n // Recursively apply to all widgets contained in layouts\n if (widget.widgets) {\n this.applyGlobalSettings(widget.widgets)\n }\n })\n },\n update: function () {\n if (this.screenItems.length !== 0 && this.configError === false) {\n this.api\n .get_tlm_values(this.screenItems, this.staleTime, this.cacheTimeout)\n .then((data) => {\n this.clearErrors()\n this.updateValues(data)\n })\n .catch((error) => {\n let message = JSON.stringify(error, null, 2)\n // Anything other than 'no response received' which means the API server is down\n // is an error the user needs to fix so don't request values until they do\n if (!message.includes('no response received')) {\n this.configError = true\n }\n if (\n !this.errors.find((existing) => {\n return existing.message === message\n })\n ) {\n if (this.errors.length < MAX_ERRORS) {\n this.errors.push({\n type: 'error',\n message: message,\n time: new Date().getTime(),\n })\n }\n }\n })\n }\n },\n updateValues: function (values) {\n this.updateCounter += 1\n for (let i = 0; i < values.length; i++) {\n values[i].push(this.updateCounter)\n this.screenValues[this.screenItems[i]] = values[i]\n }\n },\n addItem: function (valueId) {\n this.screenItems.push(valueId)\n this.screenValues[valueId] = [null, null, 0]\n },\n deleteItem: function (valueId) {\n let index = this.screenItems.indexOf(valueId)\n this.screenItems.splice(index, 1)\n },\n },\n}\n</script>\n\n<style scoped>\n.errors {\n padding-top: 0px;\n margin-top: 0px;\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n -webkit-mask-image: unset;\n mask-image: unset;\n}\n</style>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div class=\"pt-4 pb-4\">\n <v-row :no-gutters=\"!vertical\">\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-target\">\n <v-autocomplete\n label=\"Select Target\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n @update:model-value=\"targetNameChanged\"\n :items=\"targetNames\"\n item-title=\"label\"\n item-value=\"value\"\n v-model=\"selectedTargetName\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"select-packet\">\n <v-autocomplete\n label=\"Select Packet\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n @update:model-value=\"packetNameChanged\"\n :disabled=\"packetsDisabled || autocompleteDisabled\"\n :items=\"packetNames\"\n item-title=\"label\"\n item-value=\"value\"\n v-model=\"selectedPacketName\"\n />\n </v-col>\n <v-col\n v-if=\"chooseItem\"\n :cols=\"colSize\"\n class=\"tpic-select pr-4\"\n data-test=\"select-item\"\n >\n <v-autocomplete\n label=\"Select Item\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n @update:model-value=\"itemNameChanged($event)\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"itemNames\"\n item-title=\"label\"\n item-value=\"value\"\n v-model=\"selectedItemName\"\n />\n </v-col>\n <!-- min-width: 105px is enough to display a 2 digit index -->\n <v-col\n v-if=\"chooseItem && itemIsArray()\"\n cols=\"1\"\n class=\"tpic-select pr-4\"\n data-test=\"array-index\"\n style=\"min-width: 105px\"\n >\n <v-combobox\n label=\"Index\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n @update:model-value=\"indexChanged($event)\"\n :disabled=\"itemsDisabled || autocompleteDisabled\"\n :items=\"arrayIndexes()\"\n item-title=\"label\"\n item-value=\"value\"\n v-model=\"selectedArrayIndex\"\n />\n </v-col>\n <v-col v-if=\"buttonText\" :cols=\"colSize\" style=\"max-width: 140px\">\n <v-btn\n :disabled=\"buttonDisabled\"\n color=\"primary\"\n data-test=\"select-send\"\n @click=\"buttonPressed\"\n >\n {{ actualButtonText }}\n </v-btn>\n </v-col>\n </v-row>\n <v-row no-gutters v-if=\"selectTypes\" class=\"pt-6\">\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"data-type\">\n <v-autocomplete\n label=\"Value Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"valueTypes\"\n v-model=\"selectedValueType\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced\">\n <v-autocomplete\n label=\"Reduced\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :items=\"reductionModes\"\n v-model=\"selectedReduced\"\n />\n </v-col>\n <v-col :cols=\"colSize\" class=\"tpic-select pr-4\" data-test=\"reduced-type\">\n <v-autocomplete\n label=\"Reduced Type\"\n hide-details\n density=\"compact\"\n variant=\"outlined\"\n :disabled=\"selectedReduced === 'DECOM'\"\n :items=\"reducedTypes\"\n v-model=\"selectedReducedType\"\n />\n </v-col>\n <v-col :cols=\"colSize\" style=\"max-width: 140px\"> </v-col>\n </v-row>\n <v-row no-gutters class=\"pa-3\">\n <v-col :cols=\"colSize\" :class=\"{ 'openc3-yellow': hazardous }\">\n Description: {{ description }}\n <template v-if=\"hazardous\"> (HAZARDOUS) </template>\n </v-col>\n </v-row>\n </div>\n</template>\n\n<script>\nimport { OpenC3Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n allowAll: {\n type: Boolean,\n default: false,\n },\n allowAllTargets: {\n type: Boolean,\n default: false,\n },\n buttonText: {\n type: String,\n default: null,\n },\n chooseItem: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n initialTargetName: {\n type: String,\n default: '',\n },\n initialPacketName: {\n type: String,\n default: '',\n },\n initialItemName: {\n type: String,\n default: '',\n },\n selectTypes: {\n type: Boolean,\n default: false,\n },\n mode: {\n type: String,\n default: 'tlm',\n // TODO: add validators throughout\n validator: (propValue) => {\n return ['cmd', 'tlm'].includes(propValue)\n },\n },\n unknown: {\n type: Boolean,\n default: false,\n },\n vertical: {\n type: Boolean,\n default: false,\n },\n hidden: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n targetNames: [],\n selectedTargetName: this.initialTargetName?.toUpperCase(),\n packetNames: [],\n selectedPacketName: this.initialPacketName?.toUpperCase(),\n itemNames: [],\n selectedItemName: this.initialItemName?.toUpperCase(),\n valueTypes: ['CONVERTED', 'RAW'],\n selectedValueType: 'CONVERTED',\n reductionModes: [\n // Map NONE to DECOM for clarity\n { title: 'NONE', value: 'DECOM' },\n { title: 'REDUCED_MINUTE', value: 'REDUCED_MINUTE' },\n { title: 'REDUCED_HOUR', value: 'REDUCED_HOUR' },\n { title: 'REDUCED_DAY', value: 'REDUCED_DAY' },\n ],\n selectedArrayIndex: null,\n selectedReduced: 'DECOM',\n reducedTypes: ['MIN', 'MAX', 'AVG', 'STDDEV'],\n selectedReducedType: 'AVG',\n description: '',\n hazardous: false,\n internalDisabled: false,\n packetsDisabled: false,\n itemsDisabled: false,\n api: null,\n ALL: {\n label: '[ ALL ]',\n value: 'ALL',\n description: 'ALL',\n }, // Constant to indicate all packets or items\n UNKNOWN: {\n label: '[ UNKNOWN ]',\n value: 'UNKNOWN',\n description: 'UNKNOWN',\n },\n }\n },\n created() {\n this.internalDisabled = true\n this.api = new OpenC3Api()\n this.api.get_target_names().then((result) => {\n this.targetNames = result.flatMap((target) => {\n // Ignore the UNKNOWN target as it doesn't make sense to select this\n if (target == 'UNKNOWN') {\n return []\n }\n return { label: target, value: target }\n })\n // TODO: This is a nice enhancement but results in logs of API calls for many targets\n // See if we can reduce this to a single API call\n // Filter out any targets without packets\n // for (let i = this.targetNames.length - 1; i >= 0; i--) {\n // const cmd =\n // this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n // await this.api[cmd](this.targetNames[i].value).then((names) => {\n // if (names.length === 0) {\n // this.targetNames.splice(i, 1)\n // }\n // })\n // }\n if (this.allowAllTargets) {\n this.targetNames.unshift(this.ALL)\n }\n // If the initial target name is not set, default to the first target\n // which also updates packets and items as needed\n if (!this.selectedTargetName) {\n this.selectedTargetName = this.targetNames[0].value\n this.targetNameChanged(this.selectedTargetName)\n } else {\n // Selected target name was set but we still have to update packets\n this.updatePackets()\n }\n if (this.unknown) {\n this.targetNames.push(this.UNKNOWN)\n }\n })\n },\n computed: {\n actualButtonText: function () {\n if (this.selectedPacketName === 'ALL') {\n return 'Add Target'\n }\n if (this.selectedItemName === 'ALL') {\n return 'Add Packet'\n }\n return this.buttonText\n },\n autocompleteDisabled: function () {\n return this.disabled || this.internalDisabled\n },\n buttonDisabled: function () {\n return (\n this.disabled ||\n this.internalDisabled ||\n this.selectedTargetName === null ||\n this.selectedPacketName === null ||\n this.selectedItemNameWIndex === null\n )\n },\n colSize: function () {\n return this.vertical ? 12 : false\n },\n selectedItemNameWIndex: function () {\n if (\n this.itemIsArray() &&\n this.selectedArrayIndex !== null &&\n this.selectedArrayIndex !== this.ALL.label\n ) {\n return `${this.selectedItemName}[${this.selectedArrayIndex}]`\n } else {\n return this.selectedItemName\n }\n },\n },\n watch: {\n initialTargetName: function (val) {\n // These three \"initial\" watchers are here in case the parent component doesn't figure out its initial values\n // until after this component has already been created. All this logic incl. the \"on-set\" events could be\n // simplified with a refactor to use named v-models, but that's probably a significant breaking change.\n if (val) {\n this.selectedTargetName = val.toUpperCase()\n }\n },\n initialPacketName: function (val) {\n if (val) {\n this.selectedPacketName = val.toUpperCase()\n }\n },\n initialItemName: function (val) {\n if (val) {\n this.selectedItemName = val.toUpperCase()\n }\n },\n mode: function (newVal, oldVal) {\n this.selectedPacketName = null\n this.selectedItemName = null\n // This also updates packets and items as needed\n this.targetNameChanged(this.selectedTargetName)\n },\n chooseItem: function (newVal, oldVal) {\n if (newVal) {\n this.updateItems()\n } else {\n this.itemNames = []\n }\n },\n },\n methods: {\n updatePackets: function () {\n if (this.selectedTargetName === 'UNKNOWN') {\n this.packetNames = [this.UNKNOWN]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.UNKNOWN.value)\n this.description = 'UNKNOWN'\n return\n }\n if (this.selectedTargetName === 'ALL') {\n this.packetNames = [this.ALL]\n this.selectedPacketName = this.packetNames[0].value\n this.updatePacketDetails(this.ALL.value)\n this.description = 'ALL'\n return\n }\n this.internalDisabled = true\n const cmd =\n this.mode === 'tlm' ? 'get_all_tlm_names' : 'get_all_cmd_names'\n this.api[cmd](this.selectedTargetName, this.hidden).then((names) => {\n this.packetNames = names.map((name) => {\n return {\n label: name,\n value: name,\n }\n })\n if (this.allowAll) {\n this.packetNames.unshift(this.ALL)\n }\n if (!this.selectedPacketName) {\n this.selectedPacketName = this.packetNames[0].value\n }\n this.updatePacketDetails(this.selectedPacketName)\n const item = this.packetNames.find((packet) => {\n return packet.value === this.selectedPacketName\n })\n if (item && this.chooseItem) {\n this.updateItems()\n }\n this.internalDisabled = false\n })\n },\n\n updateItems: function () {\n if (this.selectedPacketName === 'ALL') {\n return\n }\n this.internalDisabled = true\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.itemNames = packet.items\n .map((item) => {\n let label = item.name\n if (item.data_type == 'DERIVED') {\n label += ' *'\n }\n return [\n {\n label: label,\n value: item.name,\n description: item.description,\n array: item.array_size / item.bit_size,\n },\n ]\n })\n .reduce((result, item) => {\n return result.concat(item)\n }, [])\n this.itemNames.sort((a, b) => (a.label > b.label ? 1 : -1))\n if (this.allowAll) {\n this.itemNames.unshift(this.ALL)\n }\n if (!this.selectedItemName) {\n this.selectedItemName = this.itemNames[0].value\n }\n this.description = this.itemNames[0].description\n this.itemIsArray()\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n this.internalDisabled = false\n },\n )\n },\n itemIsArray: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n if (i === -1) {\n this.selectedArrayIndex = null\n return false\n }\n if (isNaN(this.itemNames[i].array)) {\n this.selectedArrayIndex = null\n return false\n } else {\n if (this.selectedArrayIndex === null) {\n this.selectedArrayIndex = 0\n }\n return true\n }\n },\n arrayIndexes: function () {\n let i = this.itemNames.findIndex(\n (item) => item.value === this.selectedItemName,\n )\n let indexes = [...Array(this.itemNames[i].array).keys()]\n if (this.allowAll) {\n indexes.unshift(this.ALL.label)\n }\n return indexes\n },\n\n targetNameChanged: function (value) {\n this.selectedTargetName = value\n this.selectedPacketName = ''\n this.selectedItemName = ''\n // When the target name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packets\n if (value !== null) {\n this.updatePackets()\n }\n },\n\n packetNameChanged: function (value) {\n this.selectedItemName = ''\n // When the packet name is completed deleted in the v-autocomplete\n // the @change handler is fired but the value is null\n // In this case we don't want to update packet details\n if (value !== null) {\n this.updatePacketDetails(value)\n }\n },\n\n updatePacketDetails: function (value) {\n if (value === 'ALL') {\n this.itemsDisabled = true\n this.internalDisabled = false\n } else {\n this.itemsDisabled = false\n const packet = this.packetNames.find((packet) => {\n return value === packet.value\n })\n if (packet) {\n this.selectedPacketName = packet.value\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, this.selectedPacketName).then(\n (packet) => {\n this.description = packet.description\n this.hazardous = packet.hazardous\n },\n )\n }\n }\n if (this.chooseItem) {\n this.updateItems()\n } else {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n itemNameChanged: function (value) {\n const item = this.itemNames.find((item) => {\n return value === item.value\n })\n if (item) {\n this.itemIsArray()\n this.selectedItemName = item.value\n this.description = item.description\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n indexChanged: function (value) {\n this.$emit('on-set', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n },\n\n buttonPressed: function () {\n if (this.selectedPacketName === 'ALL') {\n this.allTargetPacketItems()\n } else if (this.selectedItemName === 'ALL') {\n this.allPacketItems()\n } else if (this.chooseItem) {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: this.selectedItemNameWIndex,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n } else {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n }\n },\n\n allTargetPacketItems: function () {\n this.packetNames.forEach((packetName) => {\n if (packetName === this.ALL) return\n const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'\n this.api[cmd](this.selectedTargetName, packetName.value).then(\n (packet) => {\n packet.items.forEach((item) => {\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: packetName.value,\n itemName: item['name'],\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n )\n })\n },\n\n allPacketItems: function () {\n this.itemNames.forEach((item) => {\n if (item === this.ALL) return\n this.$emit('addItem', {\n targetName: this.selectedTargetName,\n packetName: this.selectedPacketName,\n itemName: item.value,\n valueType: this.selectedValueType,\n reduced: this.selectedReduced,\n reducedType: this.selectedReducedType,\n })\n })\n },\n },\n}\n</script>\n<style scoped>\n.button {\n padding: 4px;\n}\n.tpic-select {\n max-width: 300px;\n}\n</style>\n"],"names":["ScreenCompleter","Api","response","OpenC3Api","editor","session","pos","prefix","callback","line","lineBefore","parsedLine","suggestions","x","result","more","current","names","acc","curr","target","packets","pkt","packet","item","completions","Config","config","name","routed","error","query","_sfc_main","value","configId","row","dialog","_a","_hoisted_1","_hoisted_2","_createBlock","_component_v_dialog","$options","_cache","$event","_withKeys","_withCtx","_createVNode","_component_v_card","_createElementVNode","_withModifiers","args","_component_v_toolbar","_component_v_spacer","_component_v_card_text","_component_v_row","_component_v_text_field","$data","_component_v_data_table","_component_v_btn","_toDisplayString","_component_v_card_actions","_createTextVNode","val","messages","sortedErrors","a","b","msg","ace.edit","screenMode","event","position","token","oop","ace.require","TextHighlightRules","list","OpenC3HighlightRules","Mode","TextMode","blob","link","fileReader","that","_hoisted_3","_component_v_tooltip","props","_normalizeProps","_guardReactiveProps","_component_v_icon","$props","_component_v_file_input","_component_v_menu","_component_v_list","_component_v_list_item","_component_v_list_item_title","_openBlock","_createElementBlock","_Fragment","_renderList","index","_ctx","alertEvent","env","_component_v_col","message","alphanumeric","expression","filename","fileIcon","file","items","id","found","root","locked","breakpoints","level","path","parts","_component_v_overlay","_component_v_progress_circular","_component_v_treeview","open","_createCommentVNode","TimeFilters","AstroStatusColors","Cable","newVal","oldVal","i","nibble","subscription","UnknownToAstroStatus","output","entry","format","err","_component_v_card_title","_component_v_select","_normalizeStyle","_component_rux_status","SINGLE_SPA_APP_CHANGE_EVENT","getMountedApps","MAX_ERRORS","WidgetComponents","EditScreenDialog","uniqueId","newValue","oldValue","style","origWidth","vm","info","ConfigParserService","screen","refreshInterval","keyword","parameters","lineNumber","lines","widget","bodyRect","elemRect","e","xOffset","yOffset","definition","widgetName","componentName","settings","layout","widgets","setting","data","existing","values","valueId","_vShow","_withDirectives","_component_v_expand_transition","_component_vertical_widget","_component_edit_screen_dialog","_component_v_textarea","propValue","_b","_c","cmd","label","indexes","packetName","_component_v_autocomplete","_component_v_combobox","_normalizeClass"],"mappings":"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"}
|